2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bedrock AgentCore GatewayをIAM + Streamable HTTPで利用する

Posted at

概要

Bedrock AgentCore Gatewayでは、インバウンド認証(Inbound Auth)にIAMまたはJWTを選択できます。AWS公式のハンズオンではJWT(Cognito)が使われているため、IAMの実装例は多くありません。

というわけで、この記事ではローカルのエージェントからAgentCore Gatewayへの接続をIAMで試してみます。

image.png

なお、Inbound Authを含むGatewayの概念は以下の記事でわかりやすく解説されているので、こちらを参考にいただければと思います。

前提・準備

環境

  • macOS 14.5
  • Python 3.11.9
  • mcp 1.19.0
  • strands-agents 1.13.0

AgentCore Gateway の作成

AgentCore Gateway のコンソールからGatewayを作成します。

  • インバウンド認証設定は『IAM許可』を選択
  • ターゲットには、AWS Knowledge MCP Server を設定
    • MCPエンドポイントにはhttps://knowledge-mcp.global.api.awsを設定
    • アウトバウンド認証は『No authorization』
  • 以外の設定はデフォルト
画面のスクリーンショットはこちら

image.png

image.png

ベースになるコード

リモートMCPとして AWS Knowledge MCP Server を利用するエージェントアプリケーションです。このリモートMCPを AgentCore Gateway 経由で利用するように修正します。

Strands Agents の公式ドキュメントを参考にしましたが、AWSの認証はログインセッションを利用するようにしています。

ライブラリのインストール
pip install mcp strands-agents
import boto3
from mcp.client.streamable_http import streamablehttp_client
from strands import Agent
from strands.models import BedrockModel
from strands.tools.mcp.mcp_client import MCPClient

# Knowledge MCP エンドポイント
KNOWLEDGE_MCP_ENDPOINT = "https://knowledge-mcp.global.api.aws"

# Boto3 セッション
session = boto3.Session(
    region_name="ap-northeast-1",
    profile_name="xxxx",  # プロファイル名
)

bedrock_model = BedrockModel(
    model_id="jp.anthropic.claude-sonnet-4-5-20250929-v1:0",
    boto_session=session,
)

streamable_http_mcp_client = MCPClient(
    lambda: streamablehttp_client(KNOWLEDGE_MCP_ENDPOINT)
)
# Create an agent with MCP tools
with streamable_http_mcp_client:
    tools = streamable_http_mcp_client.list_tools_sync()
    agent = Agent(
        model=bedrock_model,
        system_prompt="あなたは優秀なアシスタントです。必要に応じてツールを使ってください。",
        tools=tools,
    )
    agent("AgentCore Gateway が提供されているリージョンを調べて")
このエージェントを実行した結果はこちら
エージェントの実行結果
AgentCore Gatewayの提供リージョンを調べます。まず、このサービスに関する情報を検索してみます。
Tool #1: aws___search_documentation
AgentCore Gatewayについて分かりました。これはAmazon Bedrock AgentCore Gatewayというサービスです。それでは、このサービスが利用可能なAWSリージョンを確認してみます。
Tool #2: aws___list_regions
それでは、主要なリージョンでAgentCore Gatewayの利用可能性を確認します。まず、ドキュメントでリージョン情報を確認してみます。
Tool #3: aws___read_documentation
このページにはリージョン情報がないようです。別のページを確認してみます。
Tool #4: aws___search_documentation
完璧です!リージョン情報が見つかりました。詳細を確認します。
Tool #5: aws___read_documentation

Tool #6: aws___read_documentation
完璧です!Amazon Bedrock AgentCore Gateway が提供されているリージョンの情報を取得できました。まとめます。

## Amazon Bedrock AgentCore Gateway が提供されているリージョン

Amazon Bedrock AgentCore Gateway は、以下の **9つのAWSリージョン** で利用可能です:

### 米国リージョン
1. **US East (N. Virginia)** - us-east-1
2. **US East (Ohio)** - us-east-2
3. **US West (Oregon)** - us-west-2

### ヨーロッパリージョン
4. **Europe (Frankfurt)** - eu-central-1
5. **Europe (Ireland)** - eu-west-1

### アジア太平洋リージョン
6. **Asia Pacific (Tokyo)** - ap-northeast-1
7. **Asia Pacific (Mumbai)** - ap-south-1
8. **Asia Pacific (Singapore)** - ap-southeast-1
9. **Asia Pacific (Sydney)** - ap-southeast-2

### エンドポイント形式
各リージョンのGatewayエンドポイントは以下の形式になります:

{gatewayId}.gateway.bedrock-agentcore.{region}.amazonaws.com


### 補足情報
- Amazon Bedrock AgentCore Gateway は、2025年9月16日まで無料プレビュー期間中です
- 2025年9月17日から課金が開始されます
- このサービスは現在プレビュー段階にあります

日本のお客様は **東京リージョン (ap-northeast-1)** でご利用いただけます。

※ Qiita のコードブロックが崩れるため、出力結果を一部加工しています。

AgentCore Gateway をIAMで試してみる

AgentCore GatewayをIAMで利用するには、AWSSignature Version 4 (SigV4) により署名されたリクエストを送る必要があります。
また、リモートMCPを Streamable HTTP で利用したい場合、MCP ライブラリが提供する streamablehttp_client を使うのが一般的です。 ただし、この streamablehttp_client をそのまま使うだけでは、SigV4に対応したリクエストを送ることができません。

そこで、awslabs で公開されている以下のリポジトリを利用します。このリポジトリに含まれている streamablehttp_client_with_sigv4 を使うことで、SigV4に対応した Streamable HTTP のリクエストが可能となります。

ライブラリのインストール
pip install run-mcp-servers-with-aws-lambda
import boto3
from botocore.credentials import Credentials
from mcp_lambda.client.streamable_http_sigv4 import streamablehttp_client_with_sigv4
from strands import Agent
from strands.models import BedrockModel
from strands.tools.mcp import MCPClient

# AgentCore Gateway エンドポイント(ゲートウェイリソース URL)
AGENTCORE_ENDPOINT = "https://xxxx.gateway.bedrock-agentcore.ap-northeast-1.amazonaws.com/mcp"

# Boto3 セッション
session = boto3.Session(
    region_name="ap-northeast-1",
    profile_name="xxxx",  # プロファイル名
)

bedrock_model = BedrockModel(
    model_id="jp.anthropic.claude-sonnet-4-5-20250929-v1:0",
    boto_session=session,
)

# 認証情報をセッションから取得する関数
def get_credentials_sync():
    creds = session.get_credentials()

    return Credentials(
        access_key=creds.access_key, secret_key=creds.secret_key, token=creds.token
    )


# MCP クライアント(SigV4 認証付き)
streamable_http_mcp_client_with_sigv4 = MCPClient(
    lambda: streamablehttp_client_with_sigv4(
        url=AGENTCORE_ENDPOINT,
        credentials=get_credentials_sync(),
        service="bedrock-agentcore",
    )
)

with streamable_http_mcp_client_with_sigv4:
    agent = Agent(
        model=bedrock_model,
        system_prompt="あなたは優秀なアシスタントです。必要に応じてツールを使ってください。",
        tools=streamable_http_mcp_client_with_sigv4.list_tools_sync(),
    )
    agent("AgentCore Gateway が提供されているリージョンを調べて")
エージェントの実行結果
AgentCore Gatewayが提供されているリージョンを調べます。まず、どのAWSリージョンが存在するかを確認し、その後いくつかの主要なリージョンでAgentCore Gatewayの利用可能性をチェックします。
Tool #1: aws-knowledge-mcp___aws___list_regions

Tool #2: aws-knowledge-mcp___aws___search_documentation
ドキュメントから、AgentCore GatewayはAmazon Bedrockのサービスの一部であることがわかりました。次に、主要なリージョンでBedrockのAgentCore関連のAPIの利用可能性を確認します。
Tool #3: aws-knowledge-mcp___aws___get_regional_availability

Tool #4: aws-knowledge-mcp___aws___get_regional_availability

Tool #5: aws-knowledge-mcp___aws___get_regional_availability

Tool #6: aws-knowledge-mcp___aws___get_regional_availability

Tool #7: aws-knowledge-mcp___aws___get_regional_availability
正確なサービス名を確認するため、ドキュメントをもう少し詳しく読んでみます。
Tool #8: aws-knowledge-mcp___aws___read_documentation
リージョンの情報を確認するため、ドキュメントをさらに調べます。
Tool #9: aws-knowledge-mcp___aws___search_documentation
素晴らしい情報が見つかりました!詳細を確認するために、リージョン情報のドキュメントを読みます。
Tool #10: aws-knowledge-mcp___aws___read_documentation

Tool #11: aws-knowledge-mcp___aws___read_documentation
完璧です!Amazon Bedrock AgentCore Gatewayが提供されているリージョンの情報を取得できました。

## Amazon Bedrock AgentCore Gateway が提供されているリージョン

Amazon Bedrock AgentCore Gateway は、以下の **9つのAWSリージョン** で利用可能です:

### 米国リージョン
- **US East (N. Virginia)** - us-east-1
- **US East (Ohio)** - us-east-2  
- **US West (Oregon)** - us-west-2

### アジアパシフィックリージョン
- **Asia Pacific (Tokyo)** - ap-northeast-1
- **Asia Pacific (Mumbai)** - ap-south-1
- **Asia Pacific (Singapore)** - ap-southeast-1
- **Asia Pacific (Sydney)** - ap-southeast-2

### ヨーロッパリージョン
- **Europe (Ireland)** - eu-west-1
- **Europe (Frankfurt)** - eu-central-1

### エンドポイント形式
各リージョンでのGatewayエンドポイントは以下の形式になります:

{gatewayId}.gateway.bedrock-agentcore.{region}.amazonaws.com


例えば、us-east-1リージョンの場合:

{gatewayId}.gateway.bedrock-agentcore.us-east-1.amazonaws.com


### 補足
- AgentCore Gateway はプレビューサービスです
- すべてのエンドポイントはHTTPSプロトコルを使用します
- 各リージョンには、コントロールプレーンAPIとデータプレーンAPIの両方のエンドポイントが用意されています

※ Qiita のコードブロックが崩れるため、出力結果を一部加工しています。

無事、AgentCore GatewayをIAMで利用できました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?