AWSでユーザー認証付きリモートMCPサーバーをホストする
はじめに
この記事でやること
- AWSで認証付きリモートMCPサーバーをホストする
- AIエージェントサービスとの連携時にユーザー認証させる
- 既存のCognitoユーザープールを利用する
- 認証付きリモートMCPサーバーをローカル環境から動作確認する
今回のサービス構成
- Bedrock AgentCore Gateway
- API Gateway(REST API)
- Cognito
API Gateway以外と連携するパターンについての記事の近日中に書く予定です
実現できるMCPサーバー登録フロー
- AIエージェントサービスにリモートMCPのURLと、OAuthのクライアントIDとシークレットを登録する
- Cognitoの認証画面に飛ぶ
- ユーザー認証を通すと、サービスにMCPサーバーが登録される
作成手順
API Gatewayの作成
まず、接続先として仮のAPI Gatewayを作成する。
2026年1月現在、AgentCore Gatewayが連携できるAPI GatewayのAPIタイプは「REST API」のみ。
HTTP APPIもWebSocket APIもREST API プライベートも連携不可。
API Gatewayとの連携は制約が多め(Key considerations and limitations)

このままでは使えないため、「ステージ」画面で新規のステージを作成しておく。
AgentCore Gatewayの作成
次に本命のAgentCore Gatewayを作成する。

ゲートウェイの詳細
ゲートウェイ名を適当な名前に変更する。
追加設定は基本的にデフォルト値のままでよいが、ここでサポートするMCPのバージョンを指定できるため、必要に応じて変更する。
インバウンド認証設定
インバウンド認証は、AIエージェントなどのクライアントからAgentCore Gatewayのリソースにアクセスする際の認証方法の設定。
逆にアウトバウンド認証は、AgentCore Gatewayから他のツールを呼び出す際の認証方法の設定となっている。
今回はJWTを選択する。
ここで、新規のユーザープールを用意する場合には、JWTスキーマ設定はrecommendedのものを選択する。
既存のユーザープールを流用したい場合や、外部のIDプロバイダーを利用する場合には追加で設定が必要。
Cognitoを利用する場合、検出URLは以下の形式となる。https://cognito-idp.[リージョン].amazonaws.com/[ユーザープールID]/.well-known/openid-configuration
「JWT Authorization Configuration」の「Allowed Clients」には、ユーザープールに紐付くアプリケーションクライアントのクライアントIDを入力する。
MCPサーバーの認証用に新規のアプリケーションクライアントを作成しておいた方が安心
audiencesやscopes、claimsも必要に応じて設定する。
許可
基本的に「新しいサービスロールを作成して使用」を選んでおくでよい。
必要なロールを自動で作成してくれる。
ターゲット
ターゲットタイプで「API Gateway」を選択する。
※API Gateway側でステージを作成しておかないと選択できないため注意
対象のステージまで選択すると、APIパスの一覧が表示される。
この中から、MCPサーバーのツールとして登録するAPIを選択する。
ここで、Operation IDが空の部分には名前を別途設定してあげる必要がある。
今回はアウトバウンド認証設定は「No authorization」とする。
実運用では「IAMロール」を指定して、このAgentCore GatewayがAPI GatewayにアクセスできるようなIAMポリシーを別途指定してあげておくと良い。
最後に「ゲートウェイを作成」を押すことで、Gatewayの作成が始まる。
もしここでターゲットの作成に失敗してもGateway自体は作成されるため、その際はターゲットを追加し直せばよい。
Cognitoの設定
リソースサーバーの作成
Cognito>ブランディング>ドメイン ページから、リソースサーバーを作成する。
ここで、先ほど作成したAgentCore Gatewayの「ゲートウェイリソースURL」を「リソースサーバー識別子」に入力する。
必要に応じてカスタムスコープも設定する。

アプリケーションクライアントの設定
今回は、リモートMCPサーバーをAIエージェントツールに登録する際にCognitoの認証画面を通してユーザー認証を行いたいため、「ログインページ」の設定で、「OAuth付与タイプ」は「認証コード付与」にしておく。
ここで「クライアント認証情報」が設定してあると、いわゆるM2M認証の形式になり、認証にかかる料金が高くなってしまう。
ref. Amazon Cognito アドオンの料金表
「許可されているコールバックURL」には、実際にMCPサーバーを連携する先に応じたOAuthのコールバックURLを設定しておく必要がある。
例えばChatGPTの場合は、https://chatgpt.com/connector_platform_oauth_redirectを設定しておくことになる。
今回はMCP InspectorというMCP公式のツールで動作確認を行うため、http://localhost:6274/oauth/callback/debugというURLを設定しておく。

動作確認
MCP Inspectorを起動する。
以下のように値を設定する。
- Transport Type: Streamable HTTP
- URL: AgentCore GatewayのゲートウェイリソースURL
- Connection Type: Direct
- Authentication
- Client ID: CognitoのアプリケーションクライアントのクライアントID
- Client Secret: 〃のクライアントシークレット
- Scope: (例)
openid email profile
設定が完了したら、「Open Auth Settings」ボタンを押し、次に「Quick OAuth Flow」ボタンを押す。
ここまでの手順に問題なければ、ここでCognitoの認証画面が開き、認証後にMCP Inspectorの画面に戻り「Authentication completed successfully」と表示される。
もし上手くいかなかった場合、「OAuth FLow Progress」の下部にある「Continue」ボタンを使って、OAuthのフローを1つずつ進めながらエラーの発生箇所の特定と原因の調査を行う。
(よくあるのがCognitoのリソースサーバー設定し忘れ)
認証が成功したら、画面左下の「Connect」ボタンを押すことで、リモートMCPサーバーに接続できる。
「Tools」タブの「List Tools」でツール一覧を確認でき、そこから各ツールを実際に呼び出すことができる。

やったね
おわりに
一応、ChatGPTなどにもこのMCPサーバーを登録できることを確認できました。
(無料プランユーザーなので登録成功のポップアップまでしか確認できてない)(何でそこまではできるんだ)