Teamsアプリ

Teams、Keeperボルト、エンドポイント特権マネージャーとの承認ワークフロー連携

概要

Keeper Teamsアプリは、常時付与された特権を抑え、Teams上で認証情報のワークフロー申請と承認をスムーズに行うのに役立ちます。Teamsエージェントおよびコマンダーサービスモードのコンテナはお客様側のインフラ上でホストされ、エンドツーエンド暗号化によりゼロ知識が維持されます。

本書では、Keeperシークレットマネージャーを用いる簡易セットアップによりKeeper Teamsアプリを導入する手順を説明します。シークレットマネージャーまたはKeeperPAMのライセンスがない場合は、Keeperのアカウントマネージャーにご連絡ください。

機能

機能
説明

レコードアクセスの申請

理由、カスタム権限、アクセス時間の上限を指定して、特定のKeeperレコードへのアクセスを申請します。標準のボルトレコードおよびKeeperPAMのリソースを含みます。

フォルダアクセスの申請

理由、カスタム権限、アクセス時間の上限を指定して、特定のKeeper共有フォルダへのアクセスを申請します。

ワンタイム共有の申請

ワンタイム共有、パスワードのリセット、その他の動的パスワード生成を、自己破棄型の共有リンクで申請します。編集可能なワンタイム共有にも対応し、双方向の共有が可能です。

エンドポイント特権マネージャーの承認

Keeperエンドポイント特権マネージャー (KEPM) のジャストインタイム昇格の承認を、専用Teamsチャネルでリアルタイムに行います。

SSOクラウドデバイスの承認

Keeperオートメーターがデプロイされていない場合、Teamsから直接SSOクラウドデバイスの承認を行います。


要件

システム要件

ゼロ知識とエンドツーエンド暗号化を維持するため、Keeper Teamsアプリおよびコマンダーサービスモードのコンテナは、Microsoft Teamsクラウドと連携するために、お客様ごとのインフラ上でホストします。初期構成ではローカルでKeeperコマンダーを用います。

要件
詳細

Linux VM

クラウドまたはオンプレのVMで、TeamsおよびKeeperの各サービスへhttps/443の外向き接続が可能です。

Docker

サービスのセットアップにはDockerの利用を推奨します。

Keeperコマンダー

最新のKeeperコマンダーをインストールする必要があります。

Keeperシークレットマネージャー

シークレット構成データの取得に、KeeperシークレットマネージャーまたはKeeperPAMのライセンスのいずれかを使用します。

Microsoft Azureテナント

Azure ADでアプリを登録するための管理者アクセスが必要です。

Microsoft Teams

カスタムアプリをインストールできる権限を持つTeamsワークスペース。

circle-exclamation

セットアップ手順

以下の手順では、コマンダーおよびTeamsアプリ用のDockerイメージ (keeper/commanderarrow-up-right および keeper/teams-apparrow-up-right) を使用します。本連携では、各サービスが用いる構成を保護するためにKeeperシークレットマネージャーも利用します。

Teamsアプリを構成するには、次の8つの手順に従います。


手順1. Azure ADアプリの登録

このセクションでは、Teamsボットを認証するために、Microsoft 365テナントにAzure ADアプリを作成します。

  • Azure Portalarrow-up-right に、全体管理者またはアプリケーション管理者としてサインインします。

  • [Azure Active Directory][アプリの登録] に移動します。

  • [新規登録][すべてのアプリケーション] をクリックします。

  • アプリを構成します。 - [名前]: keeper-security-teams - [サポートされているアカウントの種類]: 「この組織ディレクトリのみに含まれるアカウント」のみ - [リダイレクト URI]: 現時点では空のままにします。

  • [登録] をクリックします。

  • 作成後、[概要] ページから次の値を控えます。

    • [アプリケーション (クライアント) ID]AZURE_CLIENT_ID として保存します。

    • [ディレクトリ (テナント) ID]AZURE_TENANT_ID として保存します。

  • [APIのアクセス許可] を構成します。

    • 管理 → [APIのアクセス許可][アクセス許可の追加] に移動します。

  • [Microsoft Graph][アプリケーションのアクセス許可] を選択します。

  • 次のアクセス許可を追加します。

    • ChannelMessage.Read.All

    • User.Read.All

  • [MSFTに管理者の同意を与える] をクリックします。

  • [クライアント シークレット] を作成します。

  • [証明書とシークレット][クライアント シークレット] に移動します。

  • [新しいクライアント シークレット] をクリックします。

  • 説明: Keeper Teams App

  • 有効期限: 適切な期間を選択します (24か月を推奨)。

  • [追加] をクリックします。

  • [値はすぐにコピーし、] AZURE_CLIENT_SECRET として保存します。

アプリ作成後、次の資格情報を収集します。

資格情報
場所

CLIENT_ID

アプリの登録 → 概要 → アプリケーション (クライアント) ID

TENANT_ID

アプリの登録 → 概要 → ディレクトリ (テナント) ID

署名シークレット

アプリの登録 → 証明書とシークレット → クライアント シークレット (値)

circle-info

生成されたクライアントID、テナントID、および 署名シークレットの値手順4 用に保存しておきます。


手順2. Azureボットの登録の作成

  • Azure PortalでBot Servicesを検索し、[リソースの作成] をクリックします。

  • Bot Servicesを検索し、[作成] をクリックします。

  • ボットを構成します。

    • [ボット ハンドル]: keeper-security-bot (一意である必要があります)

    • [サブスクリプション]: 使用するサブスクリプションを選択します。

    • [リソース グループ]: 新規作成するか既存を使用します。

    • [価格レベル]: テストはFree (F0)、本番はStandard (S1)。

    • [アプリの種類]: シングルテナント。

    • [作成の種類]: 既存のアプリ登録を使用します。

    • [アプリID]: 手順1のアプリケーション (クライアント) IDとテナントIDを入力します。

  • [確認および作成][作成] をクリックします。

  • [MicrosoftアプリID] (手順1のアプリケーションIDと同じ) を控え、BOT_ID として保存します。


手順3. 承認用チャネルの作成

  • Microsoft Teamsで新しいプライベート チャネルを作成します (例: #keeper-vault-approvers)。

    • チームを右クリック → [チャネルの追加]

    • [チャネル名]: keeper-vault-approvers

    • [プライバシー]: プライベート — 特定のチーム メンバーのみがアクセス可能

    • [作成] をクリックします。

  • チームIDチャネルID を取得します。

    • ウェブブラウザでTeamsを開きます。

    • 承認用チャネルに移動します。

    • チャネル名をクリックすると、次のようなポップアップが開きます。

  • リンクをコピーし、新しいタブで開く。

  • URLは次のような形式になる。https://teams.microsoft.com/l/channel/19%[email protected]/...?groupId=<TEAM_ID>&tenantId=...

  • groupIdチームID として取り出す。

  • チャネルID: /channel/ とチャネル名のあいだの値をURLデコードします。 %3A: に、%40@ に置き換える。 例 (デコード前): 19%3AXSD5456476qe-a915_bN8WU7qScl7687678nj1Ya0e0RM1%40thread.tacv2 例 (デコード後): 19:[email protected]

circle-info

チャネルIDとチームID手順5 用に保存しておきます。

手順4. コマンダーサービスモードのセットアップ

サービスがKeeperテナント内で認証しコマンドを実行できるようにするには、承認済みの Keeperコマンダー構成ファイル を作成する必要があります。この構成はホストPCまたはワークステーションで生成できます。

  • マシンにローカルで Keeperコマンダーをインストール します。

  • 必要に応じて本連携専用のKeeperサービス アカウントを新規作成し、関連レコードとフォルダへのアクセス、およびレコードとフォルダの共有ができるようにします。

  • Keeperサービスアカウントでコマンダーにログインします。([email protected])

  • 2FAを含む認証を完了します。認証が完了したら 手順5 に進みます。


手順5. Teamsアプリのセットアップコマンドの実行

teams-app-setup コマンドは docker-compose.yml を生成し、Teamsアプリおよびコマンダーサービスモードの各サービスを運用するために使用します。

コマンダーシェルで次を入力します。

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

teams-app-setup コマンドは、カスタマイズ用に次の任意フラグに対応します。

パラメータ
説明
既定値

--folder-name (optional)

共有フォルダの名前

Commander Service Mode - Teams App

--app-name (optional)

シークレットマネージャー アプリの名前

Commander Service Mode - KSM App

--config-record-name (optional)

コマンダー構成レコードの名前

Commander Service Mode Docker Config

--teams-record-name (optional)

Teams構成レコードの名前

Commander Service Mode Teams App Config

--config-path (optional)

config.jsonファイルのパス

~/.keeper/config.json

--timeout (optional)

デバイスのタイムアウト設定

30d

--skip-device-setup (optional)

既に構成済みの場合はデバイス登録をスキップする

false

カスタム名の例:

コマンドは次のプロンプトに沿って進む。

フェーズ1: Dockerサービスモードのセットアップ

KSMを自動構成し、Docker経由でサービスモードをセットアップするために必要な構成ファイルをアップロードします。

サービス構成

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

プロンプト
説明

Port

コマンダーサービスモードのポート番号 (1024–65535)。

8900

フェーズ2: Teamsアプリ連携のセットアップ

手順1および2 で取得したTeamsの資格情報を入力します。

プロンプト
説明

Teams Client ID (required)

Azureアプリ登録のアプリケーション (クライアント) ID

2efdee8-6a0a-0...

Client Secret (required)

Azureアプリ登録のシークレット値

f16241e1-b52a-24...

Tenant ID (required)

Azure ADのディレクトリ (テナント) ID

a1b2c3d4e5f6...

Teams Approvals Channel ID (required)

手順3のチャネルID (必須)

Approvals Team ID (required)

手順3のチームID (必須)

9336604b-038e-4...

Teams bot port

Teamsボットが受信リクエストを待ち受けるポート

例: 3978

Enable PEDM? (optional)

エンドポイント特権マネージャーの承認を有効にする (y/n)。

y

PEDM Polling Interval (optional)

PEDMリクエストを確認する間隔 (秒)。既定: 120。

120

Enable Device Approvals?(optional)

SSOクラウドデバイス承認を有効にする (y/n)。

y

Device Approval Polling Interval (optional)

デバイス承認を確認する間隔 (秒)。既定: 120。

120

circle-info

エンドポイント特権マネージャーの承認およびSSOクラウドの承認を処理するには、Teamsアプリのサービス ユーザーに、管理者権限として [エンドポイント特権の管理] および [Keeper管理コンソールの管理] が付与されている必要があります。

コマンドが正常に完了すると、次が自動的に実行されます。

  • デバイスの永続認証を構成します。

  • 「Commander Service Mode – Teams App」 という名前の共有フォルダを作成します。

  • 共有フォルダにアクセスできるKSMアプリケーションを作成します。

  • クライアントデバイスを作成し、Base64エンコードされた構成値を生成します。

  • Docker構成レコードを作成し、.keeper ディレクトリの config.json をアップロードします。

  • Teamsアプリの資格情報を含むTeamsアプリ構成レコードを作成します。

  • 正常終了すると、コマンダーサービスモードとTeamsアプリの両サービスを含む docker-compose.yml が生成され、デプロイ可能な状態になります。

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


手順6. Docker環境へのデプロイ

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

  • Linux VMを起動するかLinuxホストを用意し、SSHで接続します。

  • docker および docker-compose をインストールします (手順は こちら をご参照ください)。

  • 生成した docker-compose.yml を手順5の成果物として対象のLinuxサーバーに転送します。

ホスト上でサービスを起動します。

サービス起動の順序

サービスは次の順で起動します。

  1. コマンダーサービスが先に起動し、APIキーを生成してサービスURLとともにボルトのレコードに保存します。

  2. ヘルスチェックでコマンダーサービスが稼働していることを検証します。

  3. ヘルスチェック通過後にTeamsアプリが起動し、ボルトのレコードからAPIキーとサービスURLを自動取得します。

起動の確認

ログを監視し、すべてが起動したことを確認します。

  • コンテナの状態を確認します。

  • コマンダーサービスのログを表示します。

circle-info

セキュリティのため、DockerログではAPIキーはマスクされます。両サービスは共有のボルトレコード経由で安全に通信します。

  • Teamsアプリのログを表示します。

成功していれば、次のようなメッセージが表示されます。


手順7. メッセージングエンドポイントの構成

ボットをデプロイして稼働させたら、Microsoft Teamsがボットと通信できるようメッセージングエンドポイントを構成します。

  1. Linux VMにngrokをインストールし、認証します。

circle-info

認証トークンはngrokダッシュボードarrow-up-rightから取得します。ダッシュボードの [Domains] で静的ドメインを予約します。

  1. ngrokを起動します。

  1. Azureでメッセージングエンドポイントを設定します。

    1. Azure Portalarrow-up-rightに移動し、[Azureボット] リソースを開きます。

    2. [設定][構成] に移動します。

    3. [メッセージング エンドポイント]https://<YOUR_STATIC_DOMAIN>/api/messages を設定します。

    4. [適用] をクリックします。

  2. 動作確認

手順8. Teamsアプリパッケージのアップロード

このセクションでは、Dockerサービスが稼働したら、TeamsアプリパッケージをMicrosoft Teams環境にアップロードします。

  • リリースページarrow-up-right からアプリパッケージのテンプレートをダウンロードします。

  • ZIPを展開すると、次が含まれます。

  • manifest.json を編集し、プレースホルダーを置き換える。

    • ${{TEAMS_APP_ID}}AzureクライアントID (手順1) に置き換える。

    例:

  • ${{BOT_ID}}ボットID (AzureクライアントIDと同じ) に置き換える。

例:

  • ファイルをZIPに再パッケージします。

  • Teams管理センターにアップロードします。

    • [Teamsアプリ][アプリの管理] に移動します。

    • [アプリをアップロードする] をクリックし、組織のアプリカタログへのアプリのアップロードを選択します。

    • keeper-teams-app.zip を選択します。

    • [アップロード] をクリックします。

triangle-exclamation
  • ZIPをアップロードしたら、チームにアプリをインストールします。

    • Microsoft Teamsでチームに移動します。

    • チーム名の横の [...][チームの管理] をクリックします。

    • [アプリ] タブを開きます。

    • [その他のアプリ] (右下) をクリックします。

    • Keeper Security を検索し、[承認者のチームまたはチャネル] で開く。

    チーム単位でアプリをインストールしたら、承認用チャネルでボットを初期化し、そこへ承認リクエストをルーティングできるようにします。

    • 自動的にチャネルへリダイレクトされるか、keeper-vault-approvers プライベートチャネルに移動します。

    • 次のコマンドでボット名にメンションします。@keeper Security /channel-status

以上で、エンドユーザーはリクエストの起票を開始できます。


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

circle-exclamation

keeper-request-record

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

構文:

keeper-request-folder

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

構文:

keeper-one-time-share

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

構文:


スクリーンショット

以下のスクリーンショットは、Keeper Teamsアプリの主な機能を示す。

申請のためのTeamsアプリ ボットとのやり取り (申請ユーザー視点)


レコードへのアクセス申請 (UIDなし)


レコードへのアクセス申請 (UID指定あり) (管理者視点)


レコードアクセス申請 (管理者視点)


フォルダへのアクセス申請 — 承認後 (管理者視点)


フォルダアクセス申請 (UIDあり) (管理者視点)


ワンタイム共有申請 (管理者視点)


ワンタイム共有 — 新規レコード作成 (管理者視点)


ワンタイム共有 — 承認後 (申請ユーザー視点)


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


SSOクラウドデバイス承認 (管理者視点)


アップデート

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

コマンダーまたはTeamsアプリを最新版に更新するには、サービスを停止し、コンテナを更新してから新しいコンテナを起動します。


トラブルシューティング

起動時のエラー

エラー
原因
対処

コマンダーサービスモードがマスター パスワードを求める

ボルトのレコードに複数のconfig.jsonが添付されている

手順4〜5に従い、新しいフォルダ名で teams-app-setup を再実行し、新しいJSON構成ファイルを作成します。

[WARN] Warning: Cannot reach Keeper Service Mode

サービスモードが未起動、またはURLが誤っている

ボルトのレコードの service URL が想定どおりか確認します。

BotFrameworkAdapter initialization failed

ボットの資格情報が無効

MICROSOFT_APP_IDMICROSOFT_APP_PASSWORD を確認します。

Azure AD authentication error

テナントまたはクライアントの資格情報が無効

AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_CLIENT_SECRET を確認します。


Teams APIのエラー

エラー
原因
対処

Conversation not found

チームまたはチャネルIDが無効

TEAMS_TEAM_IDTEAMS_CHANNEL_ID を確認します。

Authorization denied (401)

ボットの構成不備またはトークン期限切れ

クライアント シークレットを再生成し、構成を更新します。

Forbidden (403)

APIのアクセス許可不足

Graph APIのアクセス許可に管理者同意が付与されているか確認します。

Channel not found

ボットがチャネルに未追加

承認用チャネルにボットを追加します。

Activity not found

メッセージが削除された、またはアクティビティ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メソッドが誤り

サービスモードがキュー有効で稼働しているか確認します。

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][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

ポーリング結果が返らない

サービスモードのログを確認します。searchコマンドが登録されているか確認します。


ワンタイム共有のエラー

エラー
原因
対処

one-time share links can not be created for PAM records

コマンダーが未対応

PAM以外のレコードで申請します。

Share link created but URL not found in response

サービスモードの応答形式が想定外

サービスモードのバージョンを確認します。one-time-shareコマンドが登録されているか確認します。

Failed to create one-time share

レコードが共有可能でない可能性

ユーザーにレコードの共有権限があるか確認します。


レコード作成のエラー

エラー
原因
対処

Failed to create record

必須フィールド不足またはコマンド エラー

タイトル、ログイン、パスワードが入力されているか確認します。

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

リクエストの期限切れの可能性

リクエストが未処理か確認します。自動期限切れしている場合がある。

参考

最終更新

役に立ちましたか?