Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Meet AgentCore Identity Consent Portal

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for iganin iganin
September 29, 2026

Meet AgentCore Identity Consent Portal

JAWS-UG AI/ML #43:AIエージェントとAI-DLCで加速する!AI/ML実践LT大会
https://jawsug-ai.connpass.com/event/406132/

Avatar for iganin

iganin

September 29, 2026

More Decks by iganin

Other Decks in Technology

Transcript

  1. 本日のゴール Consent Portal について、次の 3 点の手がかりを得ること • なぜ MCP で

    Consent Portal が必要なのか • Consent Portal が何を肩代わりするのか • 実装例としてClaude Code からどうつなぐのか
  2. AgentCore Identity に Consent Portal が加わった 2026 年 9 月

    1 日の What's New(日本語版) エージェントの IDE ベースの クライアントは、 OAuth の同意 URL を ネイティブに表示することも、 同意後のセッションの紐付けを 処理することもできません。 https://aws.amazon.com/jp/about-aws/whats-new/2026/09/amazon-bedrock-agentcore/
  3. ユーザーのリソースを使うには、本人の同意が必要 3LO(認可コードグラント): 同意して得たトークンで、エージェントが代わりに呼ぶ ユーザー エージェント Gateway 下流 IdP / API

    Identity tools/call 同意用の URL URL を開いてもらう サインインと同意 認可コード Token Vault に保存 もう一度 tools/call 保存したトークンで呼ぶ
  4. 認可 URL が他人に渡ると、トークンが攻撃者のものになる 被害者が同意して取得したトークンが攻撃者のものとして保存される 攻撃者 被害者 下流 IdP Identity ①

    自分で認可を始める 認可 URL ② URL を送って踏ませる ③ 被害者がサインインして同意 ④ 認可コード 攻撃者のものとして保存
  5. Session Binding は 始めた人と同意した人が同じかを確かめる 始めた人と同じならトークンを保存し、異なれば渡さない。 ブラウザ アプリ(戻り先) 下流 IdP Identity

    サインインと同意 認可コード 戻り先へ(session URI 付き) session URI を持って戻る CompleteResourceTokenAuth (サインイン中のユーザー) 一致を確かめて保存
  6. Session Binding にはバックエンドが必要 戻り先で「いまサインインしている人」を確かめられる 仕組み • 同意の後に戻ってくる、公開された通信の受け口 • 戻ってきた人を見分ける、認証情報とセッション •

    そのユーザーで CompleteResourceTokenAuth を呼ぶ処理 “Session Binding URL: The URL pointing back to a customer-managed service that completes the session binding ... This endpoint is implemented and hosted by the customer.” AWS ML Blog「Secure AI agents with Amazon Bedrock AgentCore Identity on Amazon ECS」
  7. MCP では、つないでくるクライアントを選べない 汎用の MCP クライアントは、AgentCore 固有の CompleteResourceTokenAuth を知らない ユーザー Claude

    Code / Kiro Cursor / VS Code … (MCP クライアント) Gateway ? 同意後の戻り先 AgentCore Identity 下流の API
  8. URL Mode Elicitation は、URL をユーザーに開いてもらう仕組み OAuth の同意など、クライアントを通してはいけない操作をブラウザで済ませる(MCP 2025-11-25 で追加) ユーザー

    MCP クライアント MCP サーバー 下流 IdP / API tools/call 「この URL を開いて」 -32042 のエラー(2025-11-25) input_required(2026-07-28) ドメインを見せて確認 Accept ブラウザで開いて、サインインと同意 (クライアントを通らない) もう一度 tools/call
  9. MCP の仕様でも、同じユーザーかを確かめるのはサーバーの仕事とされている MCP 2025-11-25 の URL Mode Elicitation • クライアントがやるのは、URL

    を見せて開くことだけ • 始めた人と完了した人が同じかを確かめるのはサーバー(MUST) “The client's only responsibility is to provide the user with context about the elicitation URL the server wants them to open.” “the server MUST ensure that the user who started the elicitation request ... is the same user who completes the authorization flow.” https://modelcontextprotocol.io/specification/2025-11-25/client/elicitation
  10. これまでは、同意用の Web アプリを自前で建てていた 公式ワークショップ(VS Code × Entra ID): VS Code

    には案内文を返し、同意は別の SPA で済ませる VS Code から呼ぶと VS Code Gateway インターセプター 未同意なら「/auth で認可してから 再実行して」と文字列で返す ブラウザの SPA(/auth)で先に同意しておく ① サインイン (Entra ID) ② tools/call で 認可 URL を受け取る 赤い点線が自前の部分。SPA の 2 画面に加え、ブラウザが④を呼ぶための IAM ロール (Entra ID の JWT で AssumeRoleWithWebIdentity)も用意する awslabs/agentcore-samples: 06-workshops/02-AgentCore-gateway/04-integration/05-entraid-3lo-gateway ③ 同意 (Entra ID) ④ /auth/callback で CompleteResource TokenAuth
  11. Consent Portal は、Gateway ごとに AWS が用意するManagedな同意の画面 • Gateway 1 つにポータル

    1 つ • Gateway のインバウンド認可と同じ IdP(主 IdP)でサインイン • Credential Provider ごとに Connect し、トークンは Token Vault へ • ブラウザはトークンを持たない portalUrl https://<gatewayId>.consent-portal.bedrock-agentcore.<region>.amazonaws.com
  12. 東京リージョンで検証しました 主 IdP はポータルと Gateway で共通、下流 IdP は Credential Providerごとに設定

    Claude Code / curl Cognito A 主 IdP ターゲット(OpenAPI) AUTHORIZATION_CODE AgentCore Gateway CUSTOM_JWT サインイン Connect Consent Portal Cognito B 下流 IdP とリソース
  13. ユーザーの操作は、サインイン、Connect、下流での同意の 3 つ ① ポータルにサインイン → ② Connect を押す →

    ③ 下流の IdP でサインインして同意 Connect の前(行に Connect ボタン) Connect の後(Connected)
  14. 裏では、ポータルが Session Binding をしている 「アプリ」の位置に、ポータルが入る ブラウザ Consent Portal 下流 IdP

    Identity Connect GetResourceOauth2Token 下流の認可画面へ サインインと同意 認可コード /connect/callback へ session URI を持って戻る CompleteResourceTokenAuth Token Vault に保存
  15. 設定するのは3 つの戻り先 エージェント側の URL はどこにも登場しない 登録先 登録する値 役割 主 IdP

    のポータル用クライアント <portalUrl>/callback ポータルへのサインイン 下流 IdP のクライアント Provider の callbackUrl 認可コードを Identity が受ける ターゲットの defaultReturnUrl <portalUrl>/connect/callback Session Binding ポータルの作成 aws bedrock-agentcore-control create-consent-portal --name cp-demo-portal \ --execution-role-arn $PORTAL_ROLE_ARN \ --idp-config '{"credentialProviderArn": "'$IDP_PROVIDER_ARN'", "scopes": ["openid"]}' \ --sources '[{"identifier": "'$GW_ID'", "type": "agentcore-gateway"}]'
  16. エージェントに残るのは未同意のユーザーをポータルへ案内することだけ 同じリクエストのまま、同意済みなら結果が、未同意なら同意の要求が返却される 3LO に必要なこと Consent Portal の構成 認可 URL を開かせる

    ポータルの Connect 同意後の戻り先を受ける ポータルの /connect/callback セッションに結び付ける ポータルが呼ぶ 未同意のユーザーを案内 「ポータルで Connect して」
  17. Claude Code は、同意の URL をダイアログで開いてくれる 表示される URL は、Gateway が返した AgentCore

    Identity の認可エンドポイントのまま Claude Code MCP server “gateway-static” wants to open a URL Please login to this URL for authorization. │ https://bedrock-agentcore.ap-northeast-1.amazonaws.com/ │ identities/oauth2/authorize?request_uri=urn%3Aietf%3A... ❯ Accept Decline
  18. インターセプターで、ダイアログの URL をポータルに差し替える 公式サンプル(Custom Just-in-Time Auth)でも案内されている方法 Claude Code Gateway tools/call(未同意)

    Lambda Gateway が自分で作成する同意の要求でも動く 同意の要求(素の認可 URL) url をポータルに、message を案内文に差し替え 同意の要求(ポータルの URL)
  19. Lambda がやるのは、url と message の書き換え MCP 2025-11-25 は -32042 のエラー、MCP

    2026-07-28 は input_required の結果で届く Python(抜粋) def _rewrite(el): if el.get("mode") == "url" and "bedrock-agentcore" in el.get("url", ""): el["url"], el["message"] = PORTAL_URL, MESSAGE def handler(event, context): resp = event["mcp"]["gatewayResponse"] body = resp.get("body") or {} err, result = body.get("error") or {}, body.get("result") or {} if err.get("code") == -32042: # 2025-11-25 for el in err.get("data", {}).get("elicitations", []): _rewrite(el) elif result.get("resultType") == "input_required": # 2026-07-28 for req in result.get("inputRequests", {}).values(): if req.get("method") == "elicitation/create": _rewrite(req.get("params", {})) return {"interceptorOutputVersion": "1.0", "mcp": {"transformedGatewayResponse": {"statusCode": resp.get("statusCode", 200), "body": body}}}
  20. ダイアログからポータルで同意し、再試行で呼び出しが通る Claude Code 2.1.283 で、MCP 2025-11-25 と 2026-07-28 の両方で確認 ①

    ダイアログ ② ポータルで Connect MCP server “gateway-frank” wants to open a URL ③ 再試行で成功 Called gateway-frank {"sub":"0794eac8-…", "email": "frank.resource @example.com", "username": "frank-resource"} Consent is required. Open the consent portal … │ https://<gatewayId> │ .consent-portal… ❯ Accept Decline MCP の版 同意の後の一手 2025-11-25 待機画面で Retry now を押す 2026-07-28 もう一度出るダイアログで Accept(すぐ再試行される)
  21. 差し替えても Session Binding はポータルが担う インターセプターは同意の処理に触れてはおらず、認可フローの入口まで案内しているのみ • 保存されるのは、ポータルの Connect で始めた流れのトークン •

    Gateway が作った認可セッションは使われない • URL が他人に渡っても、その人自身の接続ができるだけ • 先にポータルで同意すれば、Response Interceptor なしでもリクエストは通る • インターセプターは、初回の案内のために追加している
  22. Gateway 側の注意点 MCP のバージョンとロールの権限でつまずきやすい • MCP 2025-11-25 を有効にしないと、URL Mode Elicitation

    が使えない • 既定の 2025-03-26 だと、同意済みでも呼び出しが失敗する • サービスロールに GetWorkloadAccessTokenForJWT などの権限を足す • allowedClients を絞るなら、ポータル用クライアントも入れる
  23. Claude Code 側の注意点 同意の後の再試行はユーザーが実施する必要がある • Gateway から完了の通知は来ない • Claude Codeで

    MCP 2025-11-25 は Retry now、MCP 2026-07-28 はもう一度 Accept を選択 • MCP のバージョンで、同意の要求の形が変わるので注意 • MCP 2025-11-25 は -32042 で MCP 2026-07-28 は input_required に含まれる
  24. まとめ MCP クライアントが持てない同意の仕組みをAWS がManagedに担保してくれる • Session Binding には、ユーザーのセッションを持つバックエンドが必要 • MCP

    では接続するクライアントを選べないので、それを Gateway の側に置く • Consent Portal は、それを Gateway ごとに AWS が用意する • 注意点としてMCP Clientから接続するなら、Response Interceptor で URL をポータルに差し替える
  25. 参考 • What's New(2026-09-01) • aws.amazon.com/about-aws/whats-new/2026/09/amazon-bedrock-agentcore/ • 開発者ガイド Configure a

    consent portal • docs.aws.amazon.com/bedrock-agentcore/latest/devguide/identity-consent-portal.html • AWS ML Blog: Manage end-user OAuth consent for AI agents with Amazon Bedrock AgentCore(2026-09-14) • MCP 2025-11-25 Elicitation • modelcontextprotocol.io/specification/2025-11-25/client/elicitation • awslabs/agentcore-samples: 05-entraid-3lo-gateway、Custom Just-in-Time Auth、consent dashboard