Web と Direct Line のチャネル セキュリティを構成する

Copilot Studio エージェントを作成すると、エージェント ID を知っている人は誰でも、デモ Web サイトカスタム Web サイトのチャネルを通じてすぐにエージェントにアクセスできるようになります。 これらのチャネルは既定で使用でき、構成の必要はありません。

Microsoft Teams アプリの場合、高度な Web チャネル セキュリティ オプションを構成できます。

注意

Teams 専用ライセンスをお持ちの場合、安全なアクセスを有効にするためのシークレットを生成することはできません。 セキュア アクセス トークンは自動的に作成され、セキュア アクセスはデフォルトで有効になっています。

ユーザーは、エージェント ID を Copilot Studio 内で直接見つけるか、誰かから受け取ります。 ただし、エージェントの能力と感度によっては、そのアクセスが望ましくない場合があります。

Direct Line ベースのセキュリティを使用することで、Direct Line の秘密鍵またはトークンによるセキュア アクセスを有効にすることにより、自身が管理する場所へのアクセスのみを許可することができます。

シークレットの交換および再生成、トークンの更新が可能で、保護されたアクセスを使用したくない場合は、簡単に無効にすることができます。

注意

Copilot Studio は Bot Framework Direct Line チャネル を利用して、ウェブページやアプリをエージェントに接続します。

Web チャネル セキュリティの有効化または無効化

エージェントごとにシークレットとトークンの使用を強制できます。

このオプションをオンにすると、チャネルではクライアントがシークレットを使用するか、シークレットを使用して生成され、実行時に取得されたトークンを使用してリクエストを認証する必要があります。

このセキュリティ対策を提供しないエージェントへのアクセス試行は機能しません。

  1. エージェントの設定ページに移動し、セキュリティを選択後、Web チャネル セキュリティを選択してください。

設定ポップアップで Web チャネル セキュリティが強調表示されたことを示すスクリーンショット。

  1. [セキュリティ保護されたアクセスを必須にする] をオンにします。

警告

[セキュア アクセスを要求する] をオンまたはオフにした場合、システムが設定を反映させて有効にするまでに最大 2 時間かかることがあります。 それまでは、以前の設定が有効になります。 この変更を有効にするためにエージェントを公開する必要はありません。

エージェントを意図せず危険にさらさないよう、事前に計画を立てましょう。

Web チャネルのセキュリティオプションを無効にする必要がある場合は、[セキュア アクセスを要求する] トグルをオフにすることで無効にできます。 セキュリティで保護されたアクセスを無効にするには、反映されるまで最大 2 時間かかることがあります。

保護されたアクセスを無効にするときの確認メッセージを示すスクリーンショットで、このアクションは、デモ Web サイトおよび利用可能なシークレットまたはトークンを使用していない Direct Line チャネルです。このアクションが有効になるまで、最大 2 時間かかることがあります。

シークレットまたはトークンを使用

サービス間アプリを作成している場合、認証ヘッダー リクエストでシークレットを指定するのが最も簡単な方法です。

クライアントが Web ブラウザーまたはモバイル アプリで実行されるアプリを作成している場合、またはコードが顧客に表示される可能性がある場合、シークレットをトークンと交換する必要があります。 トークンを使用しない場合は、秘密が侵害される可能性があります。 使用しているサービスでトークンを取得するリクエストを行う場合は、認証ヘッダーでシークレットを指定します。

トークンは、単一の会話に対してのみ機能し、更新しない限り有効期限が切れます。

状況に最適なセキュリティ モデルを選択してください。

警告

ブラウザーで実行される、ネットワーク呼び出しからハード コーディングされる、または転送されるのいづれかのコードのシークレットを、公開しないでください。

サービス コード内のシークレットを使用してトークンを取得することが、Copilot Studio エージェントを保護する最も安全な方法です。

シークレットを入手

アプリの認証ヘッダー リクエストなどで指定できるように、シークレットが必要になります。

  1. ナビゲーション メニューの 設定セキュリティ を選択します。 次に、Web チャネル セキュリティ タイルを選択します。

  2. シークレット 1 またはシークレット 2 のいづれかでコピーを選び、クリップボードにコピーします。 可視性アイコン を選択し、シークレットを明らかにします。 表示する前に、警告プロンプトが表示されます。

シークレットを交換する

エージェントが使用するシークレットを変更する必要がある場合は、ダウンタイムや中断なしに変更できます。

Copilot Studio は、同時に機能する 2 つのシークレットを提供します。 エージェントが使用するシークレットを、もう一方のシークレットと交換することができます。 シークレットが交換され、すべてのユーザーが新しいシークレットを使用し接続されたら、シークレットを再生成できます。

シークレットの再生成

シークレットを再生成するには、シークレットのとなりにある再生するを選択します。

警告

元のシークレット、またはそのシークレットから取得したトークンを使用して接続しているユーザープロファイルは切断されます。

トークンを生成

単一つのエージェントの会話を開始するときに使用するトークンを生成できます。 詳細については、「モバイル アプリまたはカスタム アプリにエージェントを公開する」の「Direct Line トークンの取得」セクションをご参照ください。

  1. シークレットを取得する

  2. サービス コード内で、シークレットをトークンと交換するための以下のリクエストを送信してください。 <SECRET> を手順 1 で取得したシークレットの値に置き換えます。

    POST https://directline.botframework.com/v3/directline/tokens/generate
    Authorization: Bearer <SECRET>
    

次のスニペットは、生成されたトークン リクエストとその応答の例を示しています。

トークン生成リクエストのサンプル

POST https://directline.botframework.com/v3/directline/tokens/generate
Authorization: Bearer RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0

トークン生成応答のサンプル

HTTP/1.1 200 OK
[other headers]
{
  "conversationId": "abc123",
  "token": "RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xn",
  "expires_in": 1800
}

リクエストが成功した場合、応答には 1 つの会話に有効なトークンと、トークンの有効期限が切れるまでの秒数を示す expires_in 値が含まれます。

トークンを使い続けるには、期限切れになる前に、トークンを更新する 必要があります。

トークンを最新の情報に更新

トークンは有効期限が切れていない限り、何度でも更新できます。

期限切れのトークンは更新できません。

トークンを更新するには、次のリクエストを送信して、<TOKEN TO BE REFRESHED> を更新するトークンに置き換えます。

POST https://directline.botframework.com/v3/directline/tokens/refresh
Authorization: Bearer <TOKEN TO BE REFRESHED>

次のスニペットは、トークン更新リクエストおよび応答の例を示しています。

更新リクエストのサンプル

POST https://directline.botframework.com/v3/directline/tokens/refresh
Authorization: Bearer CurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xn

更新応答のサンプル

リクエストが成功した場合、応答には以前のトークンと同じ会話に有効な新しいトークンと、新しいトークンの有効期限が切れるまでの秒数を示す expires_in 値が含まれます。

新しいトークンを使い続けるには、期限切れになる前に、トークンをもう一度更新します。

HTTP/1.1 200 OK
[other headers]
{
  "conversationId": "abc123",
  "token": "RCurR_XV9ZA.cwA.BKA.y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xniaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0",
  "expires_in": 1800
}

トークンのリフレッシュ方法の詳細については、Direct Line トークンのリフレッシュ セクション(Direct Line API - 認証内)を参照してください。