記事公開日
Claude apps gateway経由のBedrockでもAgentCoreのウェブ検索は使える?【Claude × Bedrock 検証 続編】

この記事のポイント
公式ドキュメントでは、Claude apps gateway経由ではサーバーサイドのWeb検索が利用できないとされています。前回構築したAmazon Bedrock AgentCore Gatewayのウェブ検索ツールを、Claude apps gatewayから配布するMCPサーバーとして登録し、ゲートウェイ経由のClaudeでWeb検索できるかを検証しました。
- gateway.yamlに1回書くだけで全員に配布:
管理者がmanagedMcpServersにAgentCore GatewayのMCPエンドポイントを書けば、ユーザーはコネクタを追加する操作が不要です。 - Coworkで出典付きのWeb検索を確認:
Coworkで質問すると、AgentCoreのコネクタを通した検索結果をもとに、出典付きで回答が返りました。Codeタブでも検索できました。 - 強制ガードレールに注意:
アカウント全体で強制されるGuardrailsがある場合、ゲートウェイがBedrockを呼ぶロールにbedrock:ApplyGuardrailの許可が必要です。
▼ 無料ダウンロード資料
Claude 導入チェックリスト(情報システム・セキュリティ部門向け)
プラン選定・監査ログ・SSO・テナント制限・コスト管理・運用ポリシーまで、Claude / Claude Code を組織へ安全に導入するための確認項目を6カテゴリで整理。導入プロジェクトの進捗管理・監査証跡としてそのままご活用いただけます。
はじめに
こんにちは。DXソリューション営業本部の松榮です。
前回の記事では、Amazon Bedrock経由のClaudeでは公式のWeb検索が使えないことを公式ドキュメントで確認したうえで、Amazon Bedrock AgentCore Gatewayにウェブ検索ツールのコネクターを追加し、MCPサーバーとしてClaude Desktopに登録することで、Web検索ができることを検証しました。
今回の検証でも、前回の記事で作成したAgentCore Gatewayを使います。Gatewayの作成手順や、ウェブ検索ツールのターゲットの設定は、この記事では説明しませんので、先に前回の記事を参照してください。
前回はClaudeからBedrockへ直接接続する構成でした。企業で導入する場合は、ClaudeとBedrockの間にゲートウェイを置いて、SSOでのサインイン、モデルのアクセス制御、利用状況の収集を一元管理したい、という要望もよく挙がります。そのための仕組みが「Claude apps gateway」です。
Claude apps gatewayは、自社で運用するサービスで、ClaudeのクライアントとBedrockなどのモデル提供元の間に置きます。開発者は、APIキーやクラウドの認証情報を持たずに、社内のIdPでサインインして使えます。ゲートウェイがモデル提供元への認証情報を持ち、IdPのグループごとにモデルのアクセス制御や管理設定を行い、利用状況を自社の監視基盤に送ります。
一方で、公式ドキュメントの機能表では、Claude apps gateway経由の場合、サーバーサイドのWeb検索は「Not available(利用できない)」とされています。前回確認したBedrockの制約に加えて、ゲートウェイを挟んだ場合にも、同じ制約があるということです。
参照:Claude apps gateway - Claude Code Docs
そこで本記事では、Claude apps gatewayを経由した場合でも、前回構築したAgentCoreのウェブ検索ツールが使えるのかを検証します。確認するのは、次の2点です。
- Claude apps gateway経由のClaudeに、AgentCore Gatewayのウェブ検索ツールを、MCPサーバーとして追加できるか
- 追加したツールで、実際にWeb検索できるか
検証環境
今回の検証で使った、Claude apps gatewayの構成は次のとおりです。ゲートウェイの構築手順は、この記事では説明しません。
- ゲートウェイの実行環境:EC2で動かしました。
- サインイン:IdPには、Amazon Cognitoのユーザープールを使いました。AgentCore Gatewayの認証に使うユーザープールとは、別のものです。
- 推論先:東京リージョンのAmazon Bedrockです。モデルは、Claude Sonnet 4.6を指定しました。ゲートウェイは、EC2のインスタンスロールでBedrockを呼びます。
- AgentCore Gateway:前回の記事で作成したものを、そのまま使いました。
配布する設定(gateway.yaml)
Claude apps gatewayでは、ユーザーに配る設定を、ゲートウェイの設定ファイル gateway.yaml の managed に書きます。今回は、AgentCore GatewayをMCPサーバーとして登録する設定を、ここに書いて配布しました。実際に使った設定は、次のとおりです。IDやURLは伏せています。
managed:
policies:
- match: {}
cli:
availableModels: [jp.anthropic.claude-sonnet-4-6]
enforceAvailableModels: true
desktop:
disabledBuiltinTools: ["WebSearch"] # 組み込みの検索を止める
coworkEgressAllowedHosts: ["*"]
managedMcpServers:
- name: agentcore-web-search
transport: http
url: "https://<gateway-id>.gateway.bedrock-agentcore.ap-northeast-1.amazonaws.com/mcp"
oauth:
clientId: <client-id> # 前回作成した、Claude Desktop用のCognitoクライアントのID
toolPolicy:
"<target-name>___WebSearch": allow
主な設定の意味は、次のとおりです。
| 設定 | 内容 |
|---|---|
match: {} |
全ユーザーに適用する基本の層です。今回はIdPのグループを作らなかったため、グループ別の層ではなく、この層に書きました。グループを作らない場合、グループ別の層はユーザーに適用されません。 |
disabledBuiltinTools: ["WebSearch"] |
Claudeに組み込まれたWeb検索を止めます。検索ができたとき、AgentCoreのツールが使われたと言い切れるようにするためです。 |
managedMcpServers |
配布するMCPサーバーです。url にAgentCore GatewayのMCPエンドポイントを指定します。 |
oauth.clientId |
前回の記事で作成した、Claude Desktop用のCognitoクライアントのIDです。シークレットなしのクライアントなので、clientId だけで足ります。 |
toolPolicy |
ツールごとの許可を指定します。allow にすると、CoworkとChatでは事前承認になります。Codeタブでは事前承認にならず、承認ダイアログが出ます。 |
設定するときの注意点が、2つあります。
oauth.clientIdには、前回作成したClaude Desktop用のクライアントIDを入れます。gateway.yamlには、Claude apps gatewayへのサインイン用のクライアントID(oidc.client_id)も出てきますが、これは別のIDです。取り違えると、Cognitoがinvalid_requestのエラー画面を返します。bootstrapUrlはgateway.yamlには書きません。Claude Desktopが起動時にどのゲートウェイへ接続するかを示す設定で、Desktopの端末側(Windowsではレジストリ)に書きます。
Claude Desktopでの操作
gateway.yaml を反映したClaude apps gatewayを用意したあとの、ユーザー側の操作を見ていきます。
1. 設定の反映を待つ
gateway.yaml を書き換えてゲートウェイを再起動すると、設定が反映されるまでに数分かかりました。反映後に、Claude Desktopを再起動します。Claude Desktopは、起動時に bootstrapUrl のゲートウェイにサインインして、配布された設定を受け取ります。
2. コネクタを確認する
Claude Desktopの「設定」を開き、「コネクタ」を選びます。gateway.yaml の managedMcpServers に書いた名前のコネクタ「agentcore-web-search」が、一覧に表示されています。
3. Coworkで質問する
Coworkで、次のように質問します。
Web検索して、AWS Bedrock AgentCore の Web Search Tool の概要を教えて
回答の途中に、「Web Search」という手順が表示されました。手順を開くと、AgentCoreに送ったリクエスト(Request)と、返ってきた検索結果(Response)を確認できます。右側の「コンテキスト」の「コネクタ」にも、agentcore-web-searchが表示されています。
なお、今回は組み込みの WebSearch を止める設定にしています。ただし、AgentCoreのコネクタのツール名も「Web Search」と表示されるため、画面の見た目だけでは、どちらが使われたのか区別できません。どちらの検索かを確かめるときは、手順を開いて、Request・Responseの内容を見る必要があります。
検索語は、質問が日本語でも、モデルが英語で作りました(この例では「AWS Bedrock AgentCore Web Search Tool overview 2025 2026」)。
4. 回答と出典を確認する
検索結果をもとにした回答の末尾には、出典のリンクが付きました。
AWSの公式ブログや開発者ガイドなど、AgentCoreのウェブ検索に関するページが、出典として挙がっています。
承認ダイアログは、Coworkでは出ませんでした。toolPolicy を allow にしているため、事前承認になっているからです。一方、Codeタブでも検索はできましたが、こちらは allow でも事前承認にならず、承認ダイアログが出ます。
検証中に注意が必要だった点:Guardrails
検証中に、Claude apps gateway経由でチャットを送ると、次のエラーになることがありました。
「Failed to authenticate. API Error: 403 upstream denied the request — check the gateway operator」と表示され、その下に「接続は正常ですが、プロバイダーがテストリクエストを拒否しました。多くの場合、モデルアクセスまたはクォータの問題であり、管理者が解決できます」と出ます。文言だけを見ると、モデルのアクセス権やクォータの問題に見えます。
原因を切り分ける
そこで、Claude apps gatewayを動かしているEC2から、ゲートウェイと同じインスタンスロールのまま、Bedrockを直接呼んでみました。すると、次のエラーが返りました。
not authorized to perform: bedrock:ApplyGuardrail on resource: ...guardrail/<guardrail-id>
使っているAWSアカウントには、Bedrockへのすべての呼び出しにかかる強制ガードレール(Guardrails)が設定されていました。強制されたガードレールを通すには、呼び出す側が、そのガードレールに対する bedrock:ApplyGuardrail を許可されている必要があります。ゲートウェイのインスタンスロールには、この許可がなかったため、Bedrockに拒否されていました。
Claude apps gateway経由でのGuardrailsの動作や設定方法については、以前の記事を参照してください。
なぜ今回だけ起きたのか
前回の記事のBedrockへの直接接続では、Claude Desktopにサインインした自分のAWS権限でBedrockを呼んでいたため、この問題は起きませんでした。Claude apps gateway経由では、ゲートウェイがインスタンスロールでBedrockを呼びます。呼び出す主体が変わると、必要な権限も変わります。
対処
ゲートウェイのインスタンスロールに、対象のガードレールを指定した bedrock:ApplyGuardrail の許可を追加しました。ガードレール自体はアカウント全体に効く設定なので、変更や無効化はしていません。
気をつけること
- 既存の環境に、組織やアカウント全体で強制されるガードレールがある場合は、Claude apps gatewayがBedrockを呼ぶ主体(ロールなど)に、
bedrock:ApplyGuardrailの許可が必要です。 - この権限が足りないときの症状は、Claude側の認証エラーに見えますが、原因はAWS側のIAMです。
結果
Claude apps gatewayを経由した場合でも、AgentCoreのウェブ検索ツールを使うことができました。冒頭で挙げた2点の結果は、次のとおりです。
| 確認したこと | 結果 |
|---|---|
| Claude apps gateway経由のClaudeに、AgentCore Gatewayのウェブ検索ツールを、MCPサーバーとして追加できるか | 追加できました。gateway.yaml の managedMcpServers に書いて、ユーザーに配布できます。 |
| 追加したツールで、実際にWeb検索できるか | 検索できました。Coworkで質問すると、AgentCoreのコネクタを通した検索結果をもとに、出典付きで回答が返りました。Codeタブでも、検索できることを確認しています。 |
公式ドキュメントでは、Claude apps gateway経由の場合、サーバーサイドのWeb検索は利用できないとされています。しかし、検索ツールを自分で用意してMCPサーバーとして配布すれば、ゲートウェイ経由の環境でも、Web検索を使えるようにできます。
ユーザーは、Claude Desktopでコネクタを追加する操作が不要です。管理者が gateway.yaml に1回書くだけで、全員に同じ設定を配れます。企業での導入では、この点が大きな利点になります。
注意点は、次の3つです。
gateway.yamlに書くoauth.clientIdは、前回作成したClaude Desktop用のクライアントIDです。サインイン用のIDと取り違えると、Cognitoがinvalid_requestを返します。- 画面上の「Web Search」は、AgentCoreのコネクタの表示名で、組み込みの検索と同じ名前に見えます。どちらが使われたかは、手順を開いて確認します。
- Bedrockに、アカウント全体で強制されるガードレールがある場合は、ゲートウェイがBedrockを呼ぶロールに
bedrock:ApplyGuardrailの許可が必要です。足りないと、403 upstream denied the requestになります。
まとめ
前回の記事では、Bedrock経由のClaudeでは公式のWeb検索が使えないものの、AgentCore Gatewayのウェブ検索ツールをMCPサーバーとして登録すれば、Web検索ができることを確認しました。今回は、その構成をClaude apps gatewayを経由する環境に広げて、同じ検索ツールが使えるかを検証しました。結果、使うことができました。
前回と今回の違いは、次のとおりです。
| 前回(Bedrockへ直接接続) | 今回(Claude apps gateway経由) | |
|---|---|---|
| 公式のWeb検索 | 使えない | 使えない(公式ドキュメントの機能表でも、利用できないとされている) |
| 検索ツールの用意 | AgentCore Gatewayにウェブ検索ツールを追加 | 前回と同じAgentCore Gatewayを使用 |
| MCPサーバーの登録 | 利用者が、Claude Desktopの画面で手動で登録 | 管理者が gateway.yaml に書いて、ゲートウェイから配布 |
| Claude Desktop用のCognitoクライアント | 前回、検索ツール用に作成 | 前回作成したものを、配布する設定に指定 |
| 検索の実行 | 承認ダイアログで承認すると実行される | Coworkでは、toolPolicy の設定により事前承認になる |
Claude apps gatewayを導入する環境でWeb検索が必要になった場合は、AgentCoreのウェブ検索ツールをMCPサーバーとして配布する、今回の構成が選択肢になります。AgentCore Gatewayの作成は前回の記事、Claude apps gatewayで配布する設定は今回の記事を参考にしてください。
QESでは、ガバナンス整備・セキュアな利用環境構築・利活用コンサルティング・セキュリティレビューまで、Claude / Claude Code の組織導入を一貫して支援しています。AWS(Amazon Bedrock)経由での提供にも対応しています。支援内容は下記のサービスページ、および無料の「Claude 導入チェックリスト」をご覧いただくか、お問い合わせフォームよりお気軽にご相談ください。
▼ 無料ダウンロード資料
Claude 導入チェックリスト(情報システム・セキュリティ部門向け)
プラン選定・監査ログ・SSO・テナント制限・コスト管理・運用ポリシーまで、Claude / Claude Code を安全に導入するための確認項目を6カテゴリで整理。導入プロジェクトの進捗管理・監査証跡としてそのままご活用いただけます。
※Amazon Web Services、"Powered by Amazon Web Services"ロゴ、およびブログで使用されるその他のAWS商標は、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。
※このブログで参照されている、Anthropic、Claude、Claude Code、Claude Cowork は、Anthropic, PBCの米国およびその他の国における商標または登録商標です。


