Claude Code の WebFetch を特定ドメインだけ許可する設定

Claude Code 公開:

WebFetch(domain:...) の書き方とワイルドカードの効き方、bare WebFetch と domain:* の違い、サンドボックスの通信許可との関係、リダイレクト時の落とし穴をまとめます。

検証日 2026年9月8日 仕様変更が早い分野です。最新の公式ドキュメントも併せてご確認ください。
目次
  1. 必要なドメインだけを許可する
  2. ワイルドカードの効き方
  3. 「全部許可」には 2 つの書き方がある
  4. 使うときの注意点
  5. まとめ

Claude に調べ物をさせたいが、任意のサイトへ自由にアクセスさせたくない。この要求は permissions の WebFetch(domain:...) ルールで表現できます。

ルールはリクエスト先のホスト名に対して照合されます。大文字小文字は区別されず、末尾のドットは無視されるため、example.com. と example.com は同じ扱いです。

KEY POINT

この記事で分かること

  • WebFetch(domain:...) の書き方とワイルドカードの範囲
  • WebFetch と WebFetch(domain:*) の違い
  • サンドボックスの通信許可とリダイレクトの注意点

必要なドメインだけを許可する

社内ドキュメントと特定の公式サイトだけを許可する例です。

{
  "permissions": {
    "allow": [
      "WebFetch(domain:code.claude.com)",
      "WebFetch(domain:*.internal.example.com)"
    ],
    "deny": [
      "WebFetch(domain:pastebin.com)"
    ]
  }
}

allow に書いたドメインは確認なしで取得され、それ以外は通常どおり確認が入ります。最初から取得させたくない先は deny に書きます。deny は allow より先に評価されるため、あとから allow を足しても解除されません。

権限プロンプトで「Yes, and don't ask again for <domain>」を選んだ場合も、WebFetch(domain:...) の allow ルールがローカル設定に保存されます。手で書かなくても増えていくので、/permissions でときどき棚卸ししてください。

ワイルドカードの効き方

ワイルドカードは位置によって意味が変わります。取得の照合にワイルドカードを使うには Claude Code v2.1.172 以降が必要です。

書き方一致するもの一致しないもの
domain:example.comexample.comサブドメイン
domain:*.example.comapi.example.com、a.b.example.comexample.com 自体
domain:example.*example.orgexample.evil.com
domain:*すべてのドメインなし

domain:example.* が example.evil.com に一致しないのは重要な性質です。先頭の *. と単独の * 以外の位置では、ワイルドカードはドットとドットの間だけに一致します。攻撃者が取得できるドメインに末尾ワイルドカードが広がることを防ぐ仕様です。

「全部許可」には 2 つの書き方がある

WebFetch とだけ書いた bare のルールと、WebFetch(domain:*) はどちらも全 URL を対象にしますが、扱いが違います。サンドボックスの許可ドメイン一覧に影響するのは domain: の形だけです。

ルールallow に書いた場合deny に書いた場合
WebFetch確認なしで取得する。サンドボックスの到達先は変わらないツール自体が外され、取得できなくなる。サンドボックスの到達先は変わらない
WebFetch(domain:*)確認なしで取得し、サンドボックス内のコマンドも任意のホストに到達できるツールは残るが毎回拒否され、サンドボックス内のコマンドはどのホストにも到達できない

用語解説

サンドボックスとの関係: Bash サンドボックスは既定でドメインを 1 つも事前許可しません。sandbox.network.allowedDomains に加えて、WebFetch(domain:...) の allow ルールも許可ドメインとして扱われます。ただしサンドボックスが解釈するワイルドカードは、先頭の *. と単独の * の 2 種類だけです(単独の * は v2.1.186 以降)。domain:example.* のような書き方は、取得には一致してもサンドボックス内のコマンドには効きません。

使うときの注意点

リダイレクト先は別に許可が必要

WebFetch は別ホストへのリダイレクトを自動的には追いません。元の URL とリダイレクト先を示すテキスト結果を返し、Claude が 2 回目の WebFetch 呼び出しで取得します。したがってリダイレクト先のホストも、allow ルールか都度の承認が必要です。短縮 URL やリダイレクタを許可しても、その先までは許可されません。

そのほか、公式ドキュメントで確認できた挙動は次のとおりです。

  1. HTTP の URL は自動的に HTTPS へ格上げされます。
  2. サーバーが HTML を返した場合は Markdown へ変換され、その変換は設定で変えられません。
  3. 応答は既定で 15 分キャッシュされます。v2.1.233 以降は CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS で長さを変えられます。
  4. 組み込みの「事前承認済みドキュメントドメイン」があり、そこへの取得は確認なしで行われます。ただしそのドメインの具体的な一覧は、公式ドキュメントでは確認できませんでした。

秘密情報を外へ出させない観点の設定は API キーや秘密情報を読ませないための設定、読み取り側の制限は .env を読ませない deny 設定 にまとめてあります。allow / ask / deny 全体の設計は親記事の settings.json で permissions を設計する を参照してください。

まとめ

  • WebFetch(domain:...) はホスト名に照合され、大文字小文字と末尾のドットを区別しない
  • *.example.com はサブドメインだけに一致し、example.com 自体は別に書く
  • 末尾ワイルドカードはドットを越えないため、example.* は example.evil.com に一致しない
  • 全許可には bare の WebFetch と WebFetch(domain:*) があり、後者だけがサンドボックスの到達範囲も広げる
  • 別ホストへのリダイレクト先は、改めて許可か承認が必要になる

よくある質問

WebFetch(domain:*.example.com) は example.com 自体にも一致しますか?
一致しません。先頭の *. はサブドメインに任意の深さで一致しますが、example.com そのものには一致しません。両方を許可するなら 2 行書きます。
allow に WebFetch と WebFetch(domain:*) のどちらを書くべきですか?
どちらも全 URL を対象にしますが、domain: の形だけがサンドボックスの許可ドメイン一覧にも追加されます。サンドボックスの許可範囲を変えたくないなら bare の WebFetch を使います。
許可したページが別ドメインにリダイレクトしたらどうなりますか?
WebFetch は別ホストへのリダイレクトを自動では追わず、元の URL とリダイレクト先を示すテキストを返します。Claude が 2 回目の呼び出しで取得するため、リダイレクト先のドメインにも許可が必要です。

参考にした一次情報

この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。