4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AgentCoreゲートウェイの3LOが簡単なるかもしれないコンセントポータルで四苦八苦

4
Posted at

待ってたら誰か検証してくれると思ったらしてくれなかったので私がやりますシリーズ、第一弾です。

コンセントポータルです。

タコ足配線でもしちゃうのでしょうか?楽しみですね。

検証してる間に我らが神野さんがわかりやすいブログを書いてくれてます!「僕のを読んでから」ぜひ神野さんのブログも読みましょう!

https://dev.classmethod.jp/articles/agentcore-consent-portal-github/

AgentCoreゲートウェイの認可複雑問題

AgentCoreゲートウェイは、MCPサーバーとユーザーの間に入って、その名の通りゲートウェイとして機能します。

こんなかんじ。

これを、太郎さんが利用した場合は太郎さんの権限で認証されることが期待値です。

MCPサーバーの呼び出しを成功させるには、AgentCoreゲートウェイにアクセスしてきたユーザーに対するMCPサーバー側のトークンを正しく紐づけて管理する必要があります。これを行ってくれるのがAgentCoreアイデンティティですが、「紐づけ作業」は自前で行う必要がありました。

この紐づけ作業が、ムズイ、メンドイ、セキュリティコワイだったのですが、 Consent Portalがまるっといい感じにやってくれます! (多分)

このなんだかややこしいやつは3LOっていうらしいです。

とはいえ、このコンセントポータルの構築、行き当たりばったりでやると絶対失敗しますので、こちらの手順でどうぞ!

手順

GitHub OAuth Appを作成

  1. https://github.com/settings/developers にアクセスして「New OAuth app」をクリック

    image.png

  2. 入力して「Register application」をクリック

    項目
    Application name なんでも
    Homepage URL なんでも
    Redirect URI http://localhost (あとで差し替えます)

    image.png

  3. 「Generate a new client secret」をクリックしてクライアントシークレットを生成します

「Client ID」「Client secret」をメモします。

Cognitoユーザープールを作成

  1. Cognito管理画面で「Create user pool」をクリック

  2. 入力します

    項目
    Application type Traditional web application
    Name your application consent-portal-web
    Options for sign-in identifiers Email
    Return URL - optional https://example.com/callback (あとで差し替えます)
  • ユーザープールのOverview画面で「OpenID Connect configuration URL」をメモします。
  • App clientの画面で「Client ID」「Client secret」をメモします。

AgentCoreアイデンティティを作成

GitHubのOutbound Authを登録します。

  1. AgentCoreアイデンティティの画面で「Add Outbound Auth」→「Add OAuth client」を選択
  2. Included providerに「GitHub」を選び、GitHubのClient IDとClient secretを入力します

Callback URLをメモします。

次にCognitoのOutbound Authを登録します。

  1. AgentCoreアイデンティティの画面で「Add Outbound Auth」→「Add OAuth client」を選択
  2. Included providerに「Cognito」を選び、CognitoのClient IDとClient secretを入力します。
  3. Cognitoはさらに「Issuer」「Authorization endpoint」「Token endpoint」の入力が必要です。この3つの値はCognito画面でコピーしたOpenID Connect configuration URLにアクセスすると取得できます。(自動でやってほしい。。)

AgentCoreゲートウェイを作成

AgentCoreゲートウェイを作成します。ウィザードの制約で、若干めんどくさいことをします。

  1. AgentCoreゲートウェイの画面で「Create Gateway」をクリック

  2. ウィザード1ページ目はそのままクリック

  3. ウィザード2ページ目で以下を入力

    項目
    Inbound Auth type Use JSON Web Tokens (JWT)
    JWT schema configuration Use existing Identity provider configurations
    Discovery URL CognitoのOpenID Connect configuration URL(ここは自動なのかよ)
    Clients CognitoのClient ID
  4. ウィザード3ページ目でターゲットを必ず追加しますが、訳あってダミーで登録します。Target typeをConnectorsにし、Pre-configured targetsをWeb Search toolにするのが一番手間がなくて良さげです。

  5. 残りのウィザードを進め、AgentCoreゲートウェイを作成します。

  6. 作成できたら、Targets欄にあるターゲットを選んだ状態で「Delete」をクリックします。要はターゲットがない状態にします。

「Gateway resource URL」(MCPサーバーのURL)をメモします。

Consent Portalを作成

Consent PortalはAgentCoreアイデンティティの画面で作成します。

  1. AgentCoreアイデンティティの画面で「Create portal」をクリック
  2. Gatewayを選択
  3. IdP Credential ProviderとしてCognitoのアイデンティを選択

これでConsent Portalが作成されました。Consent portal URLをメモします。

image.png

コールバックURLを入れて回る

まずはGitHubのRedirect URIをAgentCoreアイデンティに登録したGitHubのOutbound AuthにあるCallback URLにします。

次にCognitoのコールバックURL変更します。今の入力済みのを消して、「{Consent portal URL}/callback」と「 http://localhost:8080/callback 」を入力します。( http://localhost:8080/callback はClaude Codeようです)

App clientの「Login pages」タブで変更できます。

Cognitoにリソースサーバーを追加する。

理由はわかりませんが、必要なようです。無心で入力するのみです。

Cognitoの左メニューの「Applications」->「Resource servers」->「Create resource server」から、識別子にゲートウェイのMCPエンドポイントURLをそのまま入れます。

Consent Portalに一度ログイン

一度Consent portal URLにアクセスし、ログインしておきましょう。
Cognitoのログイン画面が出るので新規ユーザーのサインアップをしてください。

image.png

AgentCoreゲートウェイのターゲットを作成

AgentCoreゲートウェイのターゲットを作成するのに、必要なConsent portal URLができたので、ターゲットを作成します。

  1. ゲートウェイの詳細画面でTargets欄の「Add」
  2. 「MCP target」→ ターゲットタイプ「MCP Server」
  3. MCP endpointに https://api.githubcopilot.com/mcp/
  4. OAuth clientはGitHubのものを選択
  5. Additional configurationsを開き、Auth grant typeを「Authorization code grant (3LO)」に変更
  6. Return URLを「/connect/callback」
  7. Scopesに「repo」「read:user」と入力

作成後、上部に黄色いバナーが出て、「Authorize」ボタンが表示されます。

Authorizeボタンを押す

Authorizeボタンを押すとOAuthのフローが始まりまして、たらい回しの後に、Consent Portalに遷移し、エラーが表示されます。エラーが出ますが、実は成功してます(なんでやねん!)

しばらく(数分?)するとゲートウェイターゲットのStatusがReadyになります。(めっちゃハマった)

Consent PortalでConnectを押す

さてここで、Consent PortalのConnectを押します。これは成功します。もう疑心暗鬼です。

ここで、一通り環境は完成です。

Claude Codeから接続する

MCPサーバーの設定を追加します。

claude mcp add \
  -s project \
  --transport http \
  --client-id {CognitoのクライアントID} \
  --client-secret \
  --callback-port 8080 \
  agentcore-gw \
  https://{.....}.gateway.bedrock-agentcore.us-east-1.amazonaws.com/mcp

クライアントシークレットを聞かれるので、Cognitoのクライアントシークレットを入力します。

Enter OAuth client secret: 

claude codeを起動します。

claude

MCPサーバーを有効化するか聞かれるので有効化します。
続いてログインします。/mcpから認証します。

/mcp

認証後、MCPサーバーが使えるようになります。わーい


1週間ぐらいかかった。。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?