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

概要
Keeper Google Chatアプリは、Google Workspace環境内でのジャストインタイムアクセス管理と、安全な認証情報の共有を実現します。Google Chatと直接連携することで、チームはコラボレーションプラットフォームを離れずに、Keeperボルトへのアクセスを申請、承認、管理できます。
このセルフホスト型ソリューションは、コマンダーサービスモードとともにお客様のインフラストラクチャ上で完全に稼働し、Keeperのゼロ知識セキュリティモデルを維持します。Google Chatとお客様のKeeperボルト間のすべての通信は、エンドツーエンド暗号化された状態が保たれます。
本ドキュメントでは、リアルタイムのメッセージ配信にCloud Pub/Subを使用したGoogle Chatアプリのデプロイ方法を取り扱います。KeeperシークレットマネージャーまたはKeeperPAMのライセンスが必要です。これらの機能の有効化が必要な場合は、担当のアカウントマネージャーまでお問い合わせください。
機能
レコードアクセス申請
ユーザーは、KeeperPAMリソースを含む個々のボルトレコードに対して、期限付きまたは永続的なアクセスを申請できます。承認者は申請の詳細をすべて確認し、カスタムの権限レベルを付与できます。PAMユーザーレコードでは、一時アクセスの期限切れ時に認証情報を自動ローテーションする設定も任意で可能です。
フォルダアクセス申請
クラシック共有フォルダまたは階層型共有フォルダ (NSF) へのアクセスを、細かい権限制御付きでユーザーに付与できます。期限付きアクセスに対応し、PAMユーザーフォルダでは期限切れ時のパスワードローテーションも任意で設定できます。
外部共有 / ワンタイム共有申請
パスワード、認証情報、機密データ向けに、安全な自己消滅型の共有リンクを生成できます。リンクは表示専用にすることも、双方向共有向けに編集可能にすることもできます。
セルフサーブレコード作成
エンジニアは、すでにアクセス権を持つ共有フォルダに直接新しい認証情報を追加できます。/keeper-create-secret コマンドは、フォルダ選択からレコード作成までをフォーム形式で案内し、作成後は管理者に自動で通知されます。
エンドポイント特権マネージャー承認
KEPMの昇格リクエストをリアルタイムで処理します。ユーザーがエンドポイント上で一時的な管理者権限を必要とする場合、承認カードが指定のGoogle Chatスペースに即時表示されます。
SSOクラウドデバイス承認
Keeperオートメーターを導入していない場合でも、Google Chat経由で新しいSSOクラウドデバイスを承認できます。管理者はデバイス承認リクエストを受け取り、ワンクリックで承認または拒否できます。
要件
インフラストラクチャ要件
Keeper Google Chatアプリは、連携コンポーネントに対する完全な管理をお客様の組織が維持できるセルフホスト型アーキテクチャを採用しています。この設計により、機密性の高い認証情報データが外部サービスを経由することはありません。
Linux VM
Google ChatおよびKeeperサービスへのアウトバウンドHTTPS接続が可能な、クラウドまたはオンプレミス上の任意のVM。
Docker
サービスのセットアップにはDockerの使用を推奨。
Keeperコマンダー
サービスモードが実行中で、アクセス可能であること。
Keeperシークレットマネージャー
シークレット設定データの取得に、KeeperシークレットマネージャーまたはKeeperPAMライセンスが必要。
Google Workspaceアカウント
Chatアプリの登録およびAPI有効化のための管理者アクセス権が必要。
Google Cloudプロジェクト
Pub/Subインフラストラクチャおよびサービス認証情報を格納。
重要: gchat-app-setup コマンドを実行するには、Keeperシークレットマネージャー (KSM) を有効化しておく必要があります。KSMをご利用いただけない場合は、担当のアカウントマネージャーまでお問い合わせください。
セットアップ手順
Google Chatアプリの設定では、Google Cloudリソースのセットアップ、Chatアプリケーションの登録、コンテナ化されたサービスのデプロイを行います。
Google Chatアプリの設定は、次の手順で行います。
1. Google Cloudプロジェクトのセットアップ
Google Cloud Console にアクセスします。
Keeper専用のプロジェクトを作成します (名前の例: Keeper Security Google chat App)。


必要なAPIを有効化します。
[APIs & Services] (APIとサービス) → [Library] (ライブラリ) を開きます。
Google Chat APIを検索して有効化します。

Cloud Pub/Sub APIを検索して有効化します。

2. サービスアカウントとキーの作成
このアカウントにより、アプリはPub/SubからイベントをPullし、Chatにメッセージを投稿できます。
[IAM & Admin] (IAMと管理) → [Service Accounts] (サービスアカウント) に移動します。
[Create Service Account] (サービスアカウントを作成) を選択します。

わかりやすい名前を入力します (例:
keeper-chat-worker) → 作成します。アカウントを開きます → [Keys] (キー) → [Add key] (キーを追加) → [Create new key] (新しいキーを作成) → [JSON]。
ダウンロードしたファイルの名前を
service-account.jsonに変更して保存します。
3. Pub/Subメッセージングの設定
Cloud Pub/Subは、Google Chatとお客様のセルフホスト型アプリケーションとの間のメッセージブローカーとして機能します。このPullベースの方式により、パブリックエンドポイントやインバウンドファイアウォールルールを設ける必要がありません。
a. トピックの作成
Cloud Consoleで [Pub/Sub] → [Topics] (トピック) を開きます。
トピックIDを入力します (
keeper-chat-events)。「Add a default subscription」(デフォルトのサブスクリプションを追加) のチェックを外します (カスタムのサブスクリプションを別途作成するため)。

その他の項目は既定値のままにして [Create] (作成) をクリックし、確認画面で作成を確定します。
b. サブスクリプションの作成
[Pub/Sub] → [Subscriptions] (サブスクリプション) に移動します (直接リンク)。
[Create Subscription] (サブスクリプションを作成) を選択します。

サブスクリプションIDを入力します (
keeper-chat-events-sub)。手順3(a) で作成したトピックを選択します。
配信設定を行います。
配信タイプ: Pull
確認応答の期限:
60秒
その他の項目は既定値のままにして [Create] (作成) をクリックします。
4. IAM権限の付与
2つの権限付与が別々に必要です。いずれかが不足すると、「Keeper Securityが応答していません」というエラーが発生するか、イベントが届かなくなります。
a. Google Chatがトピックに発行できるようにする
[Pub/Sub] → [Topics] (トピック) →
keeper-chat-events→ [Permissions] (権限) → [Add Principle] (プリンシパルを追加)。
以下を Pub/Sub Publisher として追加します。
chat-api-push@system.gserviceaccount.com
Pub/Sub Publisher

b. ワーカーがサブスクリプションを読み取れるようにする
[Pub/Sub] → [Subscriptions] (サブスクリプション) → keeper-chat-events-sub → [Permissions] (権限) → [Add Principle] (プリンシパルを追加)。
keeper-chat-worker@<YOUR_PROJECT_ID>.iam.gserviceaccount.com
Pub/Sub Subscriber

5. Chatアプリケーションの登録
重要: 「Deploy as a Google Workspace Add-on」(Google Workspaceアドオンとしてデプロイ) はチェックしないでください。有効にすると構成がロックされ、以後の変更ができなくなります。
Google Cloud Console に戻ります。
[APIs & Services] (APIとサービス) → [Enabled APIs & services] (有効なAPIとサービス) を開きます。
Google Chat APIをクリックします。

[Configuration] (構成) タブを選択します。
アプリケーションプロフィールを入力します。
App name
Keeper Security
Description
Keeper vault credentials access in chat
Interactive features
有効
Join spaces and group conversations
有効
Connection settings
Cloud Pub/Sub
Pub/Sub topic name
projects/YOUR_PROJECT_ID/topics/keeper-chat-events

スラッシュコマンドを登録します。
/keeper-request-record
1
Keeperボルトレコードへのアクセスを申請
/keeper-request-folder
2
Keeper共有フォルダへのアクセスを申請
/keeper-external-share
3
外部共有用にKeeperボルトレコードへのアクセスを申請
/keeper-create-secret
4
Keeperの共有フォルダに新しいレコードを作成

[Visibility] (公開範囲) セクションで表示設定を行います。
[Development/Testing Users] (開発 / テストユーザー) に自分のメールアドレスを追加します。
設定を保存します。
6. 承認用スペースの準備
アクセス申請および管理者への通知は、承認者が確認して対応できる、指定のGoogle Chatスペースに投稿されます。
Google Chat を開きます。
[Spaces] (スペース) で [Create space] (スペースを作成) を選択します。
スペースを設定します。
名前:
Keeper-vault-Approvers(任意の名前に変更可)アクセス申請への対応を行うチームメンバーを追加します。

このスペースにKeeperアプリをインストールします。
スペース名をクリック → [View details] (詳細を表示)
[Apps & integrations] (アプリと連携) → [Add apps] (アプリを追加) を選択
「Keeper Security」を検索して追加します。

スペースIDを取得します。
URLは次の形式で表示されます:
https://chat.google.com/chat/XXXXXXXXXスペースIDは次のとおりです:
spaces/XXXXXXXXX
7. コマンダーサービスモードの設定
Keeperテナント内でサービスが認証およびコマンド実行を行えるようにするには、Keeperコマンダーの構成ファイルを作成し、あらかじめ認可しておく必要があります。この構成は、ホストコンピューターまたはワークステーション上で生成できます。
ローカル環境にKeeperコマンダーをインストールします。
必要に応じて、本連携専用のKeeperサービスアカウントを新規作成します。対象となるレコードおよびフォルダへのアクセス権と、レコードおよびフォルダの共有を実行できる権限を付与してください。
Keeperサービスアカウント (
serviceuser@company.com) でコマンダーにログインします。
2要素認証を含む認証プロセスを完了します。完全に認証が完了したら、手順4へ進みます。
8. Google Chatアプリ設定コマンドの実行
gchat-app-setup コマンドを実行すると、Google Chatアプリおよびコマンダーサービスモードを運用するための docker-compose.yml ファイルが生成されます。
コマンダーのシェルから、次のコマンドを入力します。
コマンドラインオプション
--folder-name (任意)
共有フォルダの名称
Commander Service Mode - Google Chat App
--app-name (任意)
シークレットマネージャーアプリの名称
Commander Service Mode - KSM App
--config-record-name (任意)
コマンダー設定レコードの名称
Commander Service Mode Docker Config
--gchat-record-name (任意)
Google Chat設定レコードの名称
Commander Service Mode Google Chat App Config
--config-path (任意)
config.jsonファイルのパス
~/.keeper/config.json
--timeout (任意)
デバイスタイムアウトの設定
30d
--skip-device-setup (任意)
既に構成済みの場合、デバイス登録をスキップ
false
カスタム名称を指定した例:
1. Dockerサービスモードの設定
このコマンドは、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カスタムドメイン (例: gchat.company.com)。
NgrokとCloudflareは同時に使用できません。Google Chatアプリの利用において必須ではありませんが、Jiraアプリなど他の連携機能を使用する場合は、トンネルの設定が必要になることがあります。Cloudflareドメインの例: gchat.company.com
2. Google Chatアプリ連携の設定
前段のGCPおよびGoogle Chatのセットアップ手順で取得した値を入力します。
サービスアカウントJSONファイルのパス (必須)
Pub/SubのPullおよびGoogle Chat APIに使用するGCPサービスアカウントJSONキーのパス。JSONのインライン貼り付けは受け付けられません。
/path/to/service-account.json
プロジェクトID (必須)
GCPプロジェクトID。Enterキーを押すと、サービスアカウントJSON内の project_id が使用されます。サービスアカウントのプロジェクトと異なる場合は、続行前に確認してください。
your-gcp-project-id
トピックID (必須)
Google Chatのイベントを受け取るPub/Subトピック。
keeper-chat-events
サブスクリプションID (必須)
イベントのPullに使用するPub/Subサブスクリプション。
keeper-chat-events-sub
スペースID (必須)
承認カードを投稿するGoogle Chatスペース。spaces/ で始まり、スペースIDを含む必要があります。
spaces/<YOUR_ID>
/keeper-request-recordコマンドID
コンソールで登録したスラッシュコマンドIDと一致させる必要があります。
1
/keeper-request-folderコマンドID
コンソールで登録したスラッシュコマンドIDと一致させる必要があります。
2
/keeper-external-shareコマンドID
コンソールで登録したスラッシュコマンドIDと一致させる必要があります。
3
/keeper-create-secretコマンドID
コンソールで登録したスラッシュコマンドIDと一致させる必要があります。
4
Enable PEDM? (任意)
エンドポイント特権マネージャー承認を有効化するかどうか (y/n)。
y
PEDM Polling Interval (任意)
秒数。既定値は120。
120
Enable Device Approvals? (任意)
SSOクラウドデバイス承認を有効化するかどうか (y/n)。
y
Device Approval Polling Interval (任意)
秒数。既定値は120。
120
セットアップが完了すると、コマンドはGoogle Chat設定レコードを作成します。このレコードには以下のフィールドが含まれます。
google_service_account_json(シークレット)、google_project_id、google_topic_id、google_subscription_idchat_approvals_space_id、chat_command_request_record_id、chat_command_request_folder_id、chat_command_external_share_id、chat_command_create_secret_id任意項目の
pedm_*およびdevice_approval_*の各フィールド
このコマンドは、コマンダーサービスモードとGoogle Chatアプリ用の docker-compose.yml を生成します。
セットアップが完了したら、コマンダーのセッションを終了します。デバイストークンの競合を防ぐため、ローカルの .keeper/config.json ファイルを削除します。
9. Docker環境へのデプロイ
コマンダーサービスモードを実行するLinux VMまたはホスト上に、Docker Composeをセットアップします。
Linux VMを起動するか、Linuxホストを準備し、SSHで接続します。
dockerおよびdocker-composeをインストールします。LinuxへのDockerインストール をご参照ください。手順7で生成した
docker-compose.ymlファイルを、対象のホストへ転送します。
サービスを起動します。
サービス起動の流れ
コマンダーサービスが起動し、APIキーとURLをボルトレコードに保存します。
ヘルスチェックにより、コマンダーサービスの状態を検証します。
ヘルスチェック完了後にGoogle Chatアプリが起動します。
起動の確認
コンテナの状態を確認します。
コマンダーサービスのログを確認します。
Google Chatアプリのログを確認します。
アプリが想定どおりに動作していることを確認したら、以下のリンクの手順に従ってアプリを組織内向けに公開します。公開後、組織内のユーザーはKeeper Google Chatアプリをインストールし、アクセス申請を行えるようになります。
申請ユーザー向けコマンドリファレンス
/keeper-request-record
特定のKeeperレコードへのアクセスを申請します。
構文:
/keeper-request-folder
共有フォルダへのアクセスを申請します。
構文:
/keeper-create-secret
自分と共有されている共有フォルダ内に、新しいシークレットレコードを作成します。
構文:
/keeper-external-share
外部ユーザーまたはベンダー向けに、レコードのワンタイム共有リンクを申請します。
構文:
スクリーンショット
以下のスクリーンショットでは、Keeper Google Chatアプリの主要機能を紹介しています。
Google Chatアプリを使用したリクエスト操作

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

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

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

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

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

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

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

ベンダー向け外部 / ワンタイム共有申請

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

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



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

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

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

アップデート
コマンダーサービスモードおよびGoogle Chatアプリコンテナの更新
コマンダーまたはGoogle Chatアプリを更新するには、サービスを停止し、コンテナを更新したうえで再起動します。
トラブルシューティング
起動エラー
コマンダーサービスモードがマスターパスワードを要求している
ボルトレコードに複数のconfig.jsonファイルが添付されている
gchat-app-setup を新しいフォルダ名で実行し、新しいJSON構成ファイルを作成する
[WARN] Warning: Cannot reach Keeper Service Mode
サービスモードが稼働していない、またはURLが誤っている
ボルトレコード内のサービスURLを確認する
サービスモードのエラー
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メソッドを使用している
サービスモードがキュー (queue) を有効にして実行されていることを確認する
Command timed out or failed
サービスモードが過負荷、またはコマンドが登録されていない
サービスモードにコマンドを登録する。タイムアウトを延長する
No request_id received from API
サービスモードがキュー / 非同期モードを使用していない
サービスモードをキュー有効 (V2) で再起動する
アクセス付与エラー
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
リクエストの有効期限が切れている可能性がある
リクエストがまだ保留中か確認する。自動的に期限切れになっている場合がある
参考
最終更新

