View a markdown version of this page

AgentCore Identity とのトークン交換On-behalf-of - Amazon Bedrock AgentCore

AgentCore Identity とのトークン交換On-behalf-of

Amazon Bedrock AgentCore Identity は On-Behalf-Of (OBO) トークン交換をサポートし、エージェントや MCP サーバーなどのその他のワークロードが、インバウンドユーザーアクセストークンをダウンストリームリソースサーバーをターゲットとする新しいスコープ付きアクセストークンと交換できるようにします。交換は、ある対象者に対して発行されたトークンを別のダウンストリーム対象者のトークンに直接変換するため、エージェントは追加の同意フローをトリガーすることなく、認証されたユーザーに代わって保護されたリソースにアクセスできます。交換されたトークンは、エージェント自身の ID と元の発信者の ID の両方を保持し、すべてのホップできめ細かなゼロトラスト認可を適用するために必要なシグナルをリソースサーバーに提供します。

トークン交換on-behalf-ofの仕組み

トークン交換On-behalf-ofは、既存の OAuth 認証情報プロバイダーに組み込まれています。エージェントがダウンストリームトークンをリクエストすると、AgentCore Identity はアップストリーム発信者を表すインバウンドアクセストークンと、認証情報プロバイダーに既に保存されているクライアント認証情報を自動的に受け取り、トークン交換リクエストを顧客の IdP または OAuth 認可サーバーとブローカーします。リクエストを送信し、レスポンスを解析してエージェントに返します。エージェント開発者は、インバウンドトークンを処理したり、クライアントシークレットを直接管理したりする必要はありません。認可サーバーは、リクエストされたスコープを許可するかどうか、委任を許可するかどうかなど、最終的な認可決定を行います。

AgentCore Identity は、2 つの確立された標準のいずれかを使用してトークン交換on-behalf-ofを実装する ID プロバイダーをサポートしています。RFC 8693 (OAuth 2.0 Token Exchange) では、認証情報プロバイダーは標準のトークン交換許可タイプに従い、インバウンドトークンをエージェントのクライアント認証情報とともに subject_token として送信します。代わりに、一部の ID プロバイダーは RFC 7523 §2.1 (OAuth 2.0 認可許可の JWT プロファイル) を通じてon-behalf-ofを実装します。この場合、インバウンドトークンは、ダウンストリームアクセストークンを取得するための JWT 認可許可として提示されます。OAuth 認証情報プロバイダーを設定するときに ID プロバイダーが期待するモードを設定します。AgentCore Identity はそこからプロトコルの違いを処理します。

トークン交換on-behalf-of

この機能を使用するには、OAuth 2.0 認証情報プロバイダーでトークン交換on-behalf-ofを設定します。カスタムプロバイダーを使用するときに設定をカスタマイズするか、サポートされているプロバイダーのいずれかを選択できます。

カスタム OAuth2 認証情報プロバイダー

AWS コンソールでカスタムプロバイダーの代理トークン交換を設定するにはon-behalf-of「カスタムプロバイダーを使用して OAuth クライアントを追加する」を参照してください。CLI を使用して設定することもできます。

CLI の例: machine-to-machineトークンをアクタートークンとしてTOKEN_EXCHANGE許可タイプを使用する

aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "sample-obo-custom", "credentialProviderVendor": "CustomOauth2", "oauth2ProviderConfigInput": { "customOauth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "https://my.idp.com/.well-known/openid-configuration" }, "clientId": "your-client-id", "clientSecret": "your-client-secret", "clientAuthenticationMethod": "CLIENT_SECRET_BASIC", "onBehalfOfTokenExchangeConfig": { "grantType": "TOKEN_EXCHANGE", "tokenExchangeGrantTypeConfig": { "actorTokenContent": "M2M", "actorTokenScopes": ["scope1", "scope2"] } } } } }'

CLI の例: JWT_AUTHORIZATION_GRANT許可タイプの使用

aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "sample-obo-custom", "credentialProviderVendor": "CustomOauth2", "oauth2ProviderConfigInput": { "customOauth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "https://my.idp.com/.well-known/openid-configuration" }, "clientId": "your-client-id", "clientSecret": "your-client-secret", "clientAuthenticationMethod": "CLIENT_SECRET_BASIC", "onBehalfOfTokenExchangeConfig": { "grantType": "JWT_AUTHORIZATION_GRANT" } } } }'

プロバイダー固有のトークン交換on-behalf-of

AgentCore Identity には、選択したプロバイダーのトークン交換on-behalf-ofout-of-the-boxており、各プロバイダーの公開ドキュメントに従って事前設定されています。これらのデフォルトを超えてプロトコルレベルの設定を調整するには、交換設定を完全に制御するようにカスタムプロバイダーを設定します。

プロバイダー名 グラントタイプモード メモ 関連するドキュメント

MicrosoftOauth2

JWT_AUTHORIZATION_GRANT

* Microsoft On-Behalf-Ofフローは RFC 7523 標準に基づいて構築された独自の委任パターンであり、JWT ベアラーグラントタイプを使用して階層型サービス間の安全なトークン交換を容易にします。

requested_token_use=on_behalf_of は、上書きされない限り、リクエストに自動的に追加されます。

Microsoft ID プラットフォームと OAuth 2.0 On-Behalf-Of フロー

トークン交換on-behalf-ofの使用

実行時にon-behalf-ofトークンをリクエストするには、GetResourceOauth2Token を呼び出し、oauth2Flow を に設定しますON_BEHALF_OF_TOKEN_EXCHANGEGetWorkloadAccessTokenForJWT から取得したワークロードアクセストークンを渡します。このトークンはインバウンドトークンをサブジェクトとして保持し、AgentCore Identity はこれを交換のサブジェクトトークンとして使用します。API の完全なリファレンスについては、 AWS ドキュメントを参照してください。

# obtain workload access token using inbound token aws bedrock-agentcore get-workload-access-token-for-jwt --workload-name sample-workload \ --user-token "inbound-jwt-token" { "workloadAccessToken": "workload-access-token" } # perform on-behalf-of token exchange aws bedrock-agentcore get-resource-oauth2-token --resource-credential-provider-name sample-obo-provider \ --oauth2-flow ON_BEHALF_OF_TOKEN_EXCHANGE --scopes "sample-scope" \ --workload-identity-token "workload-access-token" { "accessToken": "on-behalf-of-token" }

グラントタイプとトークンタイプ

grant_type = TOKEN_EXCHANGE

このグラントタイプでは、AgentCore Identity はインバウンド JWT をサブジェクトトークンとして送信し、アクセストークンを取得します。、M2MAWS_IAM_ID_TOKEN_JWTまたは のいずれかにactor_token_content値を設定する NONE

パラメータ

grant_type

TOKEN_EXCHANGE (トークン交換リクエストを作成するurn:ietf:params:oauth:grant-type:token-exchangeときに にマッピングされます)

subject_token

トークン交換リクエストを構築するurn:ietf:params:oauth:token-type:jwtときは、インバウンド JWT トークンを使用し、サブジェクトトークンタイプを にマッピングします。

デフォルト。上書きできます。「customParameters」を参照してください。

grant_type = JWT_AUTHORIZATION_GRANT

このグラントタイプでは、AgentCore Identity はアクセストークンを取得するための認可としてインバウンド JWT を送信します。このグラントタイプはアクタートークンを必要としないため、actor_token_content設定は必要ありません。

パラメータ

grant_type

JWT_AUTHORIZATION_GRANT (トークン交換リクエストを作成するurn:ietf:params:oauth:grant-type:jwt-bearerときに にマッピングされます)

assertion

インバウンド JWT トークン

actor_token_content = M2M ( grant_type = の場合のみTOKEN_EXCHANGE)

AgentCore Identity はmachine-to-machine認証 (OAuth 2.0 クライアント認証情報付与) を実行してアクセストークンを取得し、それを として送信しますactor_token

パラメータ

actor_token_content

M2M

  • トークン交換リクエストを作成するurn:ietf:params:oauth:token-type:access_tokenときに にマッピングします。

  • client_credentials 許可によってアクセストークンを取得する

オプションの actorTokenScopes設定は、クライアント認証情報リクエストのscopeパラメータとして使用されます。

actor_token_content = AWS_IAM_ID_TOKEN_JWT ( grant_type = の場合のみTOKEN_EXCHANGE)

AgentCore Identity は、認証情報プロバイダーのトークンエンドポイントsts:GetWebIdentityTokenを aud クレームとして使用して を呼び出し、結果の JWT を として送信しますactor_token

パラメータ

actor_token_content

AWS_IAM_ID_TOKEN_JWT

  • トークン交換リクエストを作成するurn:ietf:params:oauth:token-type:jwtときに にマッピングします。

  • を介して JWT を取得します。 sts:GetWebIdentityToken

このモードでは、アウトバウンドウェブ ID フェデレーションでアカウントを有効にする必要があります。「iam:EnableOutboundWebIdentityFederation」を参照してください。

actor_token_content = NONE ( grant_type = の場合のみTOKEN_EXCHANGE)

トークン交換リクエストには actor_tokenまたは actor_token_typeは含まれません。このモードは、クライアント認証のみからアクター ID を取得する ID プロバイダーで使用します。