Amazon Bedrock Web Search の external_web_access が有効化されたので、GPT-5.6 Lunaで試してみた

Amazon Bedrock Web Search の external_web_access が有効化されたので、GPT-5.6 Lunaで試してみた

Amazon Bedrock Web Search の external_web_access が有効化されました。従来のようにAWS公式ドメインの情報を返すだけでなく、天気サイトやOSSの公式ドキュメントといったAWS外のサイトまで検索・取得できるのか、そのときのレスポンス(search / open_page と引用URL)に何が入るのかを bedrock-mantle 経由で確認しました
2026.08.20

はじめに

2026年8月19日、Amazon Bedrock Web Search の外部Webアクセスが利用可能になりました。

https://aws.amazon.com/about-aws/whats-new/2026/08/amazon-bedrock-web-access-web-search/

Web Search 自体は2026年8月4日に発表された機能です。

https://aws.amazon.com/blogs/machine-learning/introducing-web-search-on-amazon-bedrock-for-foundation-model-grounding/

発表直後に試した際は、external_web_access を true にしても取得先は Bedrock 側のWebインデックスやキャッシュに留まっていました。当時の公式ドキュメントで将来のリリースと予告されていた外部Webアクセスが、今回リリースされました。

https://dev.classmethod.jp/articles/bedrock-mantle-gpt56-web-search/

外部Webからの取得には bedrock-websearch:ExternalWebAccess というIAM権限が別途必要です。権限のあるロールとないロールを作成し、external_web_access の値と組み合わせて挙動を確認しました。

bedrock-mantleが必要な理由

Web Search は呼び出すエンドポイントが限定されています。公式ドキュメントには次のとおり記載されています(確認日:2026-08-20)。

Web Search is a server-side tool, so it isn't available when you call the Responses API on the bedrock-runtime endpoint. To use it, call the Responses API on bedrock-mantle.

サーバーサイドツールであるため、同じ Responses API でも bedrock-runtime 経由では呼び出せません。対応モデルは OpenAI GPT-5.6 ファミリー(openai.gpt-5.6-sol / openai.gpt-5.6-terra / openai.gpt-5.6-luna)に加え、openai.gpt-5.4openai.gpt-5.5 です。Claude などの他モデルでは利用できません。

なお GPT-5.6 自体は2026年8月17日のアップデートで bedrock-runtime からも使えるようになりましたが、Web Search は引き続き bedrock-mantle 限定です。

https://dev.classmethod.jp/articles/bedrock-runtime-openai-gpt56/

検証内容

検証環境

項目
リージョン us-east-1
エンドポイント https://bedrock-mantle.us-east-1.api.aws/openai/v1
モデル openai.gpt-5.6-luna
OpenAI SDK 2.40.0

検証用IAMロール(権限ありロール)の権限部分は次のとおりです。

検証用IAMロールの権限(CFn抜粋)
Policies:
  - PolicyName: BedrockWebSearchExternalAccessVerification
    PolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Action: bedrock-mantle:CreateInference
          Resource: !Sub arn:${AWS::Partition}:bedrock-mantle:us-east-1:${AWS::AccountId}:project/default
        - Effect: Allow
          Action: bedrock-mantle:CallWithBearerToken
          Resource: '*'
          Condition:
            StringEquals:
              bedrock-mantle:bearerTokenType: SHORT_TERM
        - Effect: Allow
          Action:
            - bedrock-websearch:InvokeSearch
            - bedrock-websearch:InvokeFetch
            - bedrock-websearch:ExternalWebAccess
          Resource: '*'
          Condition:
            StringEquals:
              aws:RequestedRegion: us-east-1

天気クエリでの比較

東京の現在の気温を尋ねるプロンプトを、external_web_access: true で3回実行しました。表に出しているのは web_search_call の open_page アクションのURLと、最終回答の引用(annotations)のドメインです。

external_web_access: true

実行 open_page 引用ドメイン
1回目 なし wunderground.com, theweathernetwork.com, weather.yahoo.co.jp
2回目 なし wunderground.com
3回目 weathernews.jp weathernews.jp, weather.yahoo.co.jp(2ページ)

3回のうちopen_pageが発生したのは3回目だけで、対象は https://weathernews.jp/onebox/tenki/tokyo/ でした。1回目は引用にwunderground.com(米国)とtheweathernetwork.com(カナダ)が、2回目はwunderground.comのみが出ており、いずれもopen_pageは発生していません。

3回目のレスポンスです。response.model_dump(mode="json") で取得し、reasoning の encrypted_content は省略しています。

external_web_access: true、3回目(weather-retest-run3-true.json抜粋)
{
  "usage": {
    "input_tokens": 23764,
    "input_tokens_details": { "cached_tokens": 2947, "cache_write_tokens": 9659 },
    "output_tokens": 687,
    "output_tokens_details": { "reasoning_tokens": 571 },
    "total_tokens": 24451
  },
  "output": [
    { "type": "reasoning" },
    {
      "type": "web_search_call",
      "action": { "type": "search", "query": "東京 現在の気温 天気", "queries": ["東京 現在の気温 天気"] },
      "status": "completed"
    },
    { "type": "reasoning" },
    {
      "type": "web_search_call",
      "action": { "type": "open_page", "url": "https://weathernews.jp/onebox/tenki/tokyo/" },
      "status": "completed"
    },
    { "type": "reasoning" },
    {
      "type": "web_search_call",
      "action": { "type": "search", "query": "東京 気温 現在 2026年8月20日", "queries": ["東京 気温 現在 2026年8月20日", "site:weathernews.jp 東京 2026年8月20日 現在 気温"] },
      "status": "completed"
    },
    { "type": "reasoning" },
    {
      "type": "web_search_call",
      "action": { "type": "search", "query": "東京 千代田区 現在 32℃ 8月20日 2026 天気", "queries": ["東京 千代田区 現在 32℃ 8月20日 2026 天気", "東京 現在 天気 13時 2026年8月20日"] },
      "status": "completed"
    },
    { "type": "reasoning" },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [
            { "type": "url_citation", "title": "【一番当たる】東京都中央区の最新天気(1時間・今日明日・週間)", "url": "https://weathernews.jp/v/wl/" },
            { "type": "url_citation", "title": "Yahoo!天気・災害", "url": "https://weather.yahoo.co.jp/weather/jp/13/4410.html" },
            { "type": "url_citation", "title": "Yahoo!天気・災害", "url": "https://weather.yahoo.co.jp/weather/jp/13/" }
          ]
        }
      ]
    }
  ]
}

open_page が成功しても、そこで打ち切りにはならず検索が続きます。この回は検索3回とFetch1回で合計24,451トークン。open_pageが発生しなかった1回目(14,492)・2回目(12,708)と比べて倍近くでした。引用に出たのはFetchしたページではなく、同じドメインの別ページ(weathernews.jp/v/wl/)と weather.yahoo.co.jp です。

検索とFetchのパターン

複数のクエリを実行すると、open_page(Fetch)が発生するか、また発生した場合のFetch先ドメインで挙動が分かれました。観測できたのは次の4通りです。

挙動 検索 Fetch(open_page) 引用
検索なし なし なし なし
検索のみ あり なし なし
AWS公式ドメインへFetch あり aws.amazon.com AWS公式ドメインのみ
外部サイトへFetch あり AWS公式以外 Fetch先ドメインとそれ以外が混在

検索が発生しなかったのは、「Kiro CrewをAmazon Linux 2023のEC2で試してみた」と投げた実行です。web_search_call が1件も出ていません。

検索なし(pattern-b-true.json抜粋)
{
  "usage": {
    "input_tokens": 2953,
    "input_tokens_details": { "cached_tokens": 2951, "cache_write_tokens": 0 },
    "output_tokens": 204,
    "output_tokens_details": { "reasoning_tokens": 70 },
    "total_tokens": 3157
  },
  "output": [
    { "type": "reasoning" },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [],
          "text": "おお、Amazon Linux 2023のEC2でKiro Crewを試されたんですね。\n\n動作しましたか?  \nもしよければ、次のような内容を教えてください。(後略)"
        }
      ]
    }
  ]
}

検索のみで終わったのは、「AWS Summit Japan 2026公式ページでセッション資料が公開。オンデマンド視聴も可能になりました」と投げた実行です。検索は1回、open_page はなく、annotations も空でした。

検索のみ(pattern-a-true.json抜粋)
{
  "usage": {
    "input_tokens": 3845,
    "input_tokens_details": { "cached_tokens": 2960, "cache_write_tokens": 3843 },
    "output_tokens": 389,
    "output_tokens_details": { "reasoning_tokens": 330 },
    "total_tokens": 4234
  },
  "output": [
    { "type": "reasoning" },
    {
      "type": "web_search_call",
      "action": { "type": "search", "query": "site:aws.amazon.com/jp/summits/japan-2026 AWS Summit Japan 2026 セッション資料 オンデマンド" },
      "status": "completed"
    },
    { "type": "reasoning" },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [],
          "text": "告知文として自然に整えるなら、以下の表現がおすすめです。\n\n**AWS Summit Japan 2026の公式ページで、セッション資料が公開されました。オンデマンド視聴もご利用いただけます。**"
        }
      ]
    }
  ]
}

Fetchが発生したのは残りの2通りです。「AWS Summit Japan 2026 セッション資料 オンデマンド視聴」と投げた実行では、検索5回のうち1回 open_page が発生し、Fetch先は aws.amazon.com 内のページでした。

検索+AWS公式ドメインへのFetch(pattern-c-false.json抜粋)
{
  "usage": {
    "input_tokens": 31328,
    "input_tokens_details": { "cached_tokens": 2951, "cache_write_tokens": 9449 },
    "output_tokens": 960,
    "output_tokens_details": { "reasoning_tokens": 721 },
    "total_tokens": 32288
  },
  "output": [
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "AWS Summit Japan 2026 セッション資料 オンデマンド視聴" }, "status": "completed" },
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "site:aws.amazon.com/jp/events/summits/japan 2026 オンデマンド セッション" }, "status": "completed" },
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "open_page", "url": "https://aws.amazon.com/jp/events/summits/japan/agenda/" }, "status": "completed" },
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "\"AWS Summit Japan オンデマンド視聴に登録する\"" }, "status": "completed" },
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "site:dev.classmethod.jp \"AWS Summit Japan 2026公式ページでセッション資料が公開\"" }, "status": "completed" },
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "site:pages.awscloud.com AWS Summit Japan 2026 on-demand" }, "status": "completed" },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [
            { "type": "url_citation", "title": "アジェンダ | AWS Summit Japan 2026", "url": "https://aws.amazon.com/jp/events/summits/japan/agenda/" },
            { "type": "url_citation", "title": "AWS Summit Japan 2026", "url": "https://aws.amazon.com/jp/events/summits/japan/" }
          ]
        }
      ]
    }
  ]
}

external_web_access: true で同じクエリを実行した場合も、検索3回・find_in_page 2回・open_page 1回で、Fetch先は https://aws.amazon.com/jp/events/summits/japan/ でした(pattern-c-true.json)。false と同様、AWS公式ドメイン内の Fetch に留まりました。

天気について「東京の現在の気温」と投げた実行では、weathernews.jp のページに open_page が発生しました(「天気クエリでの比較」の3回とは別の実行です)。

検索+外部サイトへのFetch(pattern-d-true.json抜粋、天気クエリ)
{
  "usage": {
    "input_tokens": 16417,
    "input_tokens_details": { "cached_tokens": 2947, "cache_write_tokens": 8894 },
    "output_tokens": 626,
    "output_tokens_details": { "reasoning_tokens": 460 },
    "total_tokens": 17043
  },
  "output": [
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "東京 現在 気温 天気" }, "status": "completed" },
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "open_page", "url": "https://weathernews.jp/onebox/tenki/tokyo/13100/" }, "status": "completed" },
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "2026年8月20日 東京 現在 気温 天気 何度" }, "status": "completed" },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [
            { "type": "url_citation", "title": "Yahoo!天気・災害", "url": "https://weather.yahoo.co.jp/weather/jp/13/4410.html" },
            { "type": "url_citation", "title": "東京都・東京の天気予報:朝日新聞", "url": "https://www.asahi.com/weather/pinpoint/kanto/tokyo.html" }
          ]
        }
      ]
    }
  ]
}

open_page で取得したのは weathernews.jp でしたが、最終回答の引用に出たのは weather.yahoo.co.jp と asahi.com(朝日新聞)で、Fetch先の weathernews.jp は引用に含まれていません。

クエリ別結果

external_web_access: true で「Web検索を利用して調べて」と明示した4クエリの結果です。AWSに関する質問(Lambdaレイヤ実行方法・CloudFront障害)では、open_pageの対象は第三者ブログ(DevelopersIO)でした。一方、AWSと無関係な質問(borgbackup)では、該当分野の一次情報源(BorgBackup公式)へのopen_pageが観測されました。

天気(weather-retest-run1-true.json抜粋。天気クエリでの比較の1回目と同じ実行)
{
  "output": [
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "東京 現在 天気 気温" }, "status": "completed" },
    { "type": "reasoning" },
    { "type": "web_search_call", "action": { "type": "search", "query": "Tokyo weather now August 20 2026 current temperature" }, "status": "completed" },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [
            { "type": "url_citation", "title": "Tokyo, Japan Weather Conditions", "url": "https://www.wunderground.com/weather/jp/tokyo" },
            { "type": "url_citation", "title": "Tokyo, 13, JP Current Weather", "url": "https://www.theweathernetwork.com/en/city/jp/tokyo/tokyo/current" },
            { "type": "url_citation", "title": "Yahoo!天気・災害", "url": "https://weather.yahoo.co.jp/weather/jp/13/4410.html" }
          ]
        }
      ]
    }
  ],
  "usage": { "input_tokens": 14108, "output_tokens": 384, "total_tokens": 14492 }
}
Lambdaレイヤ実行方法(AWS関連、lambda-layer-explicit-true.json抜粋)
{
  "usage": {
    "input_tokens": 29693,
    "input_tokens_details": {
      "cached_tokens": 0,
      "cache_write_tokens": 2962
    },
    "output_tokens": 4895,
    "output_tokens_details": {
      "reasoning_tokens": 1167
    },
    "total_tokens": 34588
  },
  "output": [
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "search",
        "queries": [
          "Amazon Bedrock Mantle GPT model Lambda layer 実行 方法",
          "Bedrock Mantle GPT model AWS",
          "Amazon Bedrock Mantle"
        ],
        "query": "Amazon Bedrock Mantle GPT model Lambda layer 実行 方法",
        "sources": null
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "search",
        "queries": [
          "site:docs.aws.amazon.com bedrock mantle Lambda AWS credentials bearer token OpenAI SDK",
          "site:github.com aws bedrock token generator python Lambda Mantle",
          "site:docs.aws.amazon.com AmazonBedrockMantleInferenceAccess policy CallWithBearerToken CreateInference"
        ],
        "query": "site:docs.aws.amazon.com bedrock mantle Lambda AWS credentials bearer token OpenAI SDK",
        "sources": null
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "open_page",
        "url": "https://dev.classmethod.jp/articles/bedrock-gpt55-openai-sdk-lambda-layer-deploy/"
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [
            {
              "end_index": 459,
              "start_index": 227,
              "title": "Get started with OpenAI GPT-5.6 Sol, Terra, and Luna on Amazon Bedrock | Artificial Intelligence",
              "type": "url_citation",
              "url": "https://aws.amazon.com/blogs/machine-learning/get-started-with-openai-gpt-5-6-sol-terra-and-luna-on-amazon-bedrock/"
            },
            {
              "end_index": 459,
              "start_index": 227,
              "title": "Responses API - Amazon Bedrock",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html"
            },
            {
              "end_index": 1293,
              "start_index": 1061,
              "title": "Get started with OpenAI GPT-5.6 Sol, Terra, and Luna on Amazon Bedrock | Artificial Intelligence",
              "type": "url_citation",
              "url": "https://aws.amazon.com/blogs/machine-learning/get-started-with-openai-gpt-5-6-sol-terra-and-luna-on-amazon-bedrock/"
            },
            {
              "end_index": 1293,
              "start_index": 1061,
              "title": "Responses API - Amazon Bedrock",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html"
            },
            {
              "end_index": 1913,
              "start_index": 1598,
              "title": "Responses API - Amazon Bedrock",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html"
            },
            {
              "end_index": 1913,
              "start_index": 1598,
              "title": "Amazon Bedrock",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-55.html"
            },
            {
              "end_index": 1913,
              "start_index": 1598,
              "title": "Amazon Bedrock",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-card-openai-gpt-56-sol.html"
            },
            {
              "end_index": 2811,
              "start_index": 2591,
              "title": "AmazonBedrockMantleInferenceAccess - AWS Managed Policy",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockMantleInferenceAccess.html"
            },
            {
              "end_index": 2811,
              "start_index": 2591,
              "title": "Making inference requests",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/inference.html"
            },
            {
              "end_index": 3697,
              "start_index": 3469,
              "title": "aws-bedrock-token-generator-python/README.md at main · aws/aws-bedrock-token-generator-python · GitHub",
              "type": "url_citation",
              "url": "https://github.com/aws/aws-bedrock-token-generator-python/blob/main/README.md"
            },
            {
              "end_index": 3697,
              "start_index": 3469,
              "title": "Get started with OpenAI GPT-5.6 Sol, Terra, and Luna on Amazon Bedrock | Artificial Intelligence",
              "type": "url_citation",
              "url": "https://aws.amazon.com/blogs/machine-learning/get-started-with-openai-gpt-5-6-sol-terra-and-luna-on-amazon-bedrock/"
            },
            {
              "end_index": 4883,
              "start_index": 4681,
              "title": "Bedrock GPT-5.5 を OpenAI SDK の Lambda レイヤーで動かしてみた | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/articles/bedrock-gpt55-openai-sdk-lambda-layer-deploy/"
            },
            {
              "end_index": 4883,
              "start_index": 4681,
              "title": "Lambda レイヤーで Bedrock Mantle を使う — Docker 不要で 47 モデルを呼び出してみた | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/articles/bedrock-mantle-lambda-layer-4-routes/"
            },
            {
              "end_index": 6384,
              "start_index": 6156,
              "title": "Get started with OpenAI GPT-5.6 Sol, Terra, and Luna on Amazon Bedrock | Artificial Intelligence",
              "type": "url_citation",
              "url": "https://aws.amazon.com/blogs/machine-learning/get-started-with-openai-gpt-5-6-sol-terra-and-luna-on-amazon-bedrock/"
            },
            {
              "end_index": 6384,
              "start_index": 6156,
              "title": "aws-bedrock-token-generator-python/README.md at main · aws/aws-bedrock-token-generator-python · GitHub",
              "type": "url_citation",
              "url": "https://github.com/aws/aws-bedrock-token-generator-python/blob/main/README.md"
            },
            {
              "end_index": 8459,
              "start_index": 8366,
              "title": "aws-bedrock-token-generator-python/README.md at main · aws/aws-bedrock-token-generator-python · GitHub",
              "type": "url_citation",
              "url": "https://github.com/aws/aws-bedrock-token-generator-python/blob/main/README.md"
            },
            {
              "end_index": 9769,
              "start_index": 9672,
              "title": "Responses API - Amazon Bedrock",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html"
            },
            {
              "end_index": 9990,
              "start_index": 9893,
              "title": "Responses API - Amazon Bedrock",
              "type": "url_citation",
              "url": "https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html"
            },
            {
              "end_index": 10417,
              "start_index": 10282,
              "title": "Get started with OpenAI GPT-5.6 Sol, Terra, and Luna on Amazon Bedrock | Artificial Intelligence",
              "type": "url_citation",
              "url": "https://aws.amazon.com/blogs/machine-learning/get-started-with-openai-gpt-5-6-sol-terra-and-luna-on-amazon-bedrock/"
            }
          ],
          "text": "以下は、**Amazon Bedrock の Mantle 経由で OpenAI GPT モデルを AWS Lambda から呼び出す方法**です。  \nポイントは、従来の `bedrock-runt(後略)"
        }
      ]
    }
  ]
}
CloudFront障害(AWS関連、cloudfront-explicit-search-true.json抜粋)
{
  "usage": {
    "input_tokens": 27379,
    "input_tokens_details": {
      "cached_tokens": 0,
      "cache_write_tokens": 2973
    },
    "output_tokens": 3063,
    "output_tokens_details": {
      "reasoning_tokens": 796
    },
    "total_tokens": 30442
  },
  "output": [
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "search",
        "queries": [
          "CloudFront VPC origin incident July 16 2026 16:45 JST",
          "AWS Health Dashboard CloudFront VPC origins July 16 2026",
          "CloudFront VPCオリジン 障害 2026年7月16日"
        ],
        "query": "CloudFront VPC origin incident July 16 2026 16:45 JST",
        "sources": null
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "search",
        "queries": [
          "site:health.aws.amazon.com CloudFront VPC origins July 16 2026 final report",
          "site:aws.amazon.com \"VPC origins\" \"July 16, 2026\"",
          "site:theregister.com AWS CloudFront outage VPC origins July 16 2026"
        ],
        "query": "site:health.aws.amazon.com CloudFront VPC origins July 16 2026 final report",
        "sources": null
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "search",
        "queries": [
          "\"internal constraint on the fleet that manages connections to private VPC origins\"",
          "\"CloudFront customers utilizing VPC Origins connectivity\" \"20:18\"",
          "\"VPC Origins\" \"20:18 JST\" CloudFront"
        ],
        "query": "\"internal constraint on the fleet that manages connections to private VPC origins\"",
        "sources": null
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "open_page",
        "url": "https://dev.classmethod.jp/en/articles/cloudfront-vpc-origin-failure-inter-region-vpc-peering-bypass/"
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [
            {
              "end_index": 624,
              "start_index": 499,
              "title": "I tried bypassing CloudFront VPC origin failures using Inter-Region VPC peering | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/en/articles/cloudfront-vpc-origin-failure-inter-region-vpc-peering-bypass/"
            },
            {
              "end_index": 1455,
              "start_index": 1047,
              "title": "I tried bypassing CloudFront VPC origin failures using Inter-Region VPC peering | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/en/articles/cloudfront-vpc-origin-failure-inter-region-vpc-peering-bypass/"
            },
            {
              "end_index": 1455,
              "start_index": 1047,
              "title": "AWS CloudFront outage serves errors instead of websites",
              "type": "url_citation",
              "url": "https://www.theregister.com/off-prem/2026/07/16/aws-cloudfront-outage-serves-errors-instead-of-websites/5272421"
            },
            {
              "end_index": 1455,
              "start_index": 1047,
              "title": "AWS CloudFront Took Down Canvas, Blackboard, Hugging Face in Control-Plane Failure",
              "type": "url_citation",
              "url": "https://www.techtimes.com/articles/320971/20260719/aws-cloudfront-took-down-canvas-blackboard-hugging-face-control-plane-failure.htm"
            },
            {
              "end_index": 2020,
              "start_index": 1904,
              "title": "CloudFront VPC Origin Outage (2026-07-16): Confirming from logs that approximately 30-second timeout waits were occurring | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/en/articles/cloudfront-vpc-origin-incident-20260716-log-analysis/"
            },
            {
              "end_index": 2519,
              "start_index": 2387,
              "title": "AWS CloudFront outage serves errors instead of websites",
              "type": "url_citation",
              "url": "https://www.theregister.com/off-prem/2026/07/16/aws-cloudfront-outage-serves-errors-instead-of-websites/5272421"
            },
            {
              "end_index": 3273,
              "start_index": 3016,
              "title": "I tried bypassing CloudFront VPC origin failures using Inter-Region VPC peering | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/en/articles/cloudfront-vpc-origin-failure-inter-region-vpc-peering-bypass/"
            },
            {
              "end_index": 3273,
              "start_index": 3016,
              "title": "AWS CloudFront outage serves errors instead of websites",
              "type": "url_citation",
              "url": "https://www.theregister.com/off-prem/2026/07/16/aws-cloudfront-outage-serves-errors-instead-of-websites/5272421"
            },
            {
              "end_index": 3827,
              "start_index": 3586,
              "title": "I tried bypassing CloudFront VPC origin failures using Inter-Region VPC peering | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/en/articles/cloudfront-vpc-origin-failure-inter-region-vpc-peering-bypass/"
            },
            {
              "end_index": 3827,
              "start_index": 3586,
              "title": "CloudFront VPC Origin Outage (2026-07-16): Confirming from logs that approximately 30-second timeout waits were occurring | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/en/articles/cloudfront-vpc-origin-incident-20260716-log-analysis/"
            },
            {
              "end_index": 4329,
              "start_index": 4213,
              "title": "CloudFront VPC Origin Outage (2026-07-16): Confirming from logs that approximately 30-second timeout waits were occurring | DevelopersIO",
              "type": "url_citation",
              "url": "https://dev.classmethod.jp/en/articles/cloudfront-vpc-origin-incident-20260716-log-analysis/"
            }
          ],
          "text": "調査したところ、2026年7月16日(木)16:45 JSTに発生したものは、**CloudFront全体の障害ではなく、CloudFrontの「VPC Origins」接続を利用しているディストリビ(後略)"
        }
      ]
    }
  ]
}
borgbackup(AWS無関係、borgbackup-linux-true.json抜粋)
{
  "usage": {
    "input_tokens": 23207,
    "input_tokens_details": {
      "cached_tokens": 0,
      "cache_write_tokens": 2950
    },
    "output_tokens": 5021,
    "output_tokens_details": {
      "reasoning_tokens": 1823
    },
    "total_tokens": 28228
  },
  "output": [
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "search",
        "queries": [
          "BorgBackup official documentation create repository encryption prune compact check mount USB SSD",
          "BorgBackup official documentation systemd timer daily backup",
          "systemd.timer official man page OnCalendar Persistent"
        ],
        "query": "BorgBackup official documentation create repository encryption prune compact check mount USB SSD",
        "sources": null
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "open_page",
        "url": "https://borgbackup.readthedocs.io/en/stable/deployment/automated-local.html"
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "web_search_call",
      "action": {
        "type": "search",
        "queries": [
          "site:borgbackup.readthedocs.io/en/stable Borg 2 migration commands repo-create create prune"
        ],
        "query": "site:borgbackup.readthedocs.io/en/stable Borg 2 migration commands repo-create create prune",
        "sources": null
      },
      "status": "completed"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "reasoning"
    },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [
            {
              "end_index": 416,
              "start_index": 234,
              "title": "General — Borg - Deduplicating Archiver 1.4.5 documentation",
              "type": "url_citation",
              "url": "https://borgbackup.readthedocs.io/en/stable/usage/general.html"
            },
            {
              "end_index": 416,
              "start_index": 234,
              "title": "Deduplicating Archiver 1.4.5 documentation",
              "type": "url_citation",
              "url": "http://borgbackup.readthedocs.io/en/stable/quickstart.html"
            },
            {
              "end_index": 1919,
              "start_index": 1829,
              "title": "Deduplicating Archiver 1.4.5 documentation",
              "type": "url_citation",
              "url": "https://borgbackup.readthedocs.io/en/stable/usage/init.html"
            },
            {
              "end_index": 2409,
              "start_index": 2316,
              "title": "General — Borg - Deduplicating Archiver 1.4.5 documentation",
              "type": "url_citation",
              "url": "https://borgbackup.readthedocs.io/en/stable/usage/general.html"
            },
            {
              "end_index": 4722,
              "start_index": 4548,
              "title": "Deduplicating Archiver 1.4.5 documentation",
              "type": "url_citation",
              "url": "https://borgbackup.readthedocs.io/en/stable/usage/prune.html"
            },
            {
              "end_index": 4722,
              "start_index": 4548,
              "title": "Deduplicating Archiver 1.4.5 documentation",
              "type": "url_citation",
              "url": "https://borgbackup.readthedocs.io/en/stable/faq.html"
            },
            {
              "end_index": 5520,
              "start_index": 5448,
              "title": "systemd.timer(5) - Linux manual page",
              "type": "url_citation",
              "url": "https://man7.org/linux/man-pages/man5/systemd.timer.5.html"
            },
            {
              "end_index": 6103,
              "start_index": 6010,
              "title": "General — Borg - Deduplicating Archiver 1.4.5 documentation",
              "type": "url_citation",
              "url": "https://borgbackup.readthedocs.io/en/stable/usage/general.html"
            },
            {
              "end_index": 6883,
              "start_index": 6790,
              "title": "General — Borg - Deduplicating Archiver 1.4.5 documentation",
              "type": "url_citation",
              "url": "https://borgbackup.readthedocs.io/en/stable/usage/general.html"
            }
          ],
          "text": "以下は、**LinuxのローカルディスクをBorgBackupで毎日バックアップし、USB SSDを保存先にする構成**です。  \nここでは、現在のBorg 1.x系のコマンドを前提にします。まず `(後略)"
        }
      ]
    }
  ]
}

IAM設定

external_web_access は専用のIAM権限を必要とします。ExternalWebAccess 権限を持つロールと持たないロールで、external_web_access を切り替えて実行しました。

ExternalWebAccess権限 external_web_access open_pageの結果
なし false completed(weathernews.jp、取得元は判別できない)
なし true failed(url: null)
あり false completed(取得元は判別できない)
あり true completed(3回のうち3回目に weathernews.jp への open_page が発生)

権限がない状態で true を指定した場合だけ、open_page が failed(url: null)になりました。ExternalWebAccess権限を持たないロールでは、external_web_access: trueで外部Fetchを試みても実行時に拒否され、URLを取得できないまま失敗する、という挙動です。レスポンスの生データは次のとおりです(response.model_dump(mode="json") で取得し、reasoning の encrypted_content は省略しています)。

権限なし・external_web_access: true(pattern-noperm-true.json抜粋)
{
  "id": "<REQUEST_ID>",
  "error": null,
  "model": "openai.gpt-5.6-luna",
  "output": [
    { "type": "reasoning" },
    {
      "type": "web_search_call",
      "action": { "type": "search", "query": "東京 現在 気温 天気", "queries": ["東京 現在 気温 天気"] },
      "status": "completed"
    },
    { "type": "reasoning" },
    {
      "type": "web_search_call",
      "action": { "type": "open_page", "url": null },
      "status": "failed"
    },
    { "type": "reasoning" },
    {
      "type": "web_search_call",
      "action": { "type": "search", "query": "東京 2026年8月20日 現在 気温 天気 千代田区", "queries": ["東京 2026年8月20日 現在 気温 天気 千代田区", "site:weathernews.jp/onebox/tenki/tokyo/ 東京 8月20日 2026 気温"] },
      "status": "completed"
    },
    { "type": "reasoning" },
    {
      "type": "message",
      "content": [
        {
          "type": "output_text",
          "annotations": [
            { "type": "url_citation", "title": "Yahoo!天気・災害", "url": "https://weather.yahoo.co.jp/weather/amedas/13/44132.html" },
            { "type": "url_citation", "title": "Yahoo!天気・災害", "url": "https://weather.yahoo.co.jp/weather/jp/13/4410.html" }
          ]
        }
      ]
    }
  ],
  "usage": {
    "input_tokens": 12734,
    "input_tokens_details": { "cached_tokens": 2947, "cache_write_tokens": 8211 },
    "output_tokens": 469,
    "output_tokens_details": { "reasoning_tokens": 332 },
    "total_tokens": 13203
  }
}

注意したいのは、この失敗がレスポンス全体のエラーとして表面化しないことです。トップレベルの error は null のままで、該当する web_search_call だけが status: "failed" になります。理由を示すフィールドもないため、権限不足による拒否かどうかはレスポンスからは判別できません。外部Fetchを前提にした用途では、web_search_call の status を自分で確認しないと失敗に気づけません。

まとめ

2026年8月19日のアップデートで external_web_access が有効化されました。

少ない試行回数ですが、以前はサポート外だった外部サイトの情報も、天気やOSSの情報は有名サイトや公式サイトの情報が利用されることを確認できました。

一方で、クエリを渡せば必ず検索が走る一般的な検索APIとは挙動が異なり、モデルの判断で検索が行われない場合も観測されました。ユースケースで求める使い方ができるか、実際に呼び出して評価することをおすすめします。


AI白書2026 配布中

クラスメソッドが独自に行なったAI診断調査をもとに、企業のAI活用の現在地を調査レポートとしてまとめました。企業規模別の活用度傾向に加え、規模を超えてAI活用を進める企業に共通する取り組みまで、自社の現在地を捉えるためのヒントにぜひ。

AI白書2026

無料でダウンロードする

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事