# Slackアプリ

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F0lZ5yC6lyChDdPG3EdSE%2Fimage.png?alt=media&#x26;token=7249f7b4-63b3-4655-8d25-77b4e5d3a517" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
本連携機能は現在パブリックプレビューとして公開されています。ご意見や機能要望がございましたら、お手数ですが[Issueを作成](https://github.com/Keeper-Security/slack-app/issues)のうえお知らせください。
{% endhint %}

## 概要

Keeper Slackアプリは、ゼロスタンディング特権の実現を支援し、認証情報に関するワークフローの申請および承認をSlack上で直接行えるようにします。Slackエージェントおよびコマンダーサービスモードはお客様環境でホストされ、エンドツーエンド暗号化によりゼロ知識が維持されます。

本ドキュメントでは、Keeperシークレットマネージャーを使用した簡易セットアップ方式によるKeeper Slackアプリのインストール方法を取り扱います。KeeperシークレットマネージャーまたはKeeperPAMのライセンスをお持ちでない場合は、担当のKeeperアカウントマネージャーまでお問い合わせください。

{% embed url="<https://vimeo.com/1164147517?fe=sh&fl=pl>" %}
Keeper Security Slack Appの概要 (英語)
{% endembed %}

## 機能

<table><thead><tr><th width="317.83984375">機能</th><th>説明</th></tr></thead><tbody><tr><td>レコードアクセス申請</td><td>Keeper内の特定のレコードに対して、理由、カスタム権限、アクセス期限を指定してアクセスを申請できます。標準のボルトレコードおよびKeeperPAMリソースが対象です。</td></tr><tr><td>フォルダアクセス申請</td><td>特定のKeeper共有フォルダに対して、理由、カスタム権限、アクセス期限を指定してアクセスを申請できます。</td></tr><tr><td>ワンタイム共有申請</td><td>ワンタイム共有、パスワードリセット、または動的パスワード生成を、自己消滅型の共有リンクで申請できます。ワンタイム共有は編集可能に設定でき、双方向の共有にも対応します。</td></tr><tr><td>エンドポイント特権マネージャー承認</td><td>Keeperエンドポイント特権マネージャー (KEPM) によるジャストインタイム昇格承認を、専用のSlackチャネルからリアルタイムで実行できます。</td></tr><tr><td>SSOクラウドデバイス承認</td><td>Keeperオートメーターサービスを導入していない場合でも、Slack上からSSOクラウドデバイスの承認を実行できます。</td></tr></tbody></table>

## 要件

### システム要件

ゼロ知識および完全なエンドツーエンド暗号化を維持するため、Keeper Slackアプリおよびコマンダーサービスモードのコンテナは、各お客様のインフラストラクチャ上でホストされ、Slackのクラウドサービスと連携します。セットアップ作業には、ローカル環境でコマンダーを使用します。

<table><thead><tr><th width="313.359375">要件</th><th>詳細</th></tr></thead><tbody><tr><td>Linux VM</td><td>クラウドまたはオンプレミス上の任意の仮想マシン。SlackおよびKeeperサービスに対してhttps/443のアウトバウンド接続が可能であること。</td></tr><tr><td>Docker</td><td>サービス構築にはDockerの使用を推奨。</td></tr><tr><td>Keeperコマンダー</td><td>サービスモードが実行中で、アクセス可能であること。</td></tr><tr><td>Keeperシークレットマネージャー</td><td>シークレット設定データの取得に、KeeperシークレットマネージャーまたはKeeperPAMライセンスが必要。</td></tr><tr><td>Slackワークスペース</td><td>アプリのインストールおよび設定を行うための管理者権限が必要。</td></tr></tbody></table>

{% hint style="info" %}
slack-app-setup コマンドを実行するには、Keeperシークレットマネージャー (KSM) を有効化しておく必要があります。KSMをご利用いただけない場合は、担当のアカウントマネージャーまでお問い合わせください。
{% endhint %}

## セットアップ手順

以下のセットアップ手順では、コマンダーおよびSlackアプリのDockerイメージ (keeper/commander、keeper/slack-app) を使用します。本連携では、各サービスで使用する設定情報を保護するためにKeeperシークレットマネージャーも利用します。

Slackアプリの設定は、次の5つの手順で行います。

1. Slackアプリの作成
2. 承認用チャネルの作成
3. コマンダーサービスモードの設定
4. Slackアプリ設定コマンドの実行
5. Docker環境へのデプロイ

***

### 1. Slackアプリの作成

このセクションでは、Slackワークスペースの管理者としてSlackアプリを作成し、必要な設定値を取得します。

* Slack管理者として api.slack.com/apps にアクセスします。
* **\[Create New App]** (アプリを新規作成) → **\[From a manifest]** (マニフェストから) をクリックします。
* 対象のワークスペースを選択します。
* 以下のJSONコンテンツをマニフェストに貼り付けます。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FKX0Z7tHthAuPxoYAWNmK%2Fimage.png?alt=media&#x26;token=57fec1f0-9057-4ba7-8185-d26a29f2c567" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Frhakwnl5tUJcdjza90Xr%2Fimage.png?alt=media&#x26;token=da65db9e-1a1e-4f1f-9982-1ccfe7248227" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FmaGPPPuwq3U9muZO24wB%2Fimage.png?alt=media&#x26;token=1ab1e412-8135-4de6-b913-cc6178c25792" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FhOnLDLAHSLA8MRbgxywA%2Fimage.png?alt=media&#x26;token=691e85c9-6d92-4920-8f2a-989dfecae961" alt="" width="563"><figcaption></figcaption></figure>

```json
{
  "display_information": {
    "name": "Keeper Security",
    "description": "Access Keeper Vault and PEDM directly within Slack",
    "background_color": "#173964",
    "long_description": "A secure, team-friendly password manager built for Slack. Easily store, retrieve, and share credentials without leaving your workspace. With encrypted storage, access controls, and approval workflows, it helps your team manage secrets safely and efficiently."
  },
  "features": {
    "app_home": {
      "home_tab_enabled": true,
      "messages_tab_enabled": true,
      "messages_tab_read_only_enabled": false
    },
    "bot_user": {
      "display_name": "Keeper Security",
      "always_online": true
    },
    "slash_commands": [
      {
        "command": "/keeper-request-record",
        "description": "Request access to a Keeper record",
        "usage_hint": "\"Record UID or Description\" Justification message or ticket number",
        "should_escape": false
      },
      {
        "command": "/keeper-request-folder",
        "description": "Request access to a Keeper folder",
        "usage_hint": "\"Folder UID or Description\" Justification message or ticket number",
        "should_escape": false
      },
      {
        "command": "/keeper-one-time-share",
        "description": "Request a one-time share link to a Keeper record",
        "usage_hint": "\"Record UID or Description\" Justification message or ticket number",
        "should_escape": false
      }
    ]
  },
  "oauth_config": {
    "scopes": {
      "bot": [
        "chat:write",
        "commands",
        "im:write",
        "users:read",
        "channels:read",
        "users:read.email"
      ]
    }
  },
  "settings": {
    "event_subscriptions": {
      "bot_events": [
        "app_home_opened"
      ]
    },
    "interactivity": {
      "is_enabled": true
    },
    "org_deploy_enabled": false,
    "socket_mode_enabled": true,
    "token_rotation_enabled": false
  }
}
```

* Slackアプリの設定内容を確認し、アプリを作成します。
* **\[Basic Information]** (基本情報) → **\[Display Information]** (表示情報) に移動し、アプリのプロフィール画像としてKeeperのアイコンをアップロードします。以下に、使用可能な512×512サイズのKeeperアイコンを掲載しています。ダウンロードしてご利用ください。

画面左側のメニューで、**\[Basic Information]** (基本情報) → **\[App-Level Tokens]** (アプリレベルトークン) → **\[Generate Token and Scopes]** (トークンとスコープを生成) をクリックします。「keeper-slack-app」という名前でアプリレベルトークンを作成し、スコープに `connections:write` を指定します。生成したトークンは、次の手順で「App Token」として使用するため保存してください。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fb8bT1TE1ygH6jgbdkWgo%2Fimage.png?alt=media&#x26;token=64bf044e-aff6-47c9-915c-43b7f400a60f" alt=""><figcaption></figcaption></figure>

* 画面左側のメニューで、**\[Install App]** (アプリをインストール) をクリックします。**\[Install to Workspace]** (ワークスペースにインストール) をクリックし、表示される確認画面でインストールを実行します。その後、次の手順で使用するために**Bot User OAuthトークン**を保存します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fr0ya2SswKizr1ewBex6r%2Fimage.png?alt=media&#x26;token=ab4e2ff6-1032-4382-88f6-1f7d91766dbc" alt=""><figcaption></figcaption></figure>

アプリを作成後、以下の認証情報を取得します。

以下は表形式です。

| 認証情報           | 取得場所                                                                                          |
| -------------- | --------------------------------------------------------------------------------------------- |
| App Token      | **\[Basic Information]** (基本情報) → **\[App-Level Tokens]** (アプリレベルトークン) → **\[Generate]** (生成) |
| Bot Token      | **\[OAuth & Permissions]** (OAuthと権限) → **\[Bot User OAuth Token]** (BotユーザーOAuthトークン)        |
| Signing Secret | **\[Basic Information]** (基本情報) → **\[App Credentials]** (アプリ認証情報)                            |

{% hint style="info" %}
生成した**App Token**、**Bot Token**、および**Signing Secret**は、手順4で使用するため保存してください。
{% endhint %}

### 2. 承認用チャネルの作成

* Slackワークスペース内で、プライベートチャネル (例: `#keeper-vault-approvers`) を作成します。
* 作成した承認用チャネルにKeeperボットを招待します。
  * **方法1**\
    承認用チャネル内で、次のコマンドを入力します。\
    /invite @Keeper Security
  * **方法2**\
    チャネル名をクリック → **\[Settings]** (設定) → **\[Integrations]** (インテグレーション) → **\[Add an App]** (アプリを追加) → 「Keeper Security」を検索 → **\[Add]** (追加)
* 最後に、チャネルIDをコピーします。
  * チャネルを右クリック → **\[View channel details]** (チャネルの詳細を表示) → 画面下部のIDをコピーします。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FWGpVNStNmJ93xb6DZlYn%2Fimage.png?alt=media&#x26;token=a7e11250-9cd3-4eca-8c1a-ee880e896193" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**手順4**で使用するために**チャネルID**を保存しておきます。
{% endhint %}

***

### 3. コマンダーサービスモードの設定

Keeperテナント内でサービスが認証およびコマンド実行を行えるようにするには、Keeperコマンダーの構成ファイルを作成し、あらかじめ認可しておく必要があります。この構成は、ホストコンピューターまたはワークステーション上で生成できます。

* ローカル環境に[Keeperコマンダーをインストール](https://docs.keeper.io/keeperpam/commander-cli/commander-installation-setup)します。
* 必要に応じて、本連携専用のKeeperサービスアカウントを新規作成します。対象となるレコードおよびフォルダへのアクセス権と、レコードおよびフォルダの共有を実行できる権限を付与してください。
* Keeperサービスアカウント (例: `serviceuser@company.com`) でコマンダーにログインします。

```
keeper shell
My Vault> login serviceuser@company.com
```

* 2要素認証を含む認証プロセスを完了します。完全に認証が完了したら、手順4へ進みます。

***

### 4. Slackアプリ設定コマンドの実行

`slack-app-setup` コマンドを実行すると、Slackアプリおよびコマンダーサービスモードを運用するための `docker-compose.yml` ファイルが生成されます。

コマンダーのシェルから、次のコマンドを入力します。

```
slack-app-setup  
```

#### コマンドラインオプション

`slack-app-setup` コマンドでは、カスタマイズのために以下のオプションフラグを使用できます。

| パラメータ                     | 説明                    | 既定値                                     |
| ------------------------- | --------------------- | --------------------------------------- |
| --folder-name (任意)        | 共有フォルダの名称             | Commander Service Mode - Slack App      |
| --app-name (任意)           | シークレットマネージャーアプリの名称    | Commander Service Mode - KSM App        |
| --config-record-name (任意) | コマンダー設定レコードの名称        | Commander Service Mode Docker Config    |
| --slack-record-name (任意)  | Slack設定レコードの名称        | Commander Service Mode Slack App Config |
| --config-path (任意)        | config.jsonファイルのパス    | \~/.keeper/config.json                  |
| --timeout (任意)            | デバイスタイムアウトの設定         | 30d                                     |
| --skip-device-setup (任意)  | 既に構成済みの場合、デバイス登録をスキップ | false                                   |

#### カスタム名称を指定した例

```
slack-app-setup --folder-name "My Slack Integration" --timeout 7d  
```

コマンドを実行すると、次のプロンプトに従って設定を進めます。

#### 1. Dockerサービスモードの設定

Keeperシークレットマネージャー (KSM) の構成が自動的に行われ、Docker経由でサービスモードを設定するために必要な構成ファイルがアップロードされます。

```dockerfile
Phase 1: Running Docker Service Mode Setup
═══════════════════════════════════════════════════════════
    Docker Setup
═══════════════════════════════════════════════════════════

[1/7] Checking device settings...
  ✓  Device already registered
  ✓  Persistent login already enabled
  ✓  Setting logout timeout to 30d...

[2/7] Creating shared folder 'Commander Service Mode - Slack App'...
  ✓  Shared folder created successfully

[3/7] Creating record 'Commander Service Mode Docker Config'...
  ✓  Record created successfully

[4/7] Uploading config.json attachment...
  ✓  Config file uploaded successfully

[5/7] Creating Secrets Manager app 'Commander Service Mode - KSM App'...
  ✓  App created successfully

[6/7] Sharing folder with app...
  ✓  Folder shared with app

[7/7] Creating client device and generating config...
  ✓  Client device created successfully

✓ Docker Setup Complete!
```

#### サービス設定

コマンダーサービスのポートを設定します。

<table><thead><tr><th width="132.72265625">項目</th><th width="442.94140625">説明</th><th>例</th></tr></thead><tbody><tr><td>Port</td><td>コマンダーサービスモードで使用するポート番号 (1024～65535)</td><td>8900</td></tr></tbody></table>

#### トンネリング設定 (任意)

外部アクセスが必要な場合は、以下のいずれかを設定します。

<table><thead><tr><th width="286.27734375">項目</th><th>説明</th></tr></thead><tbody><tr><td>Ngrok Auth Token</td><td>公開URLを生成するためのngrok認証トークン</td></tr><tr><td>Ngrok Custom Domain</td><td>カスタムngrokドメイン (例: myapp.ngrok.io)</td></tr><tr><td>Cloudflare Tunnel Token</td><td>公開URLを生成するためのCloudflareトンネルトークン</td></tr><tr><td>Cloudflare Custom Domain</td><td>Cloudflareで設定したカスタムドメイン (例: slack.company.com)</td></tr></tbody></table>

{% hint style="warning" %}
NgrokとCloudflareは同時に使用できません。必要に応じていずれか一方を選択してください。

Slackアプリの利用において必須ではありませんが、Jiraアプリなど他の連携機能を使用する場合は、クラウドトンネルの設定が必要になることがあります。
{% endhint %}

#### 2. Slackアプリ連携の設定

手順1および手順2で取得したSlackの認証情報を入力します。

| 項目                                    | 説明                                        | 例                   |
| ------------------------------------- | ----------------------------------------- | ------------------- |
| Slack App Token (必須)                  | 手順1で取得した xapp- で始まるトークン。90文字以上である必要があります。 | xapp-1-A0XXXXX-...  |
| Slack Bot Token (必須)                  | 手順1で取得した xoxb- で始まるトークン。50文字以上である必要があります。 | xoxb-1234567890-... |
| Slack Signing Secret (必須)             | 手順1で取得したSigning Secret。32文字である必要があります。    | a1b2c3d4e5f6...     |
| Approvals Channel ID (必須)             | 手順2で取得したチャネルID。                           | C0XXXXXXX           |
| Enable PEDM? (任意)                     | エンドポイント特権マネージャー承認を有効化するかどうか (y/n)         | y                   |
| PEDM Polling Interval (任意)            | PEDMリクエストを確認する間隔 (秒)。既定値: 120             | 120                 |
| Enable Device Approvals? (任意)         | SSO Cloudデバイス承認を有効化するかどうか (y/n)           | y                   |
| Device Approval Polling Interval (任意) | デバイス承認を確認する間隔 (秒)。既定値: 120                | 120                 |

{% hint style="info" %}
エンドポイント特権マネージャー承認およびSSO Cloud承認を処理するには、Slackアプリのサービスユーザーに「Manage Endpoint Privilege」(エンドポイント特権の管理) および「Manage the Keeper Admin Console」(Keeper管理コンソールの管理) の管理者権限が付与されている必要があります。
{% endhint %}

コマンドが正常に実行されると、次の処理が自動的に行われます。

* 永続的なデバイス認証の設定
* 「Commander Service Mode – Slack App」という名称の共有フォルダの作成
* 共有フォルダにアクセス可能なKSMアプリケーションの作成
* クライアントデバイスの作成およびBase64エンコードされた設定値の生成
* `.keeper` ディレクトリ内の `config.json` ファイルをアップロードし、Docker設定レコードを作成
* Slackアプリの認証情報を含むSlack App設定レコードの作成

```
✓ Slack App Integration Setup Complete!

Resources Created:
  Phase 1 - Commander Service:
    • Shared Folder: Commander Service Mode - Slack App
    • KSM App: Commander Service Mode - KSM App (with edit permissions)
    • Config Record: XXXXXX
    • KSM Base64 Config: ✓ Generated
  Phase 2 - Slack App:
    • Slack Config Record: XXXXXX
    • Approvals Channel: XXXXXX
    • PEDM Integration: false
    • Device Approval: false
```

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FyzWGbttBPqWcNVl1qIRG%2Fimage.png?alt=media&#x26;token=6b8b9374-4cda-45dc-a5af-4118baf6385d" alt=""><figcaption></figcaption></figure>

* 正常に実行されると、コマンダーサービスモードおよびSlackアプリの両サービスを含む `docker-compose.yml` ファイルが生成され、デプロイ可能な状態となります。

```
services:
  commander:
    container_name: keeper-service
    ports:
    - 127.0.0.1:<port>:<port>
    image: keeper/commander:latest
    command: service-create -p <port> -c 'search,share-record,share-folder,record-add,one-time-share,pedm,device-approve,get' -f json -q y -ur <CONFIG_RECORD_UID> --ksm-config <KSM_CONFIG_BASE64_VALUE> --record <CONFIG_RECORD_UID>
    healthcheck:
      test:
      - CMD-SHELL
      - python -c "import sys, urllib.request; sys.exit(0 if urllib.request.urlopen('http://localhost:<port>/health', timeout=2).status == 200 else 1)"
      interval: 60s
      timeout: 3s
      start_period: 10s
      retries: 30
    restart: unless-stopped
  slack-app:
    container_name: keeper-slack-app
    image: keeper/slack-app:latest
    environment:
      KSM_CONFIG: <KSM_CONFIG_BASE64_VALUE>
      COMMANDER_RECORD: <CONFIG_RECORD_UID>
      SLACK_RECORD: <SLACK_CONFIG_RECORD_UID>
    depends_on:
      commander:
        condition: service_healthy
    restart: unless-stopped
```

セットアップが完了したら、デバイストークンの競合を防ぐため、コマンダーのセッションを終了し、ローカルの `.keeper/config.json` ファイルを削除します。

```bash
My Vault> quit
$ rm ~/.keeper/config.json
```

***

### 5. Docker環境へのデプロイ

このセクションでは、コマンダーサービスを実行するLinux仮想マシンまたはホスト上にDocker Compose環境を構築します。

* Linux VMを起動するか、Linuxホストを準備し、SSHで接続します。
* Dockerおよびdocker-composeをインストールします（インストール手順をご参照ください）。
* 手順4で生成した docker-compose.yml ファイルを、対象のLinuxサーバーへ転送します。

ホストマシン上で、次のコマンドを実行してサービスを起動します。

```bash
docker compose up -d
```

#### サービス起動の流れ

サービスは順番に起動します。

1. まずコマンダーサービスが起動し、APIキーを生成します。生成したAPIキーとサービスURLはボルトのレコードに保存されます。
2. ヘルスチェックにより、コマンダーサービスが正常に稼働していることを確認します。
3. ヘルスチェック完了後にSlackアプリが起動し、ボルトのレコードからAPIキーおよびサービスURLを自動取得します。

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F189aUnlSgu9QyZzSc5Xs%2Fimage.png?alt=media&#x26;token=8b17ceaf-f633-4bb4-9fe8-b56f9c94dc4e" alt=""><figcaption></figcaption></figure>

#### 起動の確認

正常に起動していることを確認するため、ログを監視します。

コンテナの状態確認

```bash
$ docker ps
NAME              STATUS                    PORTS
keeper-service    Up (healthy)              127.0.0.1:<port> -> <port>/tcp
keeper-slack-app  Up
```

コマンダーサービスのログ確認

```bash
$ docker logs keeper-service
[2026-01-21 10:00:00] Starting Commander Service Mode...
Generated API key: ****nQ= (stored in vault record: <CONFIG_VAULT_RECORD>)
Commander Service starting on <SERVICE_URL>/api/v2
Keeper Commander Service initialization complete
```

{% hint style="info" %}
セキュリティ上の理由により、DockerログではAPIキーはマスク表示されます。両サービスは共有ボルトレコードを介して安全に通信します。
{% endhint %}

Slackアプリのログ確認

```bash
docker logs keeper-slack-app
```

正常に起動している場合は、次のようなメッセージが表示されます。

```
============================================================
Starting Keeper Slack App
============================================================
[INFO] Config: /app/slack_config.yaml
===========================================================
[INFO] Initializing Keeper Commander Slack App...
[INFO] Credentials fetched successfully from KSM vault: Service Mode Credentials, Slack Credentials
[INFO] Loaded configuration from KSM records
[OK] Configuration loaded
[OK] Keeper client initialized: http://commander:<port>/api/v2⁠
[OK] Slack app initialized
[OK] All handlers registered
[OK] Socket Mode handler ready
[INFO] Approval channel: C0A42QVAY4A
[OK] PEDM poller initialized (disabled, interval: 120s)
[OK] Cloud SSO Device Approval poller initialized (disabled, interval: 120s)

============================================================
Starting Keeper Commander Slack App
============================================================
[OK] Socket Mode enabled
[INFO] Listening for Slack commands and interactions...
============================================================
[OK] Keeper Service Mode is accessible
[INFO] PEDM polling is disabled (set pedm.enabled=true in config to enable)
[INFO] Cloud SSO Device Approval polling is disabled (set device_approval.enabled=true in config to enable)

⚡️ Bolt app is running!
```

***

### 申請ユーザー向けコマンドリファレンス

#### /keeper-request-record

特定のKeeperレコードへのアクセスを申請します。

**構文**

```bash
/keeper-one-time-share <record-uid-or-description> <justification>
```

**例**

```bash
/keeper-one-time-share kR3cF9Xm2Lp8NqT1uV6w Need to share with contractor John
/keeper-one-time-share "AWS Production Password" Sharing with vendor
```

#### /keeper-request-folder

共有フォルダへのアクセスを申請します。

**構文**

```bash
/keeper-request-folder <folder-uid-or-description> <justification>
```

**例**

```bash
/keeper-request-folder kF8zQ2Nm5Wx9PtR3sY7a Need staging access
/keeper-request-folder "Staging Team Folder" Need staging access
```

#### /keeper-one-time-share

レコードのワンタイム共有リンクを申請します。

**構文**

```bash
/keeper-one-time-share <record-uid-or-description> <justification>
```

**例**

```bash
/keeper-one-time-share kR3cF9Xm2Lp8NqT1uV6w Need to share with contractor John
/keeper-one-time-share "AWS Production Password" Sharing with vendor
```

## スクリーンショット

以下のスクリーンショットでは、Keeper Slackアプリの主要機能を紹介しています。

#### Slackアプリを使用したリクエスト操作

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2Fjw6Pcu6ditJa925NKYwv%2Fimage.png?alt=media&#x26;token=e0c762d1-44e6-4f96-8f68-6f5c96f238ed" alt=""><figcaption></figcaption></figure>

#### レコードへのアクセス申請 (UID未指定)

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F0D1Hu8JdHFoaBtiCJx1V%2Fimage.png?alt=media&#x26;token=e2b72c0b-2788-41d6-b1a8-5737acd6f9c5" alt=""><figcaption></figcaption></figure>

#### レコードへのアクセス申請 (UID指定あり)

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FiIcgGk1QNq7axOSuL8E5%2Fimage.png?alt=media&#x26;token=9ba51ccd-8fe5-48f8-aaa0-b716a48e419a" alt=""><figcaption></figcaption></figure>

#### レコードアクセス申請 - 管理者ビュー

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FXDF36ivoTZKXaHMmx0cX%2Fimage.png?alt=media&#x26;token=feac1488-7a66-4031-8686-986d3b23a3cc" alt=""><figcaption></figcaption></figure>

#### フォルダへのアクセス申請 (UID指定あり)

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FzMAOvif33EKk1OHQVXrP%2Fimage.png?alt=media&#x26;token=09505d36-76e9-421b-a778-5cc283b72751" alt=""><figcaption></figcaption></figure>

#### フォルダアクセス申請 - 管理者ビュー

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FaCfPL9BTGyaxsubbWmGH%2Fimage.png?alt=media&#x26;token=99cfcbde-1d84-4265-ac0c-f31c03388ed8" alt=""><figcaption></figcaption></figure>

#### ワンタイム共有申請 - パスワードリセット用

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FfxA2nfhqj02FmUV79qyL%2Fimage.png?alt=media&#x26;token=cf9efcd5-6b52-4560-b5d3-890f2b764f03" alt=""><figcaption></figcaption></figure>

#### ワンタイム共有 - 新規レコード作成付き管理者ビュー

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F1dCtYIfYhpL111b4c4AS%2Fimage.png?alt=media&#x26;token=217e7b10-7558-4622-a255-f238e634945a" alt=""><figcaption></figcaption></figure>

#### ワンタイム共有 - 既存レコード検索付き管理者ビュー

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2FiKdXYHnaIFHJK1VZ8Dxf%2Fimage.png?alt=media&#x26;token=2d8a8fc5-e9cb-4ee0-97e0-681ed393e397" alt=""><figcaption></figcaption></figure>

#### エンドポイント特権マネージャー - 昇格承認

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F2g201ZZjJE5wLYFZ98x7%2Fimage.png?alt=media&#x26;token=18eaa4a9-e929-4ddc-b231-72f95d2005fa" alt=""><figcaption></figcaption></figure>

#### SSOクラウドデバイス承認 - 管理者ビュー

<figure><img src="https://859776093-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPL6k1aGsLiFiiJ3Y7zCl%2Fuploads%2F7TcVkJdvPt0wx1jL2WYR%2Fimage.png?alt=media&#x26;token=4ea388aa-3201-4c42-b017-cccc09cdda06" alt=""><figcaption></figcaption></figure>

### アップデート

#### コマンダーサービスモードおよびSlackアプリコンテナの更新

コマンダーまたはSlackアプリを最新バージョンへ更新するには、以下の手順でサービスを停止し、コンテナを更新したうえで再起動します。

```bash
docker compose down
docker compose pull
docker compose up -d
```

## トラブルシューティング <a href="#troubleshooting" id="troubleshooting"></a>

#### 起動エラー

| エラー                                               |                                           原因 | 対処方法                                                                         |
| ------------------------------------------------- | -------------------------------------------: | ---------------------------------------------------------------------------- |
| コマンダーサービスモードがマスターパスワードを要求している                     |           ボルトレコードに複数の `config.json` が添付されている | 手順4–5で `slack-app-setup` を新しいフォルダ名で再実行し、新しい JSON 構成ファイルを作成する                 |
| \[WARN] Warning: Cannot reach Keeper Service Mode |             サービスモードが稼働していない、またはサービスURLが誤っている | ボルトレコード内のサービスURLが正しいか確認する（サービスが起動しているかも確認）                                   |
| `invalid_auth`                                    |                       Slack Bot Token が誤っている | `bot_token` が `xoxb-` で始まっていることを確認する（`xapp-` や `xoxp-` ではない）                 |
| Socket Mode が有効化されていない / アプリレベルトークンが存在しないまたは誤っている | Socket Mode 未有効、または App-Level Token が未設定・誤設定 | Socket Mode を有効にし、`connections:write` スコープで App-Level Token（アプリレベルトークン）を生成する |

#### Slack APIエラー

| エラー                 | 原因                    | 対処方法                                                                                               |
| ------------------- | --------------------- | -------------------------------------------------------------------------------------------------- |
| `channel_not_found` | ボットが承認用チャネルに招待されていない  | 該当チャネルで `/invite @Keeper Commander` を実行する                                                          |
| `not_in_channel`    | ボットがチャネルから削除されている     | ボットをチャネルに再招待する                                                                                     |
| `missing_scope`     | ボットに必要な権限が付与されていない    | アプリを再インストールし、`chat:write`、`commands`、`im:write`、`users:read`、`channels:read` の各スコープが設定されていることを確認する |
| `invalid_blocks`    | Block Kit メッセージの形式が不正 | ログで該当するブロックエラーを確認する (多くの場合、データ形式の不備)                                                               |
| `user_not_found`    | SlackユーザーIDが無効        | ユーザーがワークスペースから無効化されている可能性がある                                                                       |

#### サービスモードのエラー

| エラー                                | 原因                           | 対処方法                                                                |
| ---------------------------------- | ---------------------------- | ------------------------------------------------------------------- |
| Failed to submit command: HTTP 403 | APIキーが無効または欠落している            | 構成ボルトレコードの api\_key がコマンダーサービスモード側と一致するか確認する                        |
| Failed to submit command: HTTP 404 | APIエンドポイントのバージョンが誤っている       | V2エンドポイントを使用する：/api/v2/（/api/v1/ は使用しない）                            |
| Failed to submit command: HTTP 405 | 間違ったHTTPメソッドを使用している          | 正しいHTTPメソッドを使用しているか確認する。コマンダーサービスモードがキュー（queue）を有効にして実行されていることを確認する |
| Command timed out or failed        | サービスモードが過負荷、またはコマンドが登録されていない | サービスモードの負荷を軽減する／タイムアウトを延長する。コマンドがサービスモードに登録されているか確認する               |
| No request\_id received from API   | サービスモードがキュー/非同期モードを使用していない   | サービスモードをキュー（queue）有効のV2モードで再起動する（queue/asyncモードを有効にする）              |

#### アクセス付与エラー

| エラー                                          | 原因                                            | 対処方法                                                                  |
| -------------------------------------------- | --------------------------------------------- | --------------------------------------------------------------------- |
| Record Not Found                             | UIDが無効、またはレコードが削除されている                        | 指定したレコードUIDがKeeperボルト内に存在することを確認する                                    |
| Folder Not Found                             | フォルダUIDが無効                                    | 指定したフォルダUIDがKeeperボルト内に存在することを確認する                                    |
| Invalid UID Type (record vs folder)          | アイテム種別に対して誤ったコマンドを使用している                      | フォルダには `/keeper-request-folder`、レコードには `/keeper-request-record` を使用する |
| This user already has time-limited access... | 既存の共有設定と競合している                                | 既存のアクセス権を一度取り消してから、新しい権限を付与する                                         |
| Share permissions require permanent access   | 期間指定と共有権限（Can Share / Edit & Share など）を併用している | 共有権限（Can Share、Edit & Share、Change Owner）は常に永続的なアクセスとなる               |
| User share...failed                          | フォルダ内の権限競合                                    | 既存のアクセス権が競合している可能性がある。既存権限を取り消し、再度付与する                                |

#### 検索およびモーダルエラー

| エラー                                      | 原因                             | 対処方法                                                    |
| ---------------------------------------- | ------------------------------ | ------------------------------------------------------- |
| No records found matching...             | 検索条件が限定的すぎる、または一致するレコードが存在しない  | 検索条件を広げる。対象レコードがボルト内に存在することを確認する                        |
| Search command timed out                 | サービスモードの応答が遅い、またはボルトの規模が非常に大きい | `_poll_for_result()` の `max_wait` を増やす、または検索条件をより具体的にする |
| Error processing search modal submission | モーダルのデータが破損している、または有効期限切れ      | モーダルを閉じて再度実行する。ログで詳細なエラーを確認する                           |
| Modal shows "Searching..." forever       | 結果取得処理が完了していない                 | サービスモードのログを確認し、検索コマンドが正しく登録されているか確認する                   |

#### ワンタイム共有エラー

| エラー                                                     | 原因                            | 対処方法                                                   |
| ------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ |
| one-time share links can not be created for PAM records | コマンダーがPAMレコードのワンタイム共有に対応していない | PAM以外のレコードに対して申請する                                     |
| Share link created but URL not found in response        | サービスモードの応答形式が想定外              | サービスモードのバージョンを確認し、`one-time-share` コマンドが登録されていることを確認する |
| Failed to create one-time share                         | レコードが共有可能な状態ではない              | 対象レコードに対してユーザーが共有権限を持っていることを確認する                       |

#### レコード作成エラー

| エラー                                           | 原因                    | 対処方法                                       |
| --------------------------------------------- | --------------------- | ------------------------------------------ |
| Failed to create record                       | 必須フィールドの不足、またはコマンドエラー | title、login、password が指定されていることを確認する       |
| Record created but UID could not be retrieved | 作成後の検索に失敗している         | レコードは作成済みだが検索がタイムアウトしている可能性がある。ボルト内で手動検索する |

#### KEPMエラー

| エラー                                 | 原因                      | 対処方法                                                         |
| ----------------------------------- | ----------------------- | ------------------------------------------------------------ |
| No data returned                    | KEPM機能が有効になっていない        | Keeperエンタープライズ設定でKEPMを有効化する。サービスユーザーに必要な管理者権限が付与されていることを確認する |
| KEPM sync failed                    | サービスモードがKEPMサーバーに接続できない | ネットワーク接続およびKEPMの設定を確認する                                      |
| Failed to approve/deny KEPM request | リクエストの有効期限が切れている可能性がある  | リクエストがまだ保留中か確認する。自動的に期限切れになっている場合がある                         |

## 参考 <a href="#references" id="references"></a>

* [コマンダーCLIの概要](https://docs.keeper.io/jp/keeperpam/commander-cli/overview)
* [コマンダーサービスモード](https://docs.keeper.io/keeperpam/commander-cli/service-mode-rest-api)
* [エンドポイント特権マネージャー](https://docs.keeper.io/keeperpam/endpoint-privilege-manager)
* [クラウドSSOコネクト](https://app.gitbook.com/o/-LO5CAzoigGmCWBUbw9z/s/-Mfd2v-YT48Ljtykb8qm/)
