![[アップデート]Amazon Bedrock AgentCore GatewayのMCP ServerターゲットでIAM認証が利用可能になりました](https://images.ctfassets.net/ct0aopd36mqt/7M0d5bjsd0K4Et30cVFvB6/5b2095750cc8bf73f04f63ed0d4b3546/AgentCore2.png?w=3840&fm=webp)
[アップデート]Amazon Bedrock AgentCore GatewayのMCP ServerターゲットでIAM認証が利用可能になりました
はじめに
こんにちは、チーズナンが大好きなコンサル部の神野(じんの)です。
以前、AgentCore GatewayのTargetにAgentCore RuntimeにデプロイしたMCP Serverを指定する構成をご紹介しました。
この記事では、Gateway→Runtime(MCP Server)のOutbound認証にCognito M2M(Client Credentials)を使っていました。
もちろん問題なく動作はするのですがAWSリソース間での通信なのにCognitoいるのか・・・と少し面倒に思っていました。
それが、直近でGateway TargetのOutbound認証でGATEWAY_IAM_ROLEがMCP Serverターゲットにも対応しました!
GatewayのIAMロールでSigV4署名してRuntimeを直接呼び出せるようになり、連携しやすくなりました!嬉しい!
この構成でClaude Codeから直接AgentCore Runtime上のMCPツールを呼び出せるか、本記事では試してみました!
前提
- AWSアカウント(us-east-1リージョンで検証)
- Terraform v1.14.4 + AWS Provider v6.39.0
- Python 3.13(MCP Serverコード用)
- Docker v29.1.5(ARM64イメージビルド用)
- Claude Code v2.1.84
- uv v0.9.26(mcp-proxy-for-aws v1.1.6の実行に使用)
今回の構成
全体のアーキテクチャは以下のとおりです。

IAMで完結してシンプルですね。(今まではCognitoを挟んでいたので・・・)
クライアントのClaude CodeからはMCP Proxy for AWSを使ってGatewayにMCP Serverとして接続します。
実装
MCP Serverの実装
MCP Serverのコードは前回記事と同じです。FastMCP 3.2.3で足し算・掛け算・挨拶の3つのツールを実装しています。
from fastmcp import FastMCP
mcp = FastMCP("sample-tools")
@mcp.tool()
def add_numbers(a: int, b: int) -> int:
"""2つの数字を足し算します"""
return a + b
@mcp.tool()
def multiply_numbers(a: int, b: int) -> int:
"""2つの数字を掛け算します"""
return a * b
@mcp.tool()
def greet_user(name: str) -> str:
"""ユーザーに挨拶します"""
return f"Hello, {name}! Welcome to AgentCore Runtime."
if __name__ == "__main__":
mcp.run()
@mcp.tool()デコレータを付けた関数がそのままMCPツールとして公開されます。docstringがツールの説明文になるので、エージェント側がどのツールを呼ぶか判断する材料になります。
続いてコンテナイメージ用のDockerfileです。AgentCore RuntimeはARM64アーキテクチャで動作するため、ビルド時に--platform linux/arm64を指定します(これはTerraform側で行います)。
FROM public.ecr.aws/docker/library/python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY mcp_server.py .
CMD ["python", "mcp_server.py"]
Python 3.12のslimイメージをベースにして、依存パッケージをインストールしてMCP Serverを起動するシンプルな構成です。
依存パッケージはfastmcpのみです。
fastmcp
TerraformでRuntime + Gatewayをデプロイ
TerraformではRuntime、ECR、IAMロール、Gatewayを作成します。Gateway Targetだけはコンソールで設定します。
Terraformコードの全体はGitHubリポジトリを参照してください。
ここではIAM認証の観点で重要なポイントに絞って解説します。
IAMロールの設計
今回のIAM構成では、3つの権限が登場します。
| 権限 | 誰が | 何に対して | 用途 |
|---|---|---|---|
bedrock-agentcore:InvokeGateway |
呼び出し元(Claude Code利用者) | Gateway | Inbound: GatewayのIAM認証を通過するため |
bedrock-agentcore:InvokeAgentRuntime |
GatewayのIAMロール | Runtime | Outbound: GatewayがRuntimeを呼び出すため |
ecr:BatchGetImage 等 |
RuntimeのIAMロール | ECRリポジトリ | RuntimeがコンテナイメージをPullするため |
Terraform上では以下のように定義しています。
# GatewayがRuntimeを呼び出すためのポリシー
resource "aws_iam_role_policy" "gateway_invoke_runtime" {
name = "${var.project_name}-gateway-invoke-runtime-policy"
role = aws_iam_role.gateway.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Sid = "InvokeAgentRuntime"
Effect = "Allow"
Action = "bedrock-agentcore:InvokeAgentRuntime"
Resource = "${aws_bedrockagentcore_agent_runtime.mcp_server.agent_runtime_arn}*"
}]
})
}
Gatewayロールに必要な権限はInvokeAgentRuntimeだけです。Resourceの末尾に*を付けているのは、実際のアクセス先がruntime/xxx/runtime-endpoint/DEFAULTというサブリソースになるためです。
Gatewayの設定
Gatewayの定義はシンプルです。authorizer_typeにAWS_IAMを指定します。
resource "aws_bedrockagentcore_gateway" "main" {
name = "${var.project_name}-gateway-${random_string.suffix.result}"
description = "AgentCore Gateway with IAM inbound authentication"
role_arn = aws_iam_role.gateway.arn
authorizer_type = "AWS_IAM"
protocol_type = "MCP"
}
デプロイ
terraform apply コマンドを実行してデプロイします。
terraform init
terraform apply
# 適用していいか聞かれるのでyesを選択
applyが完了すると、以下のOutputが出力されます。
gateway_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
gateway_url = "https://xxxxxxxx.gateway.bedrock-agentcore.us-east-1.amazonaws.com"
runtime_arn_url_encoded = "https://bedrock-agentcore.us-east-1.amazonaws.com/runtimes/arn%3Aaws%3A.../invocations"
gateway_urlはこの後のGateway Target設定と.mcp.jsonで使います。runtime_arn_url_encodedはGateway TargetのEndpointに使います。
コンソールでGateway Targetを作成(IAM認証)
Gatewayが作成できたら、TargetとしてRuntimeを追加します。
Gatewayの詳細画面を開くと、Inbound Auth typeが「IAM許可」になっていることが確認できます。ターゲットの「追加」を押下します。

下記を入力して「ターゲットを追加」を押下します。
- ターゲットタイプ:
MCP server - MCP endpoint: Terraform出力の
runtime_arn_url_encodedを入力 - アウトバウンド認証設定:
IAMロールを選択 - Service:
bedrock-agentcore

TargetのステータスがReadyになれば完了です。Outbound Auth configurationsが「IAM roles」になっていることも確認できます。

なお、IAM(SigV4)によるOutbound認証は、SigV4署名を検証できるAWSサービスの背後にあるMCPサーバーでのみ利用可能です。対応しているのはAgentCore Runtime、AgentCore Gateway、API Gateway、Lambda Function URLsです。ALBやEC2上のMCPサーバーには使えないので注意してください。
呼び出し元のIAM権限設定
Gateway Inbound認証がAWS_IAMなので、Claude Code(mcp-proxy-for-aws)が使うIAMエンティティにInvokeGateway権限を付与します。この権限がないとGatewayへのアクセスが拒否されます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGatewayInvocation",
"Effect": "Allow",
"Action": "bedrock-agentcore:InvokeGateway",
"Resource": "arn:aws:bedrock-agentcore:us-east-1:<ACCOUNT_ID>:gateway/<GATEWAY_ID>"
}
]
}
ローカルのAWSプロファイルに紐づくIAMユーザーやロールにこのポリシーをアタッチします。<GATEWAY_ID>はTerraform出力のgateway_idで確認できます。Resourceをワイルドカードにすることも可能ですが、セキュリティの観点から特定のGateway ARNに絞ることが推奨されています。
Claude Codeからの接続設定
MCP Proxy for AWSとは
MCP Proxy for AWSはAWS公式のOSSツールです。Claude CodeなどのMCPクライアントはSigV4署名をネイティブにサポートしていません。このプロキシがローカルのAWS認証情報(~/.aws/credentialsや環境変数)を使って、MCPリクエストにSigV4署名を自動付与してGatewayに転送してくれます。
Claude Codeの.mcp.jsonにそのまま設定できます。
.mcp.jsonの設定
プロジェクトルートに.mcp.jsonを作成します。
{
"mcpServers": {
"agentcore-gateway": {
"command": "uvx",
"args": [
"mcp-proxy-for-aws@latest",
"https://<GATEWAY_ID>.gateway.bedrock-agentcore.us-east-1.amazonaws.com/mcp",
"--service", "bedrock-agentcore",
"--region", "us-east-1"
]
}
}
}
<GATEWAY_ID>はTerraform出力のgateway_idの値に置き換えてください。--service bedrock-agentcoreはSigV4署名のサービス名、--regionは署名対象のリージョンです。
Claude Codeから直接追加する場合は以下のコマンドでもOKです。
claude mcp add --transport stdio agentcore-gateway -- \
uvx mcp-proxy-for-aws@latest \
"https://<GATEWAY_ID>.gateway.bedrock-agentcore.us-east-1.amazonaws.com/mcp" \
--service bedrock-agentcore \
--region us-east-1
動作確認
Claude Codeを起動すると、mcp-proxy-for-awsがstdioプロセスとして立ち上がり、GatewayへのSigV4署名付き接続が確立されます。MCP Serverのツールが自動的に読み込まれます。
まずは接続できているか確認するために/mcp を実行します。
MCP Serverへの接続が確立されると、connectedと表示されます。

ツール一覧を確認すると、Runtime上の3つのツールが認識されていることがわかります。

実際にツールを呼び出してみます。「足し算ツールを使って、足し算をして、3123 + 31341234」と入力すると、Claude Codeがadd_numbersツールを呼び出します。

結果が返ってきました!

Claude Codeから直接、AgentCore Gateway経由でRuntime上のMCPツールを呼び出せました。お手軽でしたね・・・!
おわりに
AgentCore GatewayのOutbound IAM認証対応とMCP Proxy for AWSを組み合わせたIAM認証構成を試してみました!
社内ツールやAWSアカウント内部での利用など、IAM認証で統一できるユースケースにはいいなと思いましたし、Gateway経由でRuntimeにデプロイしたMCP Server呼び出すの面倒だな・・・と思っていたのでいいアップデートかと思います!
Cognitoを間に入れたくないなと思い、今までRuntimeにMCP ServerをデプロイしてGatewayに紐づけるのを敬遠していますがこれからは積極的に扱っていきたいです。
本記事が少しでも参考になりましたら幸いです。最後までご覧いただきありがとうございました!









