Slackアプリ
Keeperボルトおよびエンドポイント特権マネージャーと連携するSlack承認ワークフロー

概要
Keeper Slackアプリは、ゼロスタンディング特権の実現を支援し、認証情報に関するワークフローの申請および承認をSlack上で直接行えるようにします。Slackエージェントおよびコマンダーサービスモードはお客様環境でホストされ、エンドツーエンド暗号化によりゼロ知識が維持されます。
本ドキュメントでは、Keeperシークレットマネージャーを使用した簡易セットアップ方式によるKeeper Slackアプリのインストール方法を取り扱います。KeeperシークレットマネージャーまたはKeeperPAMのライセンスをお持ちでない場合は、担当のKeeperアカウントマネージャーまでお問い合わせください。
機能
レコードアクセス申請
Keeper内の特定のレコードに対して、理由、カスタム権限、アクセス期限を指定してアクセスを申請できます。標準のボルトレコードおよびKeeperPAMリソースが対象。対象となるPAMユーザーレコードでは、承認者が時間制限付きアクセスの期限切れ時に認証情報を自動ローテーションする設定も任意で可能です。
フォルダアクセス申請
特定のKeeper共有フォルダに対して、理由、カスタム権限、アクセス期限を指定してアクセスを申請できます。クラシック共有フォルダおよび階層型共有フォルダ (NSF) のロールベース権限に対応。PAMユーザーフォルダでは、期限切れ時に認証情報を自動ローテーションする設定も任意で可能です。
ワンタイム共有申請
ワンタイム共有、パスワードリセット、または動的パスワード生成を、自己消滅型の共有リンクで申請できます。ワンタイム共有は編集可能に設定でき、双方向の共有にも対応します。
セルフサーブレコード作成
エンジニアは /keeper-create-secret により、共有フォルダ内に直接新しいKeeperレコードを作成できます。申請ユーザーがアクセスできる共有フォルダのみが表示されます。すべてのレコード作成について管理者に通知されます。
エンドポイント特権マネージャー承認
Keeperエンドポイント特権マネージャー (KEPM) によるジャストインタイム昇格承認を、専用のSlackチャネルからリアルタイムで実行できます。
SSOクラウドデバイス承認
Keeperオートメーターサービスを導入していない場合でも、Slack上からSSOクラウドデバイスの承認を実行できます。
申請者のKeeperチームに基づき、ボルトアクセス申請をチーム固有のSlack承認チャネルへ振り分けます。承認者が付与できる対象を、特定のフォルダおよびレコードのUIDに制限することも任意で可能です。
要件
システム要件
ゼロ知識および完全なエンドツーエンド暗号化を維持するため、Keeper Slackアプリおよびコマンダーサービスモードのコンテナは、各お客様のインフラストラクチャ上でホストされ、Slackのクラウドサービスと連携します。セットアップ作業には、ローカル環境でコマンダーを使用します。
Linux VM
クラウドまたはオンプレミス上の任意の仮想マシン。SlackおよびKeeperサービスに対してhttps/443のアウトバウンド接続が可能であること。
Docker
サービス構築にはDockerの使用を推奨。
Keeperコマンダー
サービスモードが実行中で、アクセス可能であること。
Keeperシークレットマネージャー
シークレット設定データの取得に、KeeperシークレットマネージャーまたはKeeperPAMライセンスが必要。
Slackワークスペース
アプリのインストールおよび設定を行うための管理者権限が必要。
重要: slack-app-setup コマンドを実行するには、Keeperシークレットマネージャー (KSM) を有効化しておく必要があります。KSMをご利用いただけない場合は、担当のアカウントマネージャーまでお問い合わせください。
セットアップ手順
以下のセットアップ手順では、コマンダーおよびSlackアプリのDockerイメージ (keeper/commanderおよびkeeper/slack-app)を使用します。本連携では、各サービスで使用する設定情報を保護するためにKeeperシークレットマネージャーも利用します。
Slackアプリの設定は、次の5つの手順で行います。
1. Slackアプリの作成
このセクションでは、Slackワークスペースの管理者としてSlackアプリを作成し、必要な設定値を取得します。
Slack管理者として api.slack.com/apps にアクセスします。
[Create New App] (アプリを新規作成) → [From a manifest] (マニフェストから) をクリックします。
対象のワークスペースを選択します。
以下のJSONコンテンツをマニフェストに貼り付けます。




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」として使用するため保存してください。

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

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

3. コマンダーサービスモードの設定
Keeperテナント内でサービスが認証およびコマンド実行を行えるようにするには、Keeperコマンダーの構成ファイルを作成し、あらかじめ認可しておく必要があります。この構成は、ホストコンピューターまたはワークステーション上で生成できます。
ローカル環境にKeeperコマンダーをインストールします。
必要に応じて、本連携専用のKeeperサービスアカウントを新規作成します。対象となるレコードおよびフォルダへのアクセス権と、レコードおよびフォルダの共有を実行できる権限を付与してください。
Keeperサービスアカウント (例:
serviceuser@company.com) でコマンダーにログインします。
2要素認証を含む認証プロセスを完了します。完全に認証が完了したら、手順4へ進みます。
4. Slackアプリ設定コマンドの実行
slack-app-setup コマンドを実行すると、Slackアプリおよびコマンダーサービスモードを運用するための docker-compose.yml ファイルが生成されます。
コマンダーのシェルから、次のコマンドを入力します。
コマンドラインオプション
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
カスタム名称を指定した例
コマンドを実行すると、次のプロンプトに従って設定を進めます。
1. Dockerサービスモードの設定
Keeperシークレットマネージャー (KSM) の構成が自動的に行われ、Docker経由でサービスモードを設定するために必要な構成ファイルがアップロードされます。
サービス設定
コマンダーサービスのポートを設定します。
Port
コマンダーサービスモードで使用するポート番号 (1024~65535)
8900
トンネリング設定 (任意)
外部アクセスが必要な場合は、以下のいずれかを設定します。
Ngrok Auth Token
公開URLを生成するためのngrok認証トークン
Ngrok Custom Domain
カスタムngrokドメイン (例: myapp.ngrok.io)
Cloudflare Tunnel Token
公開URLを生成するためのCloudflareトンネルトークン
Cloudflare Custom Domain
Cloudflareで設定したカスタムドメイン (例: slack.company.com)
NgrokとCloudflareは同時に使用できません。必要に応じていずれか一方を選択してください。
Slackアプリの利用において必須ではありませんが、Jiraアプリなど他の連携機能を使用する場合は、クラウドトンネルの設定が必要になることがあります。
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
コマンドが正常に実行されると、次の処理が自動的に行われます。
永続的なデバイス認証の設定
「Commander Service Mode – Slack App」という名称の共有フォルダの作成
共有フォルダにアクセス可能なKSMアプリケーションの作成
クライアントデバイスの作成およびBase64エンコードされた設定値の生成
.keeperディレクトリ内のconfig.jsonファイルをアップロードし、Docker設定レコードを作成Slackアプリの認証情報を含むSlack App設定レコードの作成

正常に実行されると、コマンダーサービスモードおよびSlackアプリの両サービスを含む
docker-compose.ymlファイルが生成され、デプロイ可能な状態となります。
セットアップが完了したら、デバイストークンの競合を防ぐため、コマンダーのセッションを終了し、ローカルの .keeper/config.json ファイルを削除します。
5. Docker環境へのデプロイ
このセクションでは、コマンダーサービスを実行するLinux仮想マシンまたはホスト上にDocker Compose環境を構築します。
Linux VMを起動するか、Linuxホストを準備し、SSHで接続します。
Dockerおよびdocker-composeをインストールします(インストール手順はこちらをご参照ください)。
手順4で生成した docker-compose.yml ファイルを、対象のLinuxサーバーへ転送します。
ホストマシン上で、次のコマンドを実行してサービスを起動します。
サービス起動の流れ
サービスは順番に起動します。
まずコマンダーサービスが起動し、APIキーを生成します。生成したAPIキーとサービスURLはボルトのレコードに保存されます。
ヘルスチェックにより、コマンダーサービスが正常に稼働していることを確認します。
ヘルスチェック完了後にSlackアプリが起動し、ボルトのレコードからAPIキーおよびサービスURLを自動取得します。

起動の確認
正常に起動していることを確認するため、ログを監視します。
コンテナの状態確認
コマンダーサービスのログ確認
Slackアプリのログ確認
正常に起動している場合は、次のようなメッセージが表示されます。
マルチチャネル承認者の設定 (任意)
Keeperのチームごとに、ボルトアクセス申請を異なるSlackチャネルで受け取る場合に、マルチチャネル承認者を使用します。手順2で作成したデフォルトの承認用チャネルは、マッピングされていないユーザー向け、およびEPM・クラウドSSOデバイス承認向けのフォールバックとして残ります。本設定は、基本のSlackアプリセットアップ完了後に行います。
マルチチャネル承認者を使用する場合
組織内に複数のKeeperチームがある場合 (例: Engineering、Finance)
各チームが独自のSlackチャネルで申請を承認する場合
(任意) チームチャネルの承認者が付与できる対象を、特定のフォルダ/レコードUIDに限定したい場合
手順1. Keeperチームの作成とユーザーの追加
Keeper管理コンソールで、[Teams] (チーム) に移動します。
承認グループごとにチームを作成します (例:
Developer Team)。ユーザーをそのチームに追加します。

正確なチーム名を控えておきます。後の設定と一致させる必要があります (表記および大文字小文字)。例:
Developer TeamまたはSales and Marketing Team
手順2. Slackでチーム承認用チャネルを作成
Slackで、Keeperチームごとにチャネルを作成します (例:
#keeper-approvals-FinanceTeam)。

Keeperボットを招待します。チャネル内で
/invite @Keeper Securityを実行します。各チャネルIDをコピーします (チャネル名 → [About] (概要) → 下部のChannel ID)。
手順3. フォルダおよびレコードのUIDを収集する (任意、スコープ設定用)
ルーティングのみ (申請をチームチャネルへ送り、承認者はフル検索可能) で十分な場合は、この手順をスキップします。
チームチャネル上で承認者が付与できる対象を制限したい場合:
Keeperボルトで、チームが承認可能な各フォルダまたはレコードを開きます。
各アイテムのUIDをコピーします。
チームごとにUIDを以下のように整理します。
folder_uids: このチームの承認者が付与可能なフォルダrecord_uids: このチームの承認者が付与可能なレコード
手順4. コマンダーで slack-app-setup を実行
コマンダーのシェルから、以下を実行します。
通常どおり、フェーズ1 (Dockerサービスモードの設定) およびフェーズ2 (Slackアプリの設定) を完了します。マルチチャネル承認者を有効にすると、以下の追加プロンプトが表示されます。
Enable multi-channel approvers?
チームベースのルーティングを有効にする (y / n)
Team name or UID
手順1のKeeperチーム (名前は管理コンソールと一致させる必要があります)
Channel ID
そのチームのボルト承認用Slackチャネル
Add another approver team?
チームごとに繰り返し
Specify shared folder or record UIDs per team?
任意の範囲指定 (y の場合は手順3でUIDを収集)
Default approvals channel ID
マッピングされていないユーザー、EPM、デバイス承認向けのフォールバックチャネル
slack-app-setup 実行時のマルチチャネル設定の例:
範囲指定を有効にした場合 (y) の slack-app-setup 実行例:

手順5. 再起動と確認
サービスを起動または再起動します。
Slackアプリのログを確認します。
起動ログに以下のような行が表示されることを確認します。
ルーティングのテスト: マッピングされたチームに属するユーザーとして、
/keeper-request-folderまたは/keeper-request-recordを実行します。カードがそのチームのチャネルに表示されるはずです。フォールバックのテスト: マッピングされたどのチームにも属していないユーザーとして申請します。カードがデフォルトチャネルに表示されるはずです。
申請ユーザー向けコマンドリファレンス
/keeper-request-record
特定のKeeperレコードへのアクセスを申請します。
構文:
/keeper-request-folder
共有フォルダへのアクセスを申請します。
構文:
/keeper-create-secret
共有フォルダ内に、あなたと共有されている共有フォルダに新しいシークレットレコードを作成します。
構文:
/keeper-one-time-share
レコードのワンタイム共有リンクを申請します。
構文:
スクリーンショット
以下のスクリーンショットでは、Keeper Slackアプリの主要機能を紹介しています。
Slackアプリを使用したリクエスト操作

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

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

階層型共有フォルダ/新レコードタイプ [NSF] の検索 - 管理者ビュー


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

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

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

NSFフォルダの権限付き検索 - 管理者ビュー

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

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

クラシックおよび新レコード作成 - 管理者ビュー

セルフサーブレコード作成 (申請ユーザー)




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

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

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

アップデート
コマンダーサービスモードおよびSlackアプリコンテナの更新
コマンダーまたはSlackアプリを最新バージョンへ更新するには、以下の手順でサービスを停止し、コンテナを更新したうえで再起動します。
Keeper Slackアプリのバージョンを更新する
Keeper Slackアプリの新バージョンで新しいスラッシュコマンド (例: /keeper-create-secret) が追加された場合、既存のお客様はSlackアプリのマニフェストを更新し、これらのコマンドを登録する必要があります。この手順を行わないと、新しいコマンドはワークスペースに表示されません。
更新手順:
api.slack.com/apps にアクセスし、Keeper Securityアプリを選択します。
左サイドバーで [App Manifest] (アプリマニフェスト) をクリックします。
上記の1. Slackアプリの作成にある最新のマニフェストJSONをコピーします。
既存のマニフェスト全体を、コピーしたJSONで置き換えます。
[Save Changes] (変更を保存) をクリックし、変更内容のサマリーを確認します。
左サイドバーで [Install App] (アプリをインストール) に移動し、[Reinstall to Workspace] (ワークスペースに再インストール) をクリックして権限を承認します。
再インストール後、新しいスラッシュコマンドがワークスペースのすべてのユーザーに利用可能になります。
マニフェストを更新したあと、[Reinstall to Workspace] (ワークスペースに再インストール) をクリックする必要があります。マニフェストを保存しただけでは不十分です。Slackでは、新しいコマンドや権限の変更を有効にするために再インストールが必要です。
トラブルシューティング
起動エラー
コマンダーサービスモードがマスターパスワードを要求している
ボルトレコードに複数の 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
リクエストの有効期限が切れている可能性がある
リクエストがまだ保留中か確認する。自動的に期限切れになっている場合がある
参考
最終更新

