[小ネタ]Amazon Bedrock AgentCore Gatewayで認証なしオプションが追加されたので試してみた
こんにちは、スーパーマーケットが大好きなコンサルティング部の神野です。
直近Amazon Bedrock AgentCore Gatewayのコンソールを見ていると、No authorization(認証なし)という選択肢がひょっこり増えていました。

今までRuntime、GatewayどちらもMCP Serverをホストするには認証はIAMかJWTのどちらかが必須で、認証なしは選べませんでした。
なのでパブリックなMCP Serverをホストする際の選択肢にはなり得なかったのですが、今回のアップデートでGatewayが認証なしにも対応できるようになったので嬉しいですね。
本アップデートで自前のMCP Serverを認証なしでパブリックに公開したい場合は、AgentCore Gatewayを使うケースも考えられます。早速やってみます。
準備
事前にMCP Server化するLambda関数を作成してみます。
足し算、掛け算をする簡単な処理を実装してみます。
コンソール上で関数を作成する際は以下を選択します。
一から作成オプションを選択- 関数名:mcp-calculator-function
- ランタイム:Python 3.13
- アーキテクチャ:arm64

その後、以下のコードをコピーしてDeployボタンを選択します。
import json
def lambda_handler(event, context):
"""
AgentCore Gateway から呼び出される計算ツール Lambda 関数
"""
# ツール名を取得(ターゲット名のプレフィックスを除去)
delimiter = "___"
original_tool_name = context.client_context.custom.get('bedrockAgentCoreToolName', '')
if delimiter in original_tool_name:
tool_name = original_tool_name.split(delimiter)[1]
else:
tool_name = original_tool_name
# event には inputSchema で定義したプロパティがそのまま渡される
a = event.get('a', 0)
b = event.get('b', 0)
if tool_name == 'add':
result = a + b
return {
'result': result,
'message': f'{a} + {b} = {result}'
}
elif tool_name == 'multiply':
result = a * b
return {
'result': result,
'message': f'{a} × {b} = {result}'
}
else:
return {
'error': f'Unknown tool: {tool_name}'
}

処理自体は単純な足し算、掛け算を行うツールです。
作成したLambda関数のARNはメモしておきます。
これで準備ができたので今度はGatewayをコンソール上から作成していきます。
Gatewayを作成する
コンソールでGatewayの作成画面を開きます。
ゲートウェイを作成
以下の設定にします。今回は認証なしの挙動を見たいので、No Authorizationを選択します。
- ゲートウェイ名:mcp-calculator-gateway
- Inbound Auth type:No Authorization
- IAM許可:新しいサービスロールを作成して使用

続いて実行するアクション先であるターゲットを指定します。
ターゲット
ターゲット名は任意の名前で構いませんが、lambda-target-sampleとしておきます。
ターゲットタイプはLambda ARNを選択して、先ほど作成したLambda ARNを指定します。
ターゲットスキーマはインラインスキーマを定義を選択して、以下のスキーマ定義をペーストします。
足し算と掛け算のツール利用を定義している形ですね。
[
{
"name": "add",
"description": "2つの数値を足し算します",
"inputSchema": {
"type": "object",
"properties": {
"a": {
"type": "number",
"description": "1つ目の数値"
},
"b": {
"type": "number",
"description": "2つ目の数値"
}
},
"required": ["a", "b"]
}
},
{
"name": "multiply",
"description": "2つの数値を掛け算します",
"inputSchema": {
"type": "object",
"properties": {
"a": {
"type": "number",
"description": "1つ目の数値"
},
"b": {
"type": "number",
"description": "2つ目の数値"
}
},
"required": ["a", "b"]
}
}
]
アウトバウンド認証設定はIAMロールを設定して、ゲートウェイを作成ボタンを選択します。

作成できたら以下の画面に遷移して作成完了です!
ゲートウェイリソース URLをコピーしてClaude Codeで使用します。

接続してテスト
Claude Codeに今回使用するMCP Serverを追加します。追加する際には、作成したGatewayのURLを指定します。
claude mcp add --transport http calculator https://xxx.us-west-2.amazonaws.com/mcp
指定した後、claudeを起動して以下のプロンプトで質問しています。
1213 * 12331 の結果をcalculator MCP を使って計算して
すると実行結果は以下のようになりました。

指定したターゲットのLambda関数の実行結果が返却されましたね!
また、何ができるのかと聞くと以下のように返却されたので、きちんとGatewayに紐づくツール情報も取得できていますね。

特に難しい手順もなくRuntimeや既存のLambda関数を複数ターゲットにしつつパブリックに公開できました。
注意点・補足
注意
コンソール上にもあったように、あくまでセキュリティ対策を実施した上でパブリックな場所にホストし、開発・テスト目的では使用しないでと注意があるので気をつけましょう。
Do not use No Authorization gateways for testing or development purposes. No Authorization gateways should only be used for production gateways that you intend to make public after you have implemented security best practices .
ちなみにベストプラクティスには以下を満たして欲しいと記載があります。
翻訳して記載します。
-
bedrock-agentcore:GatewayAuthorizerType条件キーを使用して、組織内でのauthorizerType=NONEを持つゲートウェイの作成に対するアクセスを選択的に許可/拒否してください。 -
テストの便宜のために認証なしのゲートウェイを使用しないでください。認証なしのゲートウェイは、公開を予定しているゲートウェイで使用し、独自のカスタムスロットリングルールとチェックを実装して、公開ゲートウェイが認証されていないユーザーを処理できることを確認してください。
-
機密情報を含む応答を返す可能性のあるターゲットに対して、認証なしのゲートウェイを使用しないでください。ターゲットには独自の認証設定が構成されていますが、ゲートウェイに別のセキュリティ層を追加するのが最善です。
ここを読むと自分なりに順に解釈すると、以下のように理解しました。
- 認証なしのGatewayを作成可能なIAM権限は絞る必要があるよ、限られた人しか作れないようにしてね。
- テストのためにGatewayは作ってはダメだよ、認証なしでも独自のカスタムスロットリングルールやチェックは実装して認証なしのユーザーの対応を考えないとダメだよ。
- 機微な情報を扱う際は認証なしのゲートウェイは使ってはダメだよ。ターゲット自体への権限はIAMなどで制御することは可能だけど、そもそもゲートウェイに認証を設定した方がいいよね
おわりに
Amazon Bedrock AgentCore Gatewayが認証なしのオプションが提供されていたので早速試してみました!!
RuntimeなどでホストしているリモートMCP Serverや既存のLambda関数をMCP Serverとして活用してパブリックに公開したい場合はGatewayをハブとして使用するのが良さそうですね。
また、パブリックに公開する場合はセキュリティは開発・テスト用にノーガードにするのではなく、本番に向けてベストプラクティスを遵守して実装したいところです。
本記事が少しでも参考になったら幸いです!最後までご覧いただきありがとうございましたー!!








