AWSでユーザー認証付きリモートMCPサーバーをホストする

updated@2026-01-20

はじめに

この記事でやること

  • AWSで認証付きリモートMCPサーバーをホストする
  • AIエージェントサービスとの連携時にユーザー認証させる
  • 既存のCognitoユーザープールを利用する
  • 認証付きリモートMCPサーバーをローカル環境から動作確認する

今回のサービス構成

  • Bedrock AgentCore Gateway
  • API Gateway(REST API)
  • Cognito

API Gateway以外と連携するパターンについての記事の近日中に書く予定です

実現できるMCPサーバー登録フロー

  1. AIエージェントサービスにリモートMCPのURLと、OAuthのクライアントIDとシークレットを登録する
  2. Cognitoの認証画面に飛ぶ
  3. ユーザー認証を通すと、サービスに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サーバーを登録できることを確認できました。
(無料プランユーザーなので登録成功のポップアップまでしか確認できてない)(何でそこまではできるんだ)

スポンサーリンク