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ており、各プロバイダーの公開ドキュメントに従って事前設定されています。これらのデフォルトを超えてプロトコルレベルの設定を調整するには、交換設定を完全に制御するようにカスタムプロバイダーを設定します。
| プロバイダー名 | グラントタイプモード | メモ | 関連するドキュメント |
|---|---|---|---|
|
|
* Microsoft On-Behalf-Ofフローは RFC 7523 標準に基づいて構築された独自の委任パターンであり、JWT ベアラーグラントタイプを使用して階層型サービス間の安全なトークン交換を容易にします。 |
|
トークン交換on-behalf-ofの使用
実行時にon-behalf-ofトークンをリクエストするには、GetResourceOauth2Token を呼び出し、oauth2Flow を に設定しますON_BEHALF_OF_TOKEN_EXCHANGE。GetWorkloadAccessTokenForJWT から取得したワークロードアクセストークンを渡します。このトークンはインバウンドトークンをサブジェクトとして保持し、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 をサブジェクトトークンとして送信し、アクセストークンを取得します。、M2M、AWS_IAM_ID_TOKEN_JWTまたは のいずれかにactor_token_content値を設定する NONE
| パラメータ | 値 |
|---|---|
|
|
|
|
|
トークン交換リクエストを構築する デフォルト。上書きできます。「customParameters」を参照してください。 |
grant_type = JWT_AUTHORIZATION_GRANT
このグラントタイプでは、AgentCore Identity はアクセストークンを取得するための認可としてインバウンド JWT を送信します。このグラントタイプはアクタートークンを必要としないため、actor_token_content設定は必要ありません。
| パラメータ | 値 |
|---|---|
|
|
|
|
|
インバウンド JWT トークン |
actor_token_content = M2M ( grant_type = の場合のみTOKEN_EXCHANGE)
AgentCore Identity はmachine-to-machine認証 (OAuth 2.0 クライアント認証情報付与) を実行してアクセストークンを取得し、それを として送信しますactor_token。
| パラメータ | 値 |
|---|---|
|
|
|
オプションの actorTokenScopes設定は、クライアント認証情報リクエストのscopeパラメータとして使用されます。
actor_token_content = AWS_IAM_ID_TOKEN_JWT ( grant_type = の場合のみTOKEN_EXCHANGE)
AgentCore Identity は、認証情報プロバイダーのトークンエンドポイントsts:GetWebIdentityTokenを aud クレームとして使用して を呼び出し、結果の JWT を として送信しますactor_token。
| パラメータ | 値 |
|---|---|
|
|
|
このモードでは、アウトバウンドウェブ ID フェデレーションでアカウントを有効にする必要があります。「iam:EnableOutboundWebIdentityFederation」を参照してください。
actor_token_content = NONE ( grant_type = の場合のみTOKEN_EXCHANGE)
トークン交換リクエストには actor_tokenまたは actor_token_typeは含まれません。このモードは、クライアント認証のみからアクター ID を取得する ID プロバイダーで使用します。