OpenAI Secure MCP TunnelでAWS認証情報を渡さずにChatGPTから操作する
はじめに
お疲れ様です。あきとです。
ChatGPT に AWS 上のログ確認などを手伝ってもらいたいと以前から思っていました。一方で、そのためだけに MCP サーバーをインターネットへ公開するのは避けたいと感じていました。AWS 側へインバウンド通信を許可すると、アクセス制御や監視で気にする範囲が広がるためです。
また、AWS の認証情報を AI サービス側へそのまま渡す構成にも不安があります。漏えいしたときの影響が大きく、権限を絞っても管理の手間が残ります。
そこで今回は、OpenAI の Secure MCP Tunnel を使ってみました。Secure MCP Tunnel は、MCP サーバー側から OpenAI へ outbound で接続します。その接続を通じて、MCP サーバーを呼び出せるようにする仕組みです。
結論
OpenAI Secure MCP Tunnel と ECS Fargate を組み合わせると、AWS 側へインバウンド通信を許可せずに、ChatGPT から AWS を読み取り操作できました。
ポイントは、役割の分け方です。
tunnel-clientは、runtime API key を使って Tunnel に接続します- 接続方向は、Fargate 側から OpenAI への outbound HTTPS です
- セキュリティグループは inbound ルールを持たず、この outbound 通信だけを許可します
- ChatGPT は、Tunnel 経由で MCP リクエストを送ります
tunnel-clientは、ChatGPT からの MCP リクエストを受け取ります- MCP Proxy for AWS は、MCP リクエストを AWS API 向けのリクエストへ変換します
- ECS タスクロールは、AWS API を呼び出すための権限を持ちます
- AWS は、ECS タスクロールの IAM 権限にもとづいて許可または拒否を判断します
AWS 側へインバウンド通信を許可しなくてよい点が、この構成の一番の強みです。また、AWS の認証情報が OpenAI 側のネットワークを一度も通らない点も大きな利点です。
全体構成
検証では、次の構成にしました。

今回は検証目的のため、コストを抑える構成にしました。NAT Gateway は作らず、Fargate タスクをパブリックサブネットに配置しています。
Fargate タスク内で動く tunnel-client と mcp-proxy-for-aws は、どちらも GitHub 上の OSS です。tunnel-client は、OpenAI が公開している openai/tunnel-client を使いました。mcp-proxy-for-aws は、AWS が公開している aws/mcp-proxy-for-aws を使っています。
Secure MCP Tunnel は、tunnel-client から OpenAI へ outbound HTTPS で接続します。そのため、MCP サーバーをインターネットへ公開する必要がありません。
AWS API へ送るリクエストは、SigV4 で署名します。署名には IAM の認証情報が必要です。今回は、Fargate タスクに紐づく ECS タスクロールの認証情報を使いました。
この署名により、AWS 側は送信元を ECS タスクロールとして扱います。そのうえで、IAM 権限にもとづいて許可または拒否を判断します。
セキュリティグループは 443 番ポートの outbound だけを許可しました。inbound ルールは追加していません。
やってみたこと
1. OpenAI 側で Tunnel を準備する
まず、OpenAI Platform の管理画面で Tunnel を作成します。
私の環境でつまずいたのは、権限まわりです。もともと付与されていた Owner ロールでは、トンネルを作成できませんでした。
「People」の「Roles」から新しいロールを作ります。そのうえで、「Permissions」で「Tunnels」の「Read」と「Manage」を有効にします。最後に、対象のメンバーへ割り当てる必要があります。
ロールを割り当てたユーザーでログインすると、Tunnels 画面の「Create tunnel」ボタンが有効になります。

「Create tunnel」では、Name、Organization、ChatGPT workspace を指定します。

作成後に発行される tunnel_id は、AWS 側の設定で使うため控えます。
続いて、runtime API key を作成します。「API Keys」の「Create new secret key」から作成し、権限は「Tunnels」の「Read」と「Use」を付与しておきます。この runtime API key は、このあと AWS Secrets Manager へ保存します。

2. AWS 側を準備してデプロイする
今回検証した主な設定は、次のとおりです。
- runtime API key の保存先として AWS Secrets Manager を使います
tunnel_idと、操作対象の AWS リージョンを設定します- セキュリティグループは inbound なし、outbound は 443 番ポートだけ許可します
- Fargate タスクはパブリックサブネットに配置し、NAT Gateway は使用しません
- ECS タスクロールの権限は
ReadOnlyAccessに絞ります
3. ChatGPT 側で疎通を確認する
今回の検証は、ChatGPT Pro サブスクリプションの環境で実施しました。
ChatGPT の設定から「アプリ」を開きます。そこで、「開発者モード」を有効にします。開発者モードは、未検証のコネクタを追加するために必要です。

続いて「新しいアプリ」を開き、名前を付けます。接続方法は「トンネル」を選びます。「利用可能なトンネル」から、先ほど作成した Tunnel を選択します。
今回の MCP サーバーは OpenAI の審査を受けていないため、リスクを理解したうえで続行する旨のチェックボックスに同意します。その後、「作成する」をクリックします。

作成したアプリをチャットで呼び出し、次のような読み取り操作を試します。
実際のログ内容はブログに載せられません。そのため、ここでは公開しても問題ない範囲の読み取り操作として、AWS の利用費確認を例にしています。
aws_mcp awsの先月の利用費を教えて

実際に Cost Explorer の結果が返れば、Tunnel と MCP Proxy for AWS を経由して AWS API まで接続できています。
今回の結果では、ChatGPT から aws_mcp が呼び出されました。その後、先月分の Cost Explorer の結果として、税抜合計、Tax、税込合計が返っています。
まとめ
今回は、OpenAI Secure MCP Tunnel と ECS Fargate を組み合わせ、AWS 側へインバウンド通信を許可せずに、ChatGPT から AWS を操作できるか検証しました。
Fargate 側から OpenAI へ outbound HTTPS で接続するため、MCP サーバーをインターネットへ公開する必要はありません。
さらに、権限を ECS タスクロールへ寄せる構成にすれば、AI サービス側に AWS のアクセスキーを渡さずに済みます。
インバウンド通信なしでつなげられる点を重視する場合に、Secure MCP Tunnel は検討しやすい選択肢だと感じました。
今回はコストを抑えるためにパブリックサブネットへ配置しましたが、本番運用に近い構成を考えるなら、Fargate タスクをプライベートサブネットに配置する選択肢もあります。
その場合は、NAT Gateway 経由で outbound 接続する構成もよさそうです。
ChatGPT に AWS 操作を任せてみたい方の参考になれば幸いです。
参考資料
- Secure MCP Tunnel | OpenAI API - Secure MCP Tunnel の公式ガイド
- GitHub - openai/tunnel-client -
tunnel-clientの公式リポジトリ - GitHub - aws/mcp-proxy-for-aws - MCP Proxy for AWS の公式リポジトリ
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました










