Amazon Bedrock AgentCore Identity は、プライベートキー JWT クライアント認証をサポートするようになり、エージェントの認証をより安全にします。従来の共有クライアントシークレットの代わりに、プライベートキー JWT は署名付き JSON Web トークン(JWT)クライアントアサーションを使用して、エージェントがダウンストリームの ID プロバイダーのトークンエンドポイントに対して認証できるようにします。公開鍵を ID プロバイダーに登録し、対応する秘密鍵は AWS Key Management Service(AWS KMS)内に安全に保管されます。AgentCore Identity が認証する必要がある場合、AWS KMS を使用してアサーションに署名し、署名済みアサーションを ID プロバイダーに送信します。ID プロバイダーは登録された公開鍵を使用して検証します。
動作の仕組み
顧客サポートエージェントが、ID プロバイダーによって保護された内部注文 API から顧客の注文履歴を読み取る必要がある例を考えます。エージェントは AgentCore Identity の GetResourceOauth2Token を呼び出して注文 API のトークンを要求します。AgentCore Identity は資格情報プロバイダーからクライアント ID、KMS キー ARN、署名アルゴリズムを読み取り、短命の JWT クライアントアサーションを構築し、設定された署名アルゴリズム(RS256、PS256、または ES256)を使用して kms:Sign を呼び出します。AWS KMS がアサーションに署名し、署名を AgentCore Identity に返します。秘密鍵は KMS から出ることはありません。次に、AgentCore Identity は grant_type=client_credentials および client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer を使用して、署名済みアサーションを ID プロバイダーのトークンエンドポイントに送信します。ID プロバイダーは登録された公開鍵で署名を検証し、アクセストークンを AgentCore Identity に返し、それがエージェントに渡されます。最後に、エージェントはアクセストークンを使用して注文 API を呼び出し、注文履歴を取得します。
サポートされているグラントフロー
プライベートキー JWT 認証は、マシン間(M2M)、オンビハーフ(OBO)、ユーザー委任アクセスの 3 つのグラントフローで機能します。M2M フローではエージェントは自身として動作し、人間のユーザーは関与しません。client_credentials グラントを使用します。OBO フローではエージェントは特定のユーザーに代わって行動し、そのユーザーの既存のトークンを使用してダウンストリーム API を呼び出します。AgentCore Identity はクライアントアサーションで自身を認証しながら、ユーザートークンを交換します。ユーザー委任アクセスでは、ユーザーが最初にインタラクティブにログイン/同意(認可コードフロー)を行い、エージェントが何をできるかを承認した後、エージェントはユーザーを表すトークンを取得します。
前提条件
KMS、AgentCore、CloudTrail への管理コンソールアクセス権を持つ AWS アカウントが必要です。また、アプリケーションの公開鍵を登録できる ID プロバイダーのテナントも必要です。ID プロバイダーがプライベートキー JWT に要求する署名アルゴリズムが AWS KMS および AgentCore Identity でサポートされていることを確認してください。
はじめに
まず、非対称 KMS キーを作成します。KMS コンソールで「カスタマー管理キー」を選択し、キーを作成します。キータイプは非対称、キーの使用法は署名と検証、キー仕様は署名アルゴリズムと互換性のあるもの(例:ES256 アルゴリズム用の ECC_NIST_P256)を選択します。キーポリシーを設定し、kms:ViaService 条件を使用して AgentCore Identity 経由でのみキーを使用できるように制限します。次に、公開鍵をエクスポートして ID プロバイダーに登録します。その後、AgentCore コンソールの Identity セクションで OAuth クライアントを追加し、クライアント認証方法としてプライベートキー JWT を選択します。ディスカバリー URL、クライアント ID、KMS キー ARN、署名アルゴリズムを入力します。必要に応じてヘッダーとペイロードのクレームを追加し、クライアントを作成します。最後に、CloudTrail イベント(GetWorkloadAccessToken、GetResourceOauth2Token、および KMS の Sign イベント)を確認して、正しく動作していることを監査します。
CloudTrail ログの例
エージェントが資格情報プロバイダーを使用してトークンを取得すると、操作は AWS CloudTrail に記録されます。GetWorkloadAccessToken(ワークロード ID トークンの取得)や GetResourceOauth2Token(ダウンストリームリソースのアクセストークン要求)などのイベントを確認できます。Sign イベントは AgentCore Identity が kms:Sign を呼び出して JWT クライアントアサーションに署名したことを示し、プライベートキー JWT 認証が機能していることを確認します。これらのログはエージェントのアクセスを監査および監視するのに役立ちます。