結論:止める範囲を先に決める
Claude Code 2.1.285の公式changelogには、WebFetch toolを無効化するCLAUDE_CODE_DISABLE_WEB_FETCHが追加されています。ただし、全sessionで外部取得を止めたいのか、特定project・domain・利用者だけを制御したいのかで、環境変数とpermission denyの選び方は変わります。
確認する一次情報はClaude Code changelogとsettings公式資料、permissions公式資料です。changelogで正式な変数名と追加versionを確認し、settingsで環境変数の設定場所、permissionsでWebFetchのdenyとscopeを確認します。Managed Agentsのdomain制限は別surfaceの制御なので、Claude CodeのWebFetch停止と混同しません。
環境変数とdeny ruleを比較する
| 方法 | 向く場面 | 限界・確認点 |
|---|---|---|
CLAUDE_CODE_DISABLE_WEB_FETCH | 端末・CI・組織でWebFetch自体を止める | 適用されたprocessと設定scopeを確認する |
permissions.denyのWebFetch | settingsのpolicyとして拒否を記録する | managed・project・localの優先関係を読む |
| domain policy | 許可domainや外部情報の利用方針を決める | WebFetch以外のnetwork surfaceまで網羅しない |
| 人間確認 | 例外的なURL取得を都度判断する | 無人jobではprompt待ちになり得る |
環境変数の停止は切り分けが明快ですが、全ての作業で必要な場合にだけ使います。deny ruleは組織の設定台帳へ載せやすい一方、設定が届いていないsessionでは期待した拒否になりません。公式資料にない「外部通信が全て止まる」という主張はせず、WebFetch toolの停止範囲として説明します。
8手順でWebFetchの停止を検証する
- 対象を全端末、CI、特定project、特定jobのどれにするか決めます。
- Claude Codeのversionと、実行時のenvironment、settings source、permission modeを保存します。
- まず試験用projectで
CLAUDE_CODE_DISABLE_WEB_FETCHを設定します。 - sessionを新規起動し、設定がprocessへ継承されているかを表示とログで確認します。
- WebFetchを必要とする安全なテスト依頼を行い、toolが実行されず拒否されることを記録します。
- 次にmanagedまたはproject settingsで
WebFetchのdenyを適用し、結果を比較します。 - 許可が必要な例外はdomain、担当者、期限、取得データ、保存先を申請書にします。
- 再有効化時も同じテストを実行し、取得結果の正確性ではなく適用された制御を合格条件にします。
環境変数をshellの一時設定にすると、IDE、subagent、CIへ継承されない場合があります。実行surfaceごとにprocess境界を表にし、どの設定がどこへ届くかを確認します。テストで実際の機密URLを取得せず、組織が許可した公開テストページだけを使います。
外部取得ポリシーの判断軸
| 判断軸 | 質問 | 停止条件 |
|---|---|---|
| データ分類 | 取得したURL・本文・credentialに機密性はあるか | 機密情報を含むjobはWebFetchを無効化 |
| 業務目的 | 一次資料の確認か、探索か、不要な補助か | 目的と許可domainがない取得を拒否 |
| 実行主体 | 対話型か、CIか、subagentか | 無人実行はデフォルトdeny |
| 証跡 | URL、時刻、利用者、判断を残せるか | ログが欠ける場合は再取得しない |
既存のMCPセキュリティや監査ログと同様、toolを止めるだけでなく、例外を誰が承認し、いつ解除するかを決めます。WebFetchを止めても、利用者が別のnetwork toolやcopy-and-pasteで外部情報を持ち込む可能性は残るため、情報持ち出しの全体方針へ接続します。
企業導入前チェックリスト
- 停止対象のsurfaceとjobを定義した
- 2.1.285以上で正式変数名を確認した
- 環境変数の設定元とprocess継承を確認した
- WebFetch denyのscopeと優先関係を確認した
- 許可domain、データ分類、取得目的を台帳化した
- 無人CIと対話型sessionの例外を分けた
- ログ、再有効化、期限、停止担当を決めた
社内標準では、環境変数を全端末へ一律に配る前に、調査業務と機密処理をprofileで分けます。調査profileは許可domainと保存先を限定し、機密処理profileはWebFetchを無効化します。どちらも設定の出所を/statusや運用台帳で確認できるようにし、設定変更を人間の承認なしに自動反映させません。
FAQ
- WebFetchを無効化するとClaude Code全体がオフラインになりますか?
- 公式changelogの記載はWebFetch toolの無効化です。他のnetwork surfaceまで止まると断定せず、必要な制御を個別に設計します。
- 環境変数とdenyを両方設定してよいですか?
- 可能ですが、同じ目的の二重設定は原因切り分けを難しくします。標準は一つに定め、例外時だけもう一方を使い、適用scopeを記録します。
- 外部取得ポリシーを無料診断できますか?
- できます。許可domain、データ分類、job、ログ、例外、停止条件を無料診断(60秒)で整理します。
WebFetchの停止は、情報の正確性や検索品質を保証する設定ではありません。目的が一次資料の確認なら、管理されたsource listを人間が更新し、取得できない時は手動確認へ切り替える手順を用意します。公式資料にない料金、削減効果、全通信停止の主張は避け、実際の契約とネットワーク設定を別途readbackします。設定変更のレビューでは、HTTP hookの許可先やChannelsの外部接続を同じ境界と誤認せず、別のtoolとして棚卸しします。
外部取得を使うかどうかの判断は、ツールの便利さだけでなく、対象データ、実行主体、証跡、停止条件で決めます。CLAUDE_CODE_DISABLE_WEB_FETCHとdeny ruleを試験用projectで比較し、期待する境界を確認してからmanaged settingsへ広げることが、再現可能な企業運用につながります。再有効化の前には、期限切れの例外を取り消し、許可domainと取得先の変更を再承認します。
設定の有効期限と所有者を台帳で管理し、担当者が変わっても同じ確認を再現できるようにします。判断できない取得は、取得結果を使わず人間確認へ戻します。例外の終了時刻も必ず記録します。
