Claude Media
auto modeのallowed_domainsでコマンドごとに許可ホストを絞る

auto modeのallowed_domainsでコマンドごとに許可ホストを絞る

auto modeでBash・PowerShell・Monitorコマンドに付くallowed_domainsの仕組みと、既存のネットワーク許可設定との違いをまとめます。

auto modeのallowed_domainsで何が変わるか

サンドボックスを有効にしたauto modeでは、新しいホストへ接続するたびに承認かクラシファイアの判定が必要でした。Claude Code v2.1.271以降は、この承認をコマンド単位に絞り込めます。Bash・PowerShell・Monitorの各コマンドは、実行時に自分専用のallowed_domainsリストを持てるようになりました。クラシファイアはコマンド本体とこのリストを一緒に審査し、承認されたホストはそのコマンドが動いている間だけ開きます。セッションの許可リストにも設定ファイルにも何も追加されません。次に実行するコマンドは、自分のホストリストをあらためて名乗る必要があります。

クラシファイアがコマンドと一緒にホストを審査する仕組み

リストに書けるのはドメイン名(registry.npmjs.org)、先頭にワイルドカードを持つ形(*.pythonhosted.org)、IPアドレスのいずれかで、それぞれ:ポートを任意で付けられます。IPv6アドレスの書き方は後述します。

ホストのリストを持つコマンドは、サンドボックスの自動承認や普段の許可ルールをそのまま素通りせず、必ずクラシファイアの審査に回ります。permissions.askルールがそのコマンドにプロンプトを強制する設定になっている場合は、ターミナルの許可ダイアログにホストの一覧も添えて表示され、承認するとコマンドとホストの両方が一度に通ります。

既存のネットワーク許可設定とどう違うか

サンドボックスにはすでに複数のネットワーク許可の仕組みがあり、コマンド単位のallowed_domainsはそのどれとも役割が異なります。有効な範囲がコマンド1回に限られる点が最大の違いです。

仕組み有効な範囲
sandbox.network.allowedDomains有効な範囲セッション全体・設定ファイルに恒久保存
承認プロンプトで「Yes」を選択有効な範囲セッションが続く間ずっと
WebFetch(domain:...)許可ルール有効な範囲サンドボックスの許可リストに合流(WebFetchツール自体は別のin-process許可)
コマンド単位のallowed_domains(本機能)有効な範囲そのコマンドが実行中の間だけ

WebFetch(domain:...)ルールは合流先が違うので混同に注意が必要です。サンドボックス化されたコマンドの許可リストには合流しますが、WebFetchツール自体はサンドボックスの外で動く別の仕組みで、自分の許可ルールにだけ従います。Claude APIのweb_search・web_fetchツールにも同名のallowed_domainsパラメーターがあり、ホモグラフ攻撃への注意点はallowed_domainsのホモグラフ攻撃対策にまとめています。こちらはAPIのツール定義に書くドメイン制限で、Claude Codeのコマンド単位のリストとは別物です。

コマンド単位のリストは、サンドボックスが既定で拒否している範囲を広げるだけの仕組みです。sandbox.network.deniedDomainsに載っているホストは、コマンドが名指ししても引き続き拒否されます。組織がsandbox.network.strictAllowlistやallowManagedDomainsOnlyで許可リストを固定運用している場合、Claude Codeはコマンド単位のリストそのものを拒否します。この2つの設定は許可リスト外を無条件で拒否する仕組みなので、コマンドが独自にホストを名乗る余地を残しません。

名指ししなかったホストへ接続しようとするとどうなるか

コマンド単位のリストが有効な間、Claude Codeは承認済みコマンドが挙げなかったホストへの接続を拒否します。プロンプトもクラシファイアの確認も挟まず、その場で拒否するだけです。拒否結果にはホスト名がそのままコマンドの実行結果として返ります。Claudeはそのホストをリストに加えたうえで、同じコマンドを実行し直します。

たとえばnpm installがregistry.npmjs.orgだけを名乗って実行され、依存パッケージの取得先が*.pythonhosted.orgにも及ぶ場合、後者へのアクセスはその場で拒否されます。Claudeは拒否結果からホスト名を読み取り、両方を含むリストでコマンドを実行し直すことになります。1つのコマンドが複数のホストへ順に接続する処理では、あらかじめ全ホストを列挙しておかない限り、この追加と再実行が繰り返し起こります。

Monitorコマンドにもリストが要る理由

Monitorはコマンドをバックグラウンドで走らせ、出力の各行をClaudeに返すツールで、WebSocketを開いて受信メッセージをイベントとして扱う使い方もできます。ログの行を読むだけでなくWebSocket接続そのものがネットワーク到達を伴うため、Bash・PowerShellと同じくコマンド単位のホストリストの対象に含まれています。長時間動くMonitorコマンドほど、起動時に必要なホストを漏れなく列挙しておく効果が大きくなります。

auto-allowモードでも例外的に審査される

サンドボックスのauto-allowモードは、コマンドをサンドボックスに収めた状態で自動承認する仕組みで、通常は許可モードの設定と関係なく働きます。ただし公式ドキュメントは、この自動承認が効かない例外を3つ挙げています。plan mode、サーバー側クラシファイアのレビュー、そしてコマンド単位のホストリストを持つauto modeのコマンドです。ホストを名乗ったコマンドは、サンドボックスに収まっていても自動承認をすり抜けず、必ず個別の審査に回ります。サーバー側クラシファイアが有効なセッションでは、この個別審査もサーバー側で行われ、Claude Code自身の追加リクエストではなくセッションの通常のモデルリクエストに含まれます。

IPv6アドレスを名乗るときの書き方

コマンド単位のリストはIPアドレスも受け付けます。IPv6アドレスは[::1]のように角括弧で囲み、ポートを添えるときは[::1]:443と書きます。コロンを2つ以上含む角括弧なしの書き方は、アドレス単体なのかポート付きなのか曖昧になるため避けてください。claude doctorを実行すると、この曖昧な書き方が残っているエントリを警告として一覧できます。角括弧で囲む書き方自体はv2.1.229以降が必要で、それより前のバージョンではポート番号らしき数字を含む文字列がアドレスの一部として読み取られていました。

使える条件と使えないケース

この機能はClaude Code v2.1.271以降で利用できます。対象のツールはBash・PowerShell・Monitorの3つで、サンドボックスの一般的な対応OSと同じくmacOS・Linux・WSL2で動作します。native Windowsではサンドボックス自体が非対応のため、この機能も使えません。

strictAllowlistもallowManagedDomainsOnlyも使っていない環境なら、auto modeでサンドボックスを有効にしているだけでこの機能は自動的に働きます。設定ファイル側で個別にオンにする項目はありません。

管理者がmanaged設定経由でsandbox.enabledとauto modeを組織全体に配布した場合も、開発者ごとの個別設定なしにこの機能は同じように働きます。開発者が許可リストを緩めるのを防ぎたい場合は、管理設定側でallowManagedDomainsOnlyを有効にしておけば、コマンド単位のリストを含めて許可リストの拡張が管理設定だけに固定されます。

設定ファイル側から動きを変える例

コマンド単位のリストを許さない運用にしたい場合は、strictAllowlistをユーザー設定か管理設定に書きます。プロジェクト設定の.claude/settings.jsonや.claude/settings.local.jsonに書いても効果はありません。

{
  "sandbox": {
    "enabled": true,
    "network": {
      "allowedDomains": ["github.com", "*.npmjs.org"],
      "deniedDomains": ["uploads.github.com"],
      "strictAllowlist": true
    }
  }
}

この例ではallowedDomainsとWebFetch(domain:...)ルールの範囲は保ったまま、それ以外へのアクセスをコマンド単位の申告ごと拒否にできます。deniedDomainsはallowedDomainsが広いワイルドカードで許可していても、個別にそこだけ拒否したいときに使う設定です。

excludedCommandsとは別の解決策

サンドボックスと相性が悪いツールは、excludedCommandsに載せてサンドボックスの外で実行する運用がすでにあります。この設定はコマンドをサンドボックスの保護対象から丸ごと外す仕組みで、ファイルシステムの隔離もネットワークの制限も及ばなくなります。一方コマンド単位のallowed_domainsは、コマンドをサンドボックスの中に置いたまま、必要なホストだけを個別に開く仕組みです。ネットワーク到達先を絞りたいだけなら、excludedCommandsより先にこちらを検討する余地があります。

恒久的な許可リストを増やさずに済む

これまでauto modeでサンドボックス化されたコマンドにネットワークを使わせるには、sandbox.network.allowedDomainsへホストを恒久的に追加するか、承認プロンプトで「Yes」を選んでそのセッションの残りの間ずっと開いたままにするしかありませんでした。前者は設定ファイルに残るので、セッションが終わったあとや別のタスクでもそのホストが開いたままになります。コマンド単位のallowed_domainsは、その場限りで必要なホストだけをクラシファイアに承認させる経路なので、こうした恒久設定を広げずに済みます。

セッション全体でどのルールが今どう効いているかを見たいときは、claude auto-mode defaultsを実行すると、コマンド単位のホストリストを含むauto modeのルール一式がJSONで表示されます。設定を変える前に、現在の環境で何が既定で許可・拒否されているかを確認するのに使えます。

まとめ

auto modeのコマンド単位allowed_domainsは、Claude Code v2.1.271以降でBash・PowerShell・Monitorコマンドに付く一時的なネットワーク許可です。承認はそのコマンド1回だけに閉じ、セッションの許可リストや設定ファイルには残りません。sandbox.network.allowedDomainsへの恒久追加のような仕組みとは別枠で動き、deniedDomainsは引き続き効き、strictAllowlistやallowManagedDomainsOnlyを使う組織ではこの機能自体が無効になります。同名パラメーターを持つClaude APIのweb_search・web_fetchツール(サーバー側のドメイン制限)とも別物なので、「allowed_domains」という言葉に引きずられて混同しないよう注意してください。

この記事を共有:XはてブLinkedIn