Amazon Bedrock AgentCore Gateway から API Gateway への IAM アウトバウンド認証および特定リソースへのアクセス制御を設定してみた

Amazon Bedrock AgentCore Gateway から API Gateway への IAM アウトバウンド認証および特定リソースへのアクセス制御を設定してみた

2026.01.20

はじめに

Amazon Bedrock AgentCore Gateway は、エージェントがツールを利用するための統一インターフェースを提供するマネージドサービスです。

Amazon Bedrock AgentCore Gateway のターゲットとして Amazon API Gateway を指定する場合、現状ではパブリックな REST API のみがサポートされています。

Only public REST APIs are supported.
https://docs.aws.amazon.com/apigateway/latest/developerguide/mcp-server.html#w2aac15c11c11c34c11b7

そのため、API Gateway がインターネットに公開された状態となり、そのままでは様々なクライアントからアクセスが可能になってしまいます。これを防ぐために、特定の Bedrock AgentCore Gateway からのアクセスのみを許可するよう制限したいところです。

また、Bedrock AgentCore Gateway 側からも、任意の API にアクセスさせるのではなく、特定の API Gateway のみを呼び出せるように権限を絞りたいです。

そこで本記事では、以下の構成を試してみます。

  1. Bedrock AgentCore Gateway 側: IAM ロールを使用したアウトバウンド認証を設定し、特定の API Gateway のみを呼び出せるようにする。
  2. API Gateway 側: リソースポリシーを設定し、特定の Bedrock AgentCore Gateway からのアクセスのみを許可する(他のアクセスは拒否する)。

AWS 公式ドキュメントの手順を参考に、設定を行っていきます。

https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-target-api-gateway.html#gateway-target-api-gateway-outbound

前提条件

前回、Amazon API Gateway → Step Functions→ DynamoDBという構成で、データの新規登録や取得処理を実装しましたので、こちらのAPI Gatewayを利用します。

https://dev.classmethod.jp/articles/amazon-apigateway-stepfunctions-dynamodb-crud/

Bedrock AgentCore Gatewayの設定

まずは、Bedrock AgentCore Gateway 側のリソースを作成します。
手順としては、先に「API Gateway を呼び出す権限を持つ IAM ロール」を作成し、その後に Gateway 本体を作成してターゲット(API Gateway)を登録します。

IAMロール作成

AWS CloudShellを開き、以下を実行しIAMロールを作成します。API GatewayのARNは、各自変更ください。このIAMロールは、特定のAPI Gatewayしか呼び出す権限を持たないBedrock AgentCore Gateway用のIAMロールです。

ステージ名を含めたAPI GatewayのARNは各自変更ください。

# 1. 信頼ポリシー (Trust Policy) の作成
# Bedrock AgentCore がこのロールを引き受けることを許可します
cat <<EOF > trust-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "bedrock-agentcore.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF

# 2. ロールの作成
aws iam create-role \
    --role-name BedrockGatewayAccessRole \
    --assume-role-policy-document file://trust-policy.json

# 3. 許可ポリシー (Permission Policy) の作成
# API Gateway を Invoke する権限を定義します
cat <<EOF > permission-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": "arn:aws:execute-api:ap-northeast-1:ACCOUNT_ID:API_ID/STAGE_NAME/*/*"
    }
  ]
}
EOF

# 4. ロールへのポリシー付与 (インラインポリシーとして埋め込み)
aws iam put-role-policy \
    --role-name BedrockGatewayAccessRole \
    --policy-name APIGatewayInvokePolicy \
    --policy-document file://permission-policy.json

Bedrock AgentCore Gatewayの作成

Bedrock AgentCore Gatewayを作成します。

今回利用する API Gateway はエンドポイントが2つだけであり(データの新規登録と取得)、エージェントがツールを選択するのに複雑な検索機能は不要なため、Enable semantic searchは無効化のままにします。本番環境ではないので、Exception level debugは有効化します。

cm-hirai-screenshot 2026-01-13 15.34.31

インバウンド認証設定は、適切なものを選択ください。

IAMロールは、先程作成したロールを選択します。

cm-hirai-screenshot 2026-01-15 14.12.32
ターゲット名を記載し、ターゲットタイプは、API Gatewayにし、作成済みのAPI Gateway名とステージを指定します。

cm-hirai-screenshot 2026-01-13 15.41.22

指定すると、Name is required for operations without an IDが表示されます。API Gateway側で「オペレーション名 (Operation ID)」が設定されていない(または読み込めていない)場合に表示されます。

この画面で 「Name override (名前のオーバーライド)」 を入力することで、AgentがこのAPIをツールとして認識できるようになります。

Tool Overrides
By default, the MCP tool name is taken from the operationId for each path and method combination that matches your filters. If there isn't an operationId for a filter match, you'll need a corresponding tool override that provides a name. If both the operationId and the override name are missing, target creation and updates will fail validation.
ツールのオーバーライド
デフォルトでは、MCPツール名はフィルタに一致する各パスとメソッドの組み合わせの operationId から取得されます。フィルタに一致するものに対して operationId がない場合は、名前を提供する対応するツールのオーバーライドが必要になります。 operationId とオーバーライド名の両方が欠落している場合、ターゲットの作成と更新は検証に失敗します。
https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-target-api-gateway.html

以下の通りに入力します。

  1. /reservations - GET の行
  • Operation ID: - (変更不可)
  • Name override: CheckReservation (必須)
  • Description override: 電話番号を指定し、レストラン予約状況を確認します。 (推奨)
  1. /reservations - POST の行
  • Operation ID: - (変更不可)
  • Name override: CreateReservation (必須)
  • Description override: レストランの新規予約を行います。電話番号、予約日時、名前、人数が必要です。 (推奨)

cm-hirai-screenshot 2026-01-13 16.01.54

続いて、Bedrock AgentCore Gateway が API Gateway を呼び出す際の認証方法(アウトバウンド認証)を設定します。

ここでは、冒頭で作成した IAM ロールを使ってリクエストに署名を行う IAM 認証 を採用します。設定項目の「アウトバウンド認証設定」にて、IAMを指定してください。

IAM ベースのアウトバウンド認証 – Bedrock AgentCore Gatewayサービスロールを使用して、署名バージョン 4 (SigV4 または SigV4a) でゲートウェイターゲットへのアクセスを認証します。API Gateway API で IAM 認証が有効になっている必要があります。
https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-outbound-auth.html

作成後ゲートウェイIDをコピーしておきます。
cm-hirai-screenshot 2026-01-13 16.33.28

補足:API Gateway側でOperation IDを設定

Bedrock AgentCore Gatewayのターゲット設定時ではなく、API Gateway側での設定にて、Operation Nameを設定すると、Name overrideの設定は不要になります。

API Gatewayのメソッドリクエストを編集します。

cm-hirai-screenshot 2026-01-13 16.20.37
オペレーション名 - オプションtestと設定します。
cm-hirai-screenshot 2026-01-13 16.20.49

Bedrock AgentCore Gatewayのターゲット設定時に、Operation IDにtestが表示されました。
cm-hirai-screenshot 2026-01-13 16.21.23

API Gateway の設定

Bedrock AgentCore Gateway からのリクエストは、先ほど設定した IAM ロールを使用して署名(SigV4)されて送信されます。これを受け入れ、かつセキュアに制限するために、API Gateway 側で以下の2つの設定を行います。

  1. メソッドの認証設定 (AWS_IAM): リクエストの署名を検証し、IAM 認証を必須にします。
  2. リソースポリシーの設定: アクセス元を特定の Bedrock AgentCore Gateway に限定します。

1. メソッドの認証設定 (AWS_IAM)

まず、API Gateway の各メソッドが IAM 署名付きリクエストを受け入れるように設定を変更します。

そのため、以下の手順で認証を有効化します。

  1. 対象メソッドの「メソッドリクエスト」設定を開きます。
    cm-hirai-screenshot 2026-01-13 16.20.37

  2. 認証 の項目を NONE から AWS_IAM に変更し、チェックマークをクリックして保存します。
    cm-hirai-screenshot 2026-01-13 16.20.49

  3. 他のメソッドについても同様に AWS_IAM に変更します。

AWS_IAMに変更する理由として、後述するリソースポリシーで「特定の IAM プリンシパル(Bedrock サービス)」からのアクセスを許可する設定を行いますが、メソッドの認証設定が NONE のままだと、すべてのリクエストが 「匿名ユーザー (anonymous)」 として扱われてしまいます。
匿名ユーザーは IAM プリンシパルとして認識されないため、リソースポリシーの許可条件に一致せず、アクセスが拒否されてしまいます。

API のすべてのメソッドに AWS_IAM 認可を使用する必要があります。使用しない場合、API は前のエラーメッセージ (User: anonymous is not authorized...) を返します。
AWS 公式ドキュメント: リソースポリシーのトラブルシューティング

2. API Gateway リソースポリシーの設定とデプロイ

次に、API Gateway 側で「特定の Bedrock Gateway からのアクセスのみ許可する」設定を行います。
IAM 認証だけでは「有効な IAM 権限を持つ誰か」であればアクセスできてしまう可能性があるため、リソースポリシーを使って 「Bedrock サービスからのアクセス」かつ「特定の Gateway ARN からのアクセス」 に絞り込みます。

API Gateway コンソールに戻り、左メニューから リソースポリシー を選択します。
cm-hirai-screenshot 2026-01-13 16.37.21

以下のポリシーを入力します。YOUR_ACCOUNT_IDAPI_GATEWAY_ID は各自の環境に合わせて変更してください。

  • Resource: API Gateway の ARN (この API 内の 全ステージ・全メソッド・全パス を対象とする場合、末尾は /*/*/* とします)
  • aws:SourceArn: 手順3で作成した Bedrock Gateway の ARN に書き換えます。
{
    "Version": "2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
        "Service": "bedrock-agentcore.amazonaws.com"
        },
        "Action": "execute-api:Invoke",
        "Resource": "arn:aws:execute-api:ap-northeast-1:YOUR_ACCOUNT_ID:API_GATEWAY_ID/*/*/*",
        "Condition": {
        "ArnEquals": {
            "aws:SourceArn": "arn:aws:bedrock-agentcore:ap-northeast-1:YOUR_ACCOUNT_ID:gateway/gateway-xxxxxxxx"
        }
        }
    }
    ]
}

通常、IAMロールを使って署名を行う場合、Principal にはその IAM ロールを指定しますが、Bedrock AgentCore Gateway の仕様上、ここではサービスプリンシパル (bedrock-agentcore.amazonaws.com) を指定します。これにより、Bedrock サービスからのアクセスであることを明示的に許可しつつ、Condition 句で特定の Gateway ID に絞り込むことができます。

最後に、リソースポリシーや認証設定の変更を反映させるため、「API のデプロイ」 を実行します。

動作確認

これで設定は完了です。

  • Bedrock AgentCore Gateway は、IAM ロールを使って署名付きリクエスト (SigV4) を API Gateway に送信します。
  • API Gateway は、以下の2段階で検証を行います。
    1. IAM 認証: 送信元が正しい IAM 署名を持っているか(Bedrock のロールか)。
    2. リソースポリシー: 呼び出し元のサービスプリンシパルが bedrock-agentcore.amazonaws.com であり、かつ SourceArn が指定された Gateway ID と一致するか。

これにより、指定した Bedrock Gateway 以外からのアクセスを拒否しつつ、サーバーレスな予約システムを AI エージェントから利用できるようになります。

今回は紹介しませんが、実際に、Amazon Connect AIエージェントから呼び出すことができました。

参考

https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-create-console.html

この記事をシェアする

FacebookHatena blogX

関連記事