4 4
5# サンドボックス化された Bash ツールを設定する5# サンドボックス化された Bash ツールを設定する
6 6
7> Claude Code のサンドボックス化された Bash ツールがファイルシステムとネットワークの分離を提供し、より安全で自律的なエージェント実行を実現する方法について学びます。7> 組み込みのサンドボックスを使用して、Claude Code のシェルコマンドがアクセスできるファイルとネットワークホストを制限します。サンドボックスをオンにし、境界を設定し、それによって生じる問題を解決します。
8 8
9Bash サンドボックスを使用すると、Claude はほとんどのシェルコマンドを実行できます。各コマンドの実行許可を求める代わりに、コマンドがアクセスできるファイルとネットワークドメインを定義し、オペレーティングシステムがすべての Bash、PowerShell、Monitor コマンドとその子プロセスに対してその境界を実施します。9Bash サンドボックスは、Claude がユーザーのマシン上で実行するシェルコマンドの周囲に、オペレーティングシステムが適用する境界です。これらのコマンドがアクセスできるファイルとネットワークドメインを設定すると、その制限は Bash、PowerShell、Monitor の各コマンドと、それらが起動するプロセスに適用されます。コマンドの実行中にオペレーティングシステムが制限を適用するため、Claude Code はサンドボックス化されたコマンドを 1 つずつ承認を求めることなく[実行できます](#sandbox-modes)。
10
11サンドボックスの対象はシェルコマンドのみです。Claude のファイルツール、MCP サーバー、フックは[サンドボックスの外で実行されます](#what-runs-outside-the-sandbox)。
12
13サンドボックスは macOS、Linux、WSL2 で動作します。ネイティブ Windows では、Claude Code はコマンドをサンドボックス化せずに実行します。Windows マシンでサンドボックスを使用するには、WSL2 ディストリビューション内で Claude Code を実行してください。
10 14
11<Note>15<Note>
12 dev コンテナ、カスタムコンテナ、仮想マシンなどの他の分離アプローチを比較するには、[Sandbox environments](/docs/ja/sandbox-environments) を参照してください。Bash 以外のツールの許可プロンプトを削減するには、[permission modes](/docs/ja/permission-modes) を参照してください。16 このページでは、ユーザー自身のマシン上のシェルコマンドを囲むサンドボックスについて説明します。関連する内容は他のページで説明しています。
17
18 * クラウドセッションがどのように分離されるかについては、[セキュリティと分離](/docs/ja/claude-code-on-the-web#security-and-isolation)を参照してください
19 * dev container、カスタムコンテナ、仮想マシンなど、他の分離方法を比較するには、[サンドボックス環境](/docs/ja/sandbox-environments)を参照してください
20 * Bash 以外のツールの権限プロンプトを減らすには、[権限モード](/docs/ja/permission-modes)を参照してください
13</Note>21</Note>
14 22
23<h2 id="what-the-sandbox-restricts">
24 サンドボックスが制限する内容
25</h2>
26
27サンドボックスがオンの間、Claude が実行するシェルコマンドはその境界内で起動し、それらのコマンドが起動するプロセスも同様に境界内で起動します。サンドボックスはデフォルトでオフです。オンにするには、[はじめに](#get-started)で示すようにセッションで `/sandbox` を実行するか、`~/.claude/settings.json` などの[設定ファイル](/docs/ja/settings)で [`sandbox.enabled`](/docs/ja/settings-reference#sandbox-enabled) を `true` に設定します。
28
29次の表は、サンドボックス化されたコマンドがデフォルトでアクセスできる範囲と、各デフォルトを変更する設定を示しています。
30
31| アクセス | デフォルト | 変更方法 |
32| :- | :- | :- |
33| 書き込み | 作業ディレクトリ、ユーザーごとの一時ディレクトリ、および[追加したディレクトリ](/docs/ja/permissions#additional-directories-grant-file-access-not-configuration)。[保護されたパス](#protected-paths)は書き込みが拒否されたままです | [`filesystem.allowWrite`](/docs/ja/settings-reference#sandbox-filesystem-allowwrite)、[`filesystem.denyWrite`](/docs/ja/settings-reference#sandbox-filesystem-denywrite) |
34| 読み取り | `~/.ssh` や `~/.aws/credentials` などの認証情報ファイルを含む、マシンの大部分 | [`filesystem.denyRead`](/docs/ja/settings-reference#sandbox-filesystem-denyread)、[`credentials`](#protect-credentials) |
35| ネットワーク | 外部への直接のルートはありません。接続はマシン上のプロキシを経由し、プロキシが各ホストを許可ドメインと照合します。許可ドメインは最初は空です。[その他のホストの扱い](#hosts-outside-your-allowed-domains)は権限モードによって決まります | [`network.allowedDomains`](/docs/ja/settings-reference#sandbox-network-alloweddomains)、[`network.deniedDomains`](/docs/ja/settings-reference#sandbox-network-denieddomains) |
36| 環境変数 | Claude Code から継承され、その環境内のシークレットも含まれます | [`credentials`](#protect-credentials)、[`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ja/env-vars) |
37
38Claude Code は、オープンソースの [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropics/sandbox-runtime) パッケージを基にサンドボックスをビルドしています。
39
40<h3 id="what-runs-outside-the-sandbox">
41 サンドボックスの外で実行されるもの
42</h3>
43
44サンドボックスはシェルコマンドをラップします。次のツールとプロセスはサンドボックスの外で実行されます。
45
46* **組み込みのファイルツールと Web ツール**:Read、Edit、Write、WebFetch、WebSearch などのツールは、代わりに[権限ルール](/docs/ja/permissions)に従います。`denyRead` エントリは Read ツールを止めず、`allowedDomains` は WebFetch を制限しません
47* **Claude Code が起動するその他のプロセス**:コマンド[フック](/docs/ja/hooks)、ローカルの [MCP サーバー](/docs/ja/mcp)、[プラグインモニター](/docs/ja/plugins/components#monitors)、[LSP サーバー](/docs/ja/tools-reference#lsp-tool-behavior)、および[ステータスライン](/docs/ja/statusline)コマンドや `apiKeyHelper` などのヘルパーコマンドは、ユーザーの完全なアクセス権で実行されます
48
49設定によっては、一部のシェルコマンドもサンドボックスの外で実行されます。
50
51* **自分で入力したコマンド**:[`!` シェルモードのプロンプト](/docs/ja/interactive-mode#shell-mode-with-prefix)で入力したコマンドは、ほとんどのセッションでサンドボックス化されずに実行されます。入力したコマンドがサンドボックス内で実行されるセッションについては、[厳格サンドボックスモード](#turn-off-the-retry-with-strict-sandbox-mode)を参照してください
52* **除外されたコマンド**:[`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) に一致するコマンドは、サンドボックス化されずに実行されます
53* **サンドボックス外での再試行**:Claude は、通常はサンドボックス内でコマンドが失敗した後に、[そのコマンドをサンドボックス外で実行するよう求める](#the-unsandboxed-retry-escape-hatch)ことがあります
54
55このセクションで挙げたツール、プロセス、コマンドを 1 つの境界の内側に置くには、Claude Code プロセス自体を[コンテナ、仮想マシン、またはサンドボックスランタイム](/docs/ja/sandbox-environments)内で実行します。
56
15<h2 id="get-started">57<h2 id="get-started">
16 はじめに58 はじめに
17</h2>59</h2>
18 60
19sandbox は Claude Code に組み込まれており、macOS、Linux、WSL2 で実行されます。ネイティブ Windows はサポートされていません。Windows では、WSL2 ディストリビューション内で Claude Code を実行してください。61サンドボックスは Claude Code に組み込まれています。インストールが必要なものはプラットフォームによって異なります。
20 62
21macOS では、インストールするものはありません。sandboxing は組み込みの Seatbelt フレームワークを使用します。Linux と WSL2 では、sandbox は 2 つのパッケージに依存しており、[Linux と WSL2 のセットアップ](#set-up-linux-and-wsl2)で説明されています。まだインストールしていない場合でも、`/sandbox` で開始できます。そのパネルには、何かが不足しているかどうかが表示されます。63* **macOS**:サンドボックス化には組み込みの Seatbelt フレームワークが使われるため、そのまま手順に進めます
64* **Linux と WSL2**:サンドボックスは `bubblewrap` と `socat` に依存しています。これらについては [Linux と WSL2 のセットアップ](#set-up-linux-and-wsl2)で説明しています。まだインストールしていなくても、`/sandbox` から始められます。そのパネルに不足しているものが表示されるためです
22 65
23<Steps>66<Steps>
24 <Step title="/sandbox を実行">67 <Step title="/sandbox を実行する">
25 Claude Code セッションを開始し、`/sandbox` コマンドを実行します。68 Claude Code のセッションを開始し、`/sandbox` コマンドを実行します。
26 69
27 ```text theme={null}70 ```text theme={null}
28 /sandbox71 /sandbox
29 ```72 ```
30 73
31 これにより、sandbox パネルが 3 つのタブで開きます。Linux では、オプションの seccomp フィルターが不足している場合、Dependencies タブが追加されます。74 これによりサンドボックスパネルが開きます。パネルには 3 つのタブがあり、Linux でオプションの seccomp フィルターが不足している場合はさらに Dependencies タブが表示されます。
32 75
33 * **Mode**: sandbox されたコマンドがどのように承認されるかを選択します。次のステップで説明されています76 * **Mode**:サンドボックス化されたコマンドの承認方法を選択します。次のステップで説明します
34 * **Overrides**: sandbox の下で失敗するコマンドが sandbox されていない状態で実行にフォールバックできるかどうかを選択します。これは [`allowUnsandboxedCommands`](/docs/ja/settings-reference#sandbox-allowunsandboxedcommands) 設定です77 * **Overrides**:サンドボックス内で失敗したコマンドを、サンドボックス外での実行にフォールバックできるかどうかを選択します。これは [`allowUnsandboxedCommands`](/docs/ja/settings-reference#sandbox-allowunsandboxedcommands) 設定です
35 * **Config**: 解決された sandbox 設定を表示します78 * **Config**:解決済みのサンドボックス設定を表示します
36 79
37 パネルに Dependencies タブのみが表示される場合、必須パッケージが不足しています。[Linux と WSL2 のセットアップ](#set-up-linux-and-wsl2)で説明されているようにインストールし、Claude Code を再起動して、`/sandbox` を再度実行してください。80 パネルに Dependencies タブしか表示されない場合は、必須パッケージが不足しています。[Linux と WSL2 のセットアップ](#set-up-linux-and-wsl2)の説明に従ってインストールし、Claude Code を再起動してから、もう一度 `/sandbox` を実行してください。
38 </Step>81 </Step>
39 82
40 <Step title="モードを選択">83 <Step title="モードを選択する">
41 Mode タブで、auto-allow または regular permissions を選択します。Auto-allow は sandbox されたコマンドをプロンプトなしで実行し、regular permissions は、コマンドが sandbox されている場合でも通常の権限プロンプトを保持します。auto-allow モードでどのコマンドがまだプロンプトを表示するかについては、[Sandbox modes](#sandbox-modes) を参照してください。84 Mode タブで、auto-allow または regular permissions を選択します。auto-allow ではサンドボックス化されたコマンドがプロンプトなしで実行され、regular permissions ではコマンドがサンドボックス化されていても通常の権限プロンプトが維持されます。auto-allow モードでもプロンプトが表示されるコマンドについては、[サンドボックスモード](#sandbox-modes)を参照してください。
42 </Step>85 </Step>
43 86
44 <Step title="Bash コマンドを実行">87 <Step title="Bash コマンドを実行する">
45 Claude にコマンド(ビルドやテストスイートなど)を実行するよう依頼します。デフォルトでは、sandbox 内のコマンドは作業ディレクトリ、[ユーザーごとの一時ディレクトリ](/docs/ja/env-vars)、および `--add-dir`、`/add-dir`、または `permissions.additionalDirectories` で[追加したディレクトリ](/docs/ja/permissions#additional-directories-grant-file-access-not-configuration)に書き込むことができます。88 ビルドやテストスイートなどのコマンドを実行するよう Claude に依頼します。デフォルトでは、サンドボックス内のコマンドは、作業ディレクトリ、[ユーザーごとの一時ディレクトリ](/docs/ja/env-vars)、および `--add-dir`、`/add-dir`、`permissions.additionalDirectories` で[追加したディレクトリ](/docs/ja/permissions#additional-directories-grant-file-access-not-configuration)に書き込めます。
46 89
47 コマンドが新しいネットワークドメインを必要とする最初の時間、Claude Code は承認を求めます。[auto モード](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode)では、Claude は代わりに、分類器がそれと一緒にレビューするために、コマンドが必要とするホストを[コマンド自体に](#per-command-allowed-domains-in-auto-mode)名前付けします。90 コマンドが新しいネットワークドメインを初めて必要とするとき、Claude Code は承認を求めるプロンプトを表示します。[auto モード](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode)では代わりに、コマンドが必要とするホストを Claude が[コマンド自体に](#per-command-allowed-domains-in-auto-mode)記載し、分類器がそれをコマンドとともに審査します。
48 91
49 sandbox 内で実行できないコマンドは、通常の権限フローにフォールバックします。Claude Code は、sandbox の外で実行されたコマンドを区別できるように、権限プロンプトを「Bash command」ではなく「Bash command (unsandboxed)」というタイトルにします。sandbox が許可する内容を広げたり狭めたりするには、[Configure sandboxing](#configure-sandboxing) を参照してください。92 サンドボックスが許可する範囲を広げたり狭めたりするには、[サンドボックス化の設定](#configure-sandboxing)を参照してください。
50 93
51 sandbox されたコマンドがコンテナ内で `Operation not permitted` で失敗する場合は、[Troubleshooting](#troubleshooting) の Bubblewrap エントリを参照してください。94 コンテナ内でサンドボックス化されたコマンドが `Operation not permitted` で失敗する場合は、[コンテナ内で Bubblewrap の起動に失敗する](#bubblewrap-fails-to-start-inside-a-container)を参照してください。
52 </Step>95 </Step>
53</Steps>96</Steps>
54 97
55パネルでモードを選択すると、Claude Code はそれをプロジェクトのローカル設定 `.claude/settings.local.json` に保存します。これは現在のプロジェクトに適用されます。Claude Code は、設定をそこに保存するときに、そのファイルをグローバル gitignore に追加します。すべてのプロジェクトで sandbox を有効にするには、ユーザー設定 `~/.claude/settings.json` で [`sandbox.enabled`](/docs/ja/settings-reference#sandbox-enabled) を `true` に設定します。組織内のすべての開発者に対して sandboxing を強制するには、[managed settings](#enforce-sandboxing-with-managed-settings) を使用します。98パネルでモードを選択すると、Claude Code はそれをプロジェクトのローカル設定 `.claude/settings.local.json` に保存します。この設定は現在のプロジェクトに適用されます。Claude Code はそこに設定を保存するときに、そのファイルをグローバル gitignore に追加します。すべてのプロジェクトでサンドボックスを有効にするには、ユーザー設定 `~/.claude/settings.json` で [`sandbox.enabled`](/docs/ja/settings-reference#sandbox-enabled) を `true` に設定します。組織内のすべての開発者にサンドボックス化を強制するには、[管理設定](#enforce-sandboxing-with-managed-settings)を使用します。
56 99
571 つのセッションの設定ファイルに書き込まずに sandbox を変更するには、[`--settings`](/docs/ja/settings#change-a-setting-for-one-session) で Claude Code を開始します。たとえば、このコマンドは、Claude がブロックされたコマンドを sandbox の外で再試行できない sandbox されたセッションを開始します。100設定ファイルに書き込まずに 1 つのセッションだけサンドボックスを変更するには、[`--settings`](/docs/ja/settings#change-a-setting-for-one-session) を付けて Claude Code を起動します。たとえば次のコマンドは、ブロックされたコマンドを Claude がサンドボックス外で再試行できない、サンドボックス化されたセッションを開始します。
58 101
59```bash theme={null}102```bash theme={null}
60claude --settings '{"sandbox": {"enabled": true, "allowUnsandboxedCommands": false}}'103claude --settings '{"sandbox": {"enabled": true, "allowUnsandboxedCommands": false}}'
61```104```
62 105
63<Warning>106<Warning>
64 デフォルトでは、依存関係が不足しているか、プラットフォームがサポートされていないため sandbox を開始できない場合、Claude Code は警告を表示し、sandboxing なしでコマンドを実行します。これをハード失敗にするには、[`sandbox.failIfUnavailable`](/docs/ja/settings-reference#sandbox-failifunavailable) を `true` に設定します。これは、sandboxing をセキュリティゲートとして必要とするマネージド展開を対象としています。107 デフォルトでは、依存関係が不足している、またはプラットフォームがサポートされていないためにサンドボックスを起動できない場合、Claude Code はサンドボックス化せずにコマンドを実行します。代わりに起動時に Claude Code を終了させるには、[`sandbox.failIfUnavailable`](/docs/ja/settings-reference#sandbox-failifunavailable) を `true` に設定します。サンドボックス化をセキュリティゲートとして必須とする管理されたデプロイでは、この設定を使用できます。
65</Warning>108</Warning>
66 109
110<h3 id="confirm-commands-run-inside-the-sandbox">
111 コマンドがサンドボックス内で実行されることを確認する
112</h3>
113
114サンドボックスが機能していることを確認するには、表の各行を実行するよう Claude に依頼します。[`!` プロンプト](#what-runs-outside-the-sandbox)で入力したものは通常サンドボックス外で実行されるため、自分で行を入力してもテストにはなりません。
115
116| コマンド | サンドボックス内での結果 |
117| :- | :- |
118| `touch ~/sandbox-probe` | macOS では `Operation not permitted`、Linux と WSL2 では `Read-only file system` で失敗します |
119| `curl --noproxy '*' https://example.com` | コマンドにはサンドボックスプロキシを迂回する経路がないため、`Could not resolve host` で失敗します |
120
121失敗したコマンドをサンドボックス外で再試行するよう Claude が求めてきた場合は、再試行を拒否してください。`touch` が成功し、ホームディレクトリがサンドボックスでコマンドの書き込みが許可されているディレクトリに含まれていない場合は、`~/sandbox-probe` を削除してください。その後、`/sandbox` を実行して、サンドボックスがオンになっていることと、その依存関係がインストールされていることを確認します。
122
67<h3 id="set-up-linux-and-wsl2">123<h3 id="set-up-linux-and-wsl2">
68 Linux と WSL2 のセットアップ124 Linux と WSL2 のセットアップ
69</h3>125</h3>
70 126
71Linux と WSL2 では、sandbox は 2 つのパッケージに依存しています。127Linux と WSL2 では、サンドボックスは次のパッケージに依存しています。
72 128
73* [`bubblewrap`](https://github.com/containers/bubblewrap): ファイルシステム分離を強制する非特権 sandboxing ツール129* [`bubblewrap`](https://github.com/containers/bubblewrap):ファイルシステムの分離を強制する、特権不要のサンドボックス化ツール
74* [`socat`](http://www.dest-unreach.org/socat/): sandbox プロキシを通じてネットワークトラフィックをルーティングするために使用されるリレー130* [`socat`](http://www.dest-unreach.org/socat/):ネットワークトラフィックをサンドボックスプロキシ経由でルーティングするために使われるリレー
75 131
76ディストリビューションのパッケージマネージャーでインストールします。132ディストリビューションのパッケージマネージャーでインストールします。
77 133
89 </Tab>145 </Tab>
90</Tabs>146</Tabs>
91 147
92依存関係が不足している場合、`/sandbox` の Dependencies タブには、プラットフォームが不足している `ripgrep`、`bubblewrap`、`socat`、および seccomp フィルターが一覧表示されます。Claude Code をインストールして再起動した後、タブが表示されない場合は、すべての依存関係が存在します。148依存関係が不足している場合、`/sandbox` の Dependencies タブには、`ripgrep`、`bubblewrap`、`socat`、seccomp フィルターのうちプラットフォームに不足しているものが一覧表示されます。インストールして Claude Code を再起動した後にこのタブが表示されなければ、すべての依存関係がそろっています。
93 149
94Ripgrep はネイティブ Claude Code バイナリにバンドルされています。seccomp フィルターはオプションであり、Unix ドメインソケットブロッキングを追加します。不足している場合は、`npm install -g @anthropic-ai/sandbox-runtime` でインストールします。150Ripgrep はネイティブの Claude Code バイナリに同梱されています。seccomp フィルターはオプションで、Unix ドメインソケットのブロックを追加します。不足している場合は `npm install -g @anthropic-ai/sandbox-runtime` でインストールしてください。
95 151
96必須の依存関係が不足している場合、Dependencies タブはインストールするまで唯一のタブです。オプションの seccomp フィルターのみが不足している場合、Dependencies タブは他のタブと一緒に表示されます。依存関係チェックはスタートアップ時に実行されるため、パッケージをインストールした後、Claude Code を再起動して `/sandbox` がそれらを検出するようにします。152必須の依存関係が不足している場合、インストールするまで Dependencies タブだけが表示されます。オプションの seccomp フィルターだけが不足している場合は、Dependencies タブが他のタブと並んで表示されます。依存関係のチェックは起動時に実行されるため、`/sandbox` にパッケージを検出させるには、インストール後に Claude Code を再起動してください。
97 153
98<AccordionGroup>154<AccordionGroup>
99 <Accordion title="Ubuntu 24.04 以降: bubblewrap がユーザーネームスペースを作成できるようにする">155 <Accordion title="Ubuntu 24.04 以降:bubblewrap によるユーザー名前空間の作成を許可する">
100 Ubuntu 24.04 以降では、デフォルトの AppArmor ポリシーは、bubblewrap が分離に必要なユーザーネームスペースを作成することを防止します。156 Ubuntu 24.04 以降では、デフォルトの AppArmor ポリシーにより、bubblewrap が分離に必要なユーザー名前空間を作成できません。
101 157
102 WSL2 内を含む、環境がこの制限を強制しているかどうかを確認するには、`sysctl kernel.apparmor_restrict_unprivileged_userns` を実行します。コマンドが `0` を返す場合は、このステップをスキップします。`No such file or directory` エラーが出力される場合、キーは存在せず、このステップをスキップできます。`1` を返す場合は、`bwrap` にこの機能を付与する AppArmor プロファイルを追加します。158 WSL2 内も含め、環境がこの制限を強制しているかどうかを確認するには、`sysctl kernel.apparmor_restrict_unprivileged_userns` を実行します。コマンドが `0` を返す場合は、このステップをスキップしてください。`No such file or directory` エラーが表示される場合は、キーが存在しないため、このステップをスキップできます。`1` を返す場合は、`bwrap` にこの機能を付与する AppArmor プロファイルを追加します。
103 159
104 ```bash theme={null}160 ```bash theme={null}
105 sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'161 sudo tee /etc/apparmor.d/bwrap > /dev/null <<'EOF'
113 EOF169 EOF
114 ```170 ```
115 171
116 プロファイルは `bwrap` 自体にのみ適用され、sandbox 内で実行されるコマンドには適用されません。AppArmor を再度読み込んで適用します。172 このプロファイルは `bwrap` 自体にのみ適用され、サンドボックス内で `bwrap` が実行するコマンドには適用されません。適用するには AppArmor を再読み込みします。
117 173
118 ```bash theme={null}174 ```bash theme={null}
119 sudo systemctl reload apparmor175 sudo systemctl reload apparmor
120 ```176 ```
121 </Accordion>177 </Accordion>
122 178
123 <Accordion title="WSL2 に関する注記">179 <Accordion title="WSL2 に関する注意事項">
124 PowerShell から `wsl -l -v` で WSL バージョンを確認します。`Sandboxing requires WSL2` が表示される場合、ディストリビューションは WSL1 で実行されています。WSL2 にアップグレードするか、sandboxing なしで Claude Code を実行します。180 PowerShell から `wsl -l -v` を実行して WSL のバージョンを確認します。`Sandboxing requires WSL2` と表示される場合、ディストリビューションは WSL1 で実行されています。WSL2 にアップグレードするか、サンドボックス化せずに Claude Code を実行してください。
125 181
126 WSL2 では、WSL は `cmd.exe`、`powershell.exe`、または `/mnt/c/` の下の何かなどの Windows バイナリの起動を Unix ソケット経由で Windows ホストに渡すため、sandbox されたコマンドが 1 つを起動できるかどうかは、sandbox の [Unix ソケット設定](/docs/ja/settings-reference#sandbox-network-allowunixsockets)に従います。オプションの seccomp フィルターをインストールして、最初の場所でソケットをブロックする必要があります。これらの起動を許可するには、`allowAllUnixSockets` を設定します。sandbox から完全に除外するには、コマンドを [`excludedCommands`](/docs/ja/settings-reference#sandbox-excludedcommands) に追加します。182 WSL2 では、`cmd.exe`、`powershell.exe`、または `/mnt/c/` 配下のものなど Windows バイナリの起動を、WSL が Unix ソケット経由で Windows ホストに引き渡します。そのため、サンドボックス化されたコマンドがそれらを起動できるかどうかは、サンドボックスの [Unix ソケット設定](/docs/ja/settings-reference#sandbox-network-allowunixsockets)に従います。そもそもソケットをブロックするには、オプションの seccomp フィルターがインストールされている必要があります。これらの起動を許可するには、`allowAllUnixSockets` を設定します。これにより、サンドボックス化されたコマンドにすべての Unix ソケットが開放されます。
127 </Accordion>183 </Accordion>
128</AccordionGroup>184</AccordionGroup>
129 185
130<h3 id="sandbox-modes">186<h3 id="sandbox-modes">
131 Sandbox modes187 サンドボックスモード
132</h3>188</h3>
133 189
134Claude Code は 2 つの sandbox モードを提供します。どちらでも、sandbox は同じファイルシステムとネットワーク制限を強制します。違いは、sandbox されたコマンドが自動承認されるか、明示的な権限が必要かだけです。190Claude Code には 2 つのサンドボックスモードがあります。どちらのモードでも、サンドボックスは同じファイルシステムとネットワークの制限を強制します。違いは、サンドボックス化されたコマンドが自動承認されるか、明示的な権限が必要かという点だけです。
135 191
136<h4 id="auto-allow-mode">192<h4 id="auto-allow-mode">
137 Auto-allow モード193 auto-allow モード
138</h4>194</h4>
139 195
140コマンドが sandbox できる場合、Claude Code はそれを sandbox 内で実行し、権限なしで自動的に承認します。ネットワークアクセスが許可されていないホストを必要とするコマンドなど、sandbox できないコマンドは、通常の権限フローにフォールバックします。Claude Code は [権限ルール](/docs/ja/permissions)をチェックし、Manual モードでプロンプトを表示して、これらのルールが既に許可していないコマンドをゲートします。196コマンドがサンドボックス内で実行される場合、Claude Code はプロンプトなしでそのコマンドを自動的に承認します。コマンドが [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) に一致するため、または Claude が[サンドボックス外で再試行する](#the-unsandboxed-retry-escape-hatch)ためにサンドボックス外で実行される場合、そのコマンドは通常の[権限フロー](/docs/ja/permissions)を経由します。
197
198許可していないホストに接続するサンドボックス化されたコマンドは、サンドボックス内にとどまります。接続を通すかどうかを誰が決めるかについては、[許可されたドメイン外のホスト](#hosts-outside-your-allowed-domains)で説明しています。
141 199
142auto-allow モードでも、以下が適用されます。200auto-allow モードでも、次の点は引き続き適用されます。
143 201
144* 明示的な [deny ルール](/docs/ja/permissions)は常に尊重されます202* 明示的な[拒否ルール](/docs/ja/permissions)は常に尊重されます
145* [critical path](/docs/ja/permission-modes#critical-paths) をターゲットとする `rm` または `rmdir` コマンドは、通常の権限フローを通じて実行されます203* [重要なパス](/docs/ja/permission-modes#critical-paths)を対象とする `rm` または `rmdir` コマンドは、引き続き通常の権限フローを経由します
146* `Bash(git push *)` のようなコンテンツスコープの [ask ルール](/docs/ja/permissions)は、sandbox されたコマンドでもプロンプトを強制します204* `Bash(git push *)` のような内容を限定した[確認ルール](/docs/ja/permissions)は、サンドボックス化されたコマンドであっても引き続きプロンプトを強制します
147* 裸の `Bash` ask ルール、または同等の `Bash(*)` フォームは、sandbox 内で実行されるコマンドではスキップされます。通常の権限フローにフォールバックするコマンドに適用されます。[plan mode](/docs/ja/permission-modes#analyze-before-you-edit-with-plan-mode) では、ルールはスキップされません。読み取り専用を含む sandbox されたコマンドのプロンプトを表示します。v2.1.212 より前では、スキップは plan mode でも適用されていました205* 単独の `Bash` 確認ルール、またはそれと同等の `Bash(*)` 形式は、サンドボックス化されて実行されるコマンドではスキップされます。通常の権限フローにフォールバックするコマンドには引き続き適用されます。[plan モード](/docs/ja/permission-modes#analyze-before-you-edit-with-plan-mode)では、このルールはスキップされず、読み取り専用のものも含め、サンドボックス化されたコマンドに対してもプロンプトを表示します
148 206
149<Info>207<Info>
150 Auto-allow モードは、権限モード設定とは独立して機能します。3 つの例外があります。[plan mode](/docs/ja/permission-modes#analyze-before-you-edit-with-plan-mode)、[per-command allowed domains](#per-command-allowed-domains-in-auto-mode) を含む auto モードコマンド、および auto モードで sandbox されたコマンドの[サーバー側分類器レビュー](/docs/ja/permission-modes#how-the-classifier-evaluates-actions)です。「accept edits」モードでない場合でも、auto-allow が有効な場合、sandbox されたBash コマンドは自動的に実行されます。これは、sandbox 境界内でファイルを変更する Bash コマンドが、ファイル編集ツールがプロンプトを表示する Manual モードでもプロンプトなしで実行されることを意味します。208 auto-allow モードは権限モードの設定とは独立して動作しますが、例外が 3 つあります。[plan モード](/docs/ja/permission-modes#analyze-before-you-edit-with-plan-mode)、[コマンドごとの許可ドメイン](#per-command-allowed-domains-in-auto-mode)を持つ auto モードのコマンド、そして auto モードでのサンドボックス化されたコマンドに対する[サーバー側の分類器による審査](/docs/ja/permission-modes#how-the-classifier-evaluates-actions)です。「accept edits」モードでなくても、auto-allow が有効な場合、サンドボックス化された Bash コマンドは自動的に実行されます。つまり、ファイル編集ツールであればプロンプトが表示される Manual モードでも、サンドボックスの境界内でファイルを変更する Bash コマンドはプロンプトなしで実行されます。
151 209
152 plan mode では、auto-allow は承認を広げません。Claude Code がコマンドをゲートする方法については、[plan mode](/docs/ja/permission-modes#analyze-before-you-edit-with-plan-mode) を参照してください。v2.1.212 より前では、auto-allow は plan mode でも sandbox されたコマンドをプロンプトなしで実行していました。210 plan モードでは、auto-allow によって承認の範囲は広がりません。計画中に Claude Code がコマンドをどのように制御するかについては、[plan モード](/docs/ja/permission-modes#analyze-before-you-edit-with-plan-mode)を参照してください。
153</Info>211</Info>
154 212
155<h4 id="regular-permissions-mode">213<h4 id="regular-permissions-mode">
156 Regular permissions モード214 regular permissions モード
157</h4>215</h4>
158 216
159すべての Bash コマンドは、sandbox されている場合でも、通常の権限フローを通じて実行されます。これはより多くの制御を提供しますが、より多くの承認が必要です。217すべての Bash コマンドは、サンドボックス化されている場合でも通常の権限フローを経由します。より細かく制御できますが、より多くの承認が必要になります。
160 218
161<h4 id="the-unsandboxed-retry-escape-hatch">219<h4 id="the-unsandboxed-retry-escape-hatch">
162 Unsandboxed retry エスケープハッチ220 サンドボックス外での再試行という抜け道
221</h4>
222
223サンドボックス外での再試行は、サンドボックスと互換性のないツールなど、サンドボックス内で失敗するコマンドのための抜け道です。サンドボックスがネットワーク接続をブロックすると、Claude Code はコマンドの結果の中で拒否されたホストを示すため、Claude は何がブロックされたかを把握できます。Claude は失敗を分析し、`dangerouslyDisableSandbox` パラメーターを付けてコマンドを再試行することがあります。
224
225再試行されたコマンドはサンドボックス外で実行されます。インタラクティブなターミナルセッションでは、誰が承認するかは権限モードによって異なります。
226
227* **`bypassPermissions` モード**:再試行はプロンプトなしで実行されます
228* **Manual モードと `acceptEdits` モード**:「Bash command (unsandboxed)」というタイトルのプロンプトが表示されます
229* **[auto モード](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode)**:別の分類器モデルが基になるコマンドを評価します
230* **`dontAsk` モード**:Claude Code は再試行を拒否します
231* **plan モード**:[計画中に Claude Code がコマンドをどのように制御するか](/docs/ja/permission-modes#analyze-before-you-edit-with-plan-mode)を参照してください
232
233次のルールと設定によって、再試行を誰が承認するかが変わります。
234
235* **一致する許可ルール**:`Bash(curl *)` などの許可ルールがコマンドに一致する場合、そのルールは再試行も承認するため、コマンドはプロンプトなしでサンドボックス外で実行されます
236* **パラメーターに対する確認ルール**:Bash の再試行時にプロンプトを表示させるには、`Bash(dangerouslyDisableSandbox:true)` に対する[確認ルール](/docs/ja/permissions#match-by-input-parameter)を追加します。auto モードと `bypassPermissions` モードでもプロンプトが表示され、このルールは一致する許可ルールより優先されます
237* **[`permissions.blockReadsOutsideWorkingDirectories`](/docs/ja/settings-reference#permissions-blockreadsoutsideworkingdirectories)**:これがオンの間にプロンプトが表示される再試行については、[どのモードでも自動承認されないアクション](/docs/ja/permission-modes#actions-no-mode-auto-approves)で説明しています
238
239<h4 id="turn-off-the-retry-with-strict-sandbox-mode">
240 strict sandbox モードで再試行をオフにする
163</h4>241</h4>
164 242
165互換性がないツールや許可していないホストが必要なツールなど、sandbox 内で実行できないコマンドがあります。Claude Code は、sandbox 違反をブロックされたコマンドの結果で報告し、sandbox が拒否したパスまたはホストに名前を付けるため、Claude は sandbox がブロックしたものを見ます。タスクを失敗させたり、sandboxing をオフにするよう要求したりするのではなく、Claude Code にはエスケープハッチが含まれています。Claude は違反を分析し、`dangerouslyDisableSandbox` パラメーターでコマンドを再試行する場合があります。243[サンドボックス設定](/docs/ja/settings-reference#sandbox-settings)で `"allowUnsandboxedCommands": false` を設定すると、サンドボックス外での再試行を無効にできます。再試行が無効になると、Claude Code は `dangerouslyDisableSandbox` パラメーターを無視します。これにより、サンドボックスが動作している間、Claude が実行するコマンドは `excludedCommands` のエントリに一致しない限りサンドボックス化されます。サンドボックスを起動できないときに Claude Code がコマンドをサンドボックス外で実行しないようにするには、[`failIfUnavailable`](/docs/ja/settings-reference#sandbox-failifunavailable) も設定します。`/sandbox` の **Overrides** タブでは、この設定は **Strict sandbox mode** として表示されます。
166 244
167再試行されたコマンドは sandbox の外で実行されるため、通常の権限フローを通じて実行されます。Manual モードでは確認プロンプトが表示されます。[auto mode](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode) では、分類器は基礎となるコマンドを評価します。[`permissions.blockReadsOutsideWorkingDirectories`](/docs/ja/settings-reference#permissions-blockreadsoutsideworkingdirectories) がオンの場合、sandbox の外で実行するために承認が必要な再試行はプロンプトを表示します。auto mode でも unsandboxed retry のたびにプロンプトを表示するには、`Bash(dangerouslyDisableSandbox:true)` の [ask ルール](/docs/ja/permissions#match-by-input-parameter)を追加します。245ユーザー設定、`--settings`、または管理設定での `false` は、プロジェクトの設定で `true` が設定されていても維持されます。ユーザー設定での `false` によってサンドボックスが管理者必須になることはないため、プロジェクトのその他のサンドボックス設定は引き続き適用されます。v2.1.285 より前は、プロジェクトの `true` がユーザー設定の `false` を上書きしていました。
168 246
169このエスケープハッチは、[sandbox 設定](/docs/ja/settings-reference#sandbox-settings)で `"allowUnsandboxedCommands": false` を設定することで無効にできます。エスケープハッチが無効な場合、Claude Code は `dangerouslyDisableSandbox` パラメーターを無視し、Claude が実行するすべてのコマンドは、`excludedCommands` にリストされていない限り、sandbox 内で実行される必要があります。`/sandbox` **Overrides** タブは、この設定を **Strict sandbox mode** として表示します。247ユーザーまたは管理者が管理設定または `--settings` フラグで再試行を無効にすると、サンドボックスは管理者必須になります。その場合、Claude Code は、`excludedCommands` のエントリも含め、リポジトリのファイル内にあるサンドボックスを緩める設定を無視します。それらの一覧は、[管理者必須のサンドボックスにおけるリポジトリ設定](#repository-settings-under-an-admin-required-sandbox)に記載されています。
170 248
171Strict sandbox mode は、Claude が実行するコマンドに適用されます。[`!` shell-mode プロンプト](/docs/ja/interactive-mode#shell-mode-with-prefix)で自分で入力するコマンドは、セッションが以下のいずれかでない限り、sandbox の外で実行されます。249strict sandbox モードは、Claude が実行するコマンドに適用されます。[`!` シェルモードのプロンプト](/docs/ja/interactive-mode#shell-mode-with-prefix)で自分で入力したコマンドは、セッションが次のいずれかでない限り、サンドボックス外で実行されます。
172 250
173* **[background session](/docs/ja/agent-view)**: strict sandbox mode は shell-mode コマンドもカバーします251* **[バックグラウンドセッション](/docs/ja/agent-view)**:strict sandbox モードはシェルモードのコマンドにも適用されます
174* **[`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ja/env-vars#variables) が設定された Linux セッション**: すべてのコマンドが sandbox されます。shell-mode コマンドを含みます252* **[`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ja/env-vars#variables) が設定された Linux セッション**:シェルモードのコマンドも含め、すべてのコマンドがサンドボックス化されて実行されます
175 253
176v2.1.260 より前では、strict sandbox mode はすべてのセッションで shell-mode コマンドを sandbox していました。254v2.1.260 より前は、strict sandbox モードはすべてのセッションでシェルモードのコマンドをサンドボックス化していました。
177 255
178<h4 id="temporary-directories">256<h4 id="temporary-directories">
179 一時ディレクトリ257 一時ディレクトリ
180</h4>258</h4>
181 259
182ユーザーごとの一時ディレクトリは、作業ディレクトリと一緒に、デフォルトで sandbox 内で書き込み可能です。[ファイルシステム分離を無効にしない](#disable-filesystem-isolation)限り、Claude Code は sandbox されたコマンドの `$TMPDIR` をこのディレクトリに設定するため、一時ファイルを書き込むツールは追加の設定なしで機能します。260デフォルトでは、作業ディレクトリに加えて、ユーザーごとの一時ディレクトリにもサンドボックス内から書き込めます。[ファイルシステムの分離を無効にする](#disable-filesystem-isolation)場合を除き、Claude Code はサンドボックス化されたコマンドに対して `$TMPDIR` をこのディレクトリに設定するため、一時ファイルを書き込むツールは追加の設定なしで動作します。
183 261
184Unsandboxed コマンドは、設定されている場合、シェルの `$TMPDIR` を継承するため、ファイルシステム分離がオンの場合、sandbox されたコマンドと unsandboxed コマンドは `$TMPDIR` を異なるディレクトリに解決します。シェルが `$TMPDIR` を未設定または空のままにしている場合、`$TMPDIR` を参照する unsandboxed コマンドは、[`CLAUDE_CODE_TMPDIR`](/docs/ja/env-vars) オーバーライドを受け取ります。設定していない場合、またはオーバーライドが長いパスの場合は、オペレーティングシステムの一時ディレクトリを受け取るため、変数は空の文字列に展開されません。2 つの間で一時ファイルを渡すには、代わりに作業ディレクトリの下に書き込みます。262サンドボックス化されていないコマンドは、シェルの `$TMPDIR` が設定されていればそれを継承します。そのため、ファイルシステムの分離がオンの間は、サンドボックス化されたコマンドとされていないコマンドで `$TMPDIR` が異なるディレクトリに解決されます。シェルで `$TMPDIR` が未設定または空の場合、`$TMPDIR` を参照するサンドボックス外のコマンドには、[`CLAUDE_CODE_TMPDIR`](/docs/ja/env-vars) による上書き値が渡されます。上書き値を設定していない場合や上書き値が長いパスである場合はオペレーティングシステムの一時ディレクトリが渡されるため、変数が空文字列に展開されることはありません。両者の間で一時ファイルを受け渡すには、代わりに作業ディレクトリ配下に書き込んでください。
185 263
186<h2 id="configure-sandboxing">264<h2 id="configure-sandboxing">
187 サンドボックスの設定265 サンドボックスを設定する
188</h2>266</h2>
189 267
190`settings.json` ファイルを通じてサンドボックスの動作をカスタマイズできます。完全な設定リファレンスについては、[設定](/docs/ja/settings-reference#sandbox-settings)を参照してください。268サンドボックスの動作は `settings.json` ファイルでカスタマイズできます。設定の完全なリファレンスについては、[設定](/docs/ja/settings-reference#sandbox-settings)を参照してください。
191 269
192デフォルトでは、サンドボックス化されたコマンドは現在の作業ディレクトリ、ユーザーごとの一時ディレクトリ、および `--add-dir`、`/add-dir`、または `permissions.additionalDirectories` で[追加したディレクトリ](/docs/ja/permissions#additional-directories-grant-file-access-not-configuration)に書き込むことができます。`kubectl`、`terraform`、`npm` などのサブプロセスコマンドがこれらのディレクトリ外に書き込む必要がある場合は、`sandbox.filesystem.allowWrite` を使用して特定のパスへのアクセスを許可します。270デフォルトでは、サンドボックス化されたコマンドが書き込めるのは、現在の作業ディレクトリ、ユーザーごとの一時ディレクトリ、そして `--add-dir`、`/add-dir`、または `permissions.additionalDirectories` で[追加したディレクトリ](/docs/ja/permissions#additional-directories-grant-file-access-not-configuration)です。`kubectl`、`terraform`、`npm` などのサブプロセスコマンドがこれらのディレクトリの外に書き込む必要がある場合は、`sandbox.filesystem.allowWrite` を使用して特定のパスへのアクセスを付与します。
193 271
194```json theme={null}272```json theme={null}
195{273{
202}280}
203```281```
204 282
205これらのパスは OS レベルで強制されるため、サンドボックス内で実行されるすべてのコマンド(子プロセスを含む)がそれらを尊重します。これは、`excludedCommands` でツールをサンドボックスから完全に除外するのではなく、ツールが特定の場所への書き込みアクセスを必要とする場合の推奨アプローチです。283これらのパスは OS レベルで適用されるため、サンドボックス内で実行されるすべてのコマンドは、その子プロセスも含めてこれらに従います。ツールが特定の場所への書き込みアクセスを必要とする場合は、`excludedCommands` でツールをサンドボックスから完全に除外するのではなく、この方法を使用することを推奨します。
206 284
207複数の[設定スコープ](/docs/ja/settings#settings-precedence)で同じファイルシステム配列を定義する場合、Claude Code はそれらをマージし、1 つのスコープの配列を別のスコープの配列で置き換えるのではなく、すべてのスコープからのパスを組み合わせます。285同じファイルシステム配列を複数の[設定スコープ](/docs/ja/settings#settings-precedence)で定義した場合、Claude Code はそれらをマージし、あるスコープの配列を別のスコープの配列で置き換えるのではなく、すべてのスコープのパスを結合します。[開発者がポリシーを広げないようにする](#keep-developers-from-widening-the-policy)で説明しているロックがエントリを対象としている場合、Claude Code はそのエントリをマージから除外します。
208 286
209CLI で [`--setting-sources`](/docs/ja/cli-reference) を使用するか、Agent SDK で [`settingSources`](/docs/ja/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) を使用してソースを除外する場合、Claude Code はサンドボックス設定を構築する際に、その `sandbox.filesystem` エントリ、`Edit` 権限ルール、および `Read` 拒否ルールを無視します。Claude Code v2.1.246 以降が必要です。287CLI の [`--setting-sources`](/docs/ja/cli-reference) や Agent SDK の [`settingSources`](/docs/ja/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) で設定ソースを除外した場合、Claude Code はサンドボックス設定を構築する際に、そのソースの `sandbox.filesystem` エントリ、`Edit` 権限ルール、`Read` 拒否ルールを無視します。Claude Code v2.1.246 以降が必要です。
210 288
211セッション中にこれらのファイルシステムリストを編集する場合、Claude Code は[実行中のセッションに変更を適用](/docs/ja/settings#when-edits-take-effect)するため、次のサンドボックス化されたコマンドは新しいパスの下で実行されます。289セッション中にこれらのファイルシステムリストを編集すると、Claude Code は[実行中のセッションに変更を適用する](/docs/ja/settings#when-edits-take-effect)ため、次にサンドボックス化されたコマンドは新しいパスのもとで実行されます。
212 290
213パスプレフィックスはパスの解決方法を制御します。291サンドボックスのファイルシステムパスは標準的な規則に従います。`/tmp/build` は絶対パスで、`~/.kube` はホームディレクトリからの相対パスです。これは、絶対パスに `//path`、プロジェクト相対パスに `/path` を使用する [Read と Edit の権限ルール](/docs/ja/permissions#read-and-edit)とは異なります。相対パス、末尾のスラッシュ、ワイルドカードについては、[サンドボックスのパスプレフィックス](/docs/ja/settings-reference#sandbox-path-prefixes)を参照してください。
214 292
215| プレフィックス | 意味 | 例 |293`sandbox.filesystem.denyWrite` と `sandbox.filesystem.denyRead` を使用して書き込みや読み取りのアクセスを拒否することもでき、`sandbox.filesystem.allowRead` を使用して拒否された領域内の特定のパスを再び許可することもできます。読み取りルールが重なる場合は、より狭いパスのルールが適用されます。
216| :- | :- | :- |
217| `/` | ファイルシステムルートからの絶対パス | `/tmp/build` は `/tmp/build` のままです |
218| `~/` | ホームディレクトリからの相対パス | `~/.kube` は `$HOME/.kube` になります |
219| `./` またはプレフィックスなし | プロジェクト設定の場合はプロジェクトルートからの相対パス、またはユーザー設定の場合は `~/.claude` からの相対パス | `.claude/settings.json` の `./output` は `<project-root>/output` に解決されます |
220
221この構文は、絶対パスに `//path` を使用し、プロジェクト相対パスに `/path` を使用する[読み取りおよび編集権限ルール](/docs/ja/permissions#read-and-edit)とは異なります。サンドボックスファイルシステムパスは標準的な規則を使用します。`/tmp/build` は絶対パスです。Claude Code がこれらのパスの末尾のスラッシュまたはワイルドカードをどのように扱うかについては、[サンドボックスパスプレフィックス](/docs/ja/settings-reference#sandbox-path-prefixes)を参照してください。
222 294
223`sandbox.filesystem.denyWrite` と `sandbox.filesystem.denyRead` を使用して書き込みまたは読み取りアクセスを拒否し、`sandbox.filesystem.allowRead` を使用して拒否された領域内の特定のパスを再度許可することもできます。読み取りルールが重複する場合、より狭いパスを持つルールが適用されます。295| ルールの例 | 結果 |
224
225| ルール例 | 結果 |
226| :- | :- |296| :- | :- |
227| `"denyRead": ["~/"]` と `"allowRead": ["~/projects"]` | `~/projects` は読み取り可能で、ホームディレクトリの残りはブロックされたままです。より狭い許可がその拒否された領域の一部を再度開きます |297| `"denyRead": ["~/"]` と `"allowRead": ["~/projects"]` | `~/projects` は読み取り可能で、ホームディレクトリの残りはブロックされたままになります。より狭い許可が、拒否された領域のその部分を再び開きます |
228| `"allowRead": ["~/"]` と `"denyRead": ["~/.env"]` | `~/.env` はブロックされたままで、ホームディレクトリの残りは読み取り可能です。拒否はより広い許可内に保持されるため、広い許可はシークレットを静かに再度公開することはできません |298| `"allowRead": ["~/"]` と `"denyRead": ["~/.env"]` | `~/.env` はブロックされたままで、ホームディレクトリの残りは読み取り可能です。拒否はより広い許可の内側でも維持されるため、広範な許可によってシークレットが気付かないうちに再び公開されることはありません |
229| `"allowRead": ["~/"]` と `"denyRead": ["~/**/.env"]` | ホームディレクトリ下のすべての `.env` はブロックされたままで、残りは読み取り可能です。[ワイルドカード拒否](/docs/ja/settings-reference#sandbox-path-prefixes)は、正確なパスと同じ方法でより広い許可内に保持されます |299| `"allowRead": ["~/"]` と `"denyRead": ["~/**/.env"]` | ホームディレクトリ配下のすべての `.env` はブロックされたままで、残りは読み取り可能です。[ワイルドカードによる拒否](/docs/ja/settings-reference#sandbox-path-prefixes)も、正確なパスと同じようにより広い許可の内側で維持されます |
230 300
231以下の例は、ホームディレクトリ全体からの読み取りをブロックしながら、現在のプロジェクトからの読み取りを許可します。プロジェクトの `.claude/settings.json` に配置してください。相対パス `.` はプロジェクト設定に設定が存在する場合にのみプロジェクトルートに解決されるためです。301以下の例では、現在のプロジェクトからの読み取りを許可しつつ、ホームディレクトリ全体からの読み取りをブロックします。相対パス `.` がプロジェクトルートに解決されるのは設定がプロジェクト設定にある場合のみなので、この設定はプロジェクトの `.claude/settings.json` に配置してください。
232 302
233```json theme={null}303```json theme={null}
234{304{
242}312}
243```313```
244 314
245同じ設定を `~/.claude/settings.json` に配置した場合、`.` は `~/.claude` に解決され、プロジェクトファイルは `denyRead` ルールによってブロックされたままになります。315同じ設定を `~/.claude/settings.json` に配置した場合、`.` は代わりに `~/.claude` に解決され、プロジェクトファイルは `denyRead` ルールによってブロックされたままになります。
316
317作業ディレクトリを読み取り可能に保ちつつ、サンドボックス化されたコマンドによるホームディレクトリやマウントされたボリュームへの読み取りアクセスを拒否するには、パスルールを書く代わりに [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ja/settings-reference#permissions-blockreadsoutsideworkingdirectories) を設定します。
318
319<h3 id="run-commands-outside-the-sandbox-with-excludedcommands">
320 `excludedCommands` でコマンドをサンドボックスの外で実行する
321</h3>
322
323[`sandbox.excludedCommands`](/docs/ja/settings-reference#sandbox-excludedcommands) にコマンドパターンを記載すると、一致するコマンドがサンドボックスの外で実行されます。つまり、ファイルシステムの制限もネットワークプロキシもありません。サンドボックス内では動作せず、完全なアクセス権を委ねても信頼できるツールに使用してください。ディレクトリやホストが 1 つ追加で必要なだけのツールであれば、コマンドをサンドボックス化したままにできる `allowWrite` や `allowedDomains` で動作する場合があります。
324
325この例では、`docker compose` コマンドをサンドボックスから外します。すべてのプロジェクトに適用するには、`~/.claude/settings.json` に保存してください。
326
327```json theme={null}
328{
329 "sandbox": {
330 "enabled": true,
331 "excludedCommands": ["docker compose *"]
332 }
333}
334```
335
336Claude Code は、Bash と Monitor の各呼び出しに対してエントリを照合します。呼び出しとは Claude が送信するコマンドライン全体であり、複数のコマンドが連結されている場合があります。呼び出しがサンドボックスの外に出るかどうかは、以下のルールによって決まります。
337
338* **パターンの末尾は ` *` にする**: エントリは `Bash(...)` の[権限ルール](/docs/ja/permissions#permission-rule-syntax)と同じ構文を使用し、ワイルドカードのないパターンは完全一致になります。`docker` は引数のない `docker` のみに一致します。`docker *` は引数の有無にかかわらず `docker` に一致します
339* **呼び出し内のすべてのコマンドが一致する必要がある**: `npm ci && docker compose build` は、別のエントリが `npm ci` をカバーしていない限り、サンドボックス化されたままです
340* **Claude Code は呼び出しのテキストを照合する**: 内部で `docker` を呼び出すスクリプトや `make` ターゲットは一致せず、`/usr/local/bin/docker` も一致しません
341* **サンドボックス化されたままになる呼び出しがある**: ファイルへのリダイレクト、`cd`、または `$(...)` のようなコマンド置換があると、呼び出し全体がサンドボックス化されたままになります。サンドボックス化されたままになるその他の呼び出しについては、[リファレンスのエントリ](/docs/ja/settings-reference#sandbox-excludedcommands)に記載されています
342* **エントリの保存場所が影響する場合がある**: サンドボックスが[管理者によって必須化](#repository-settings-under-an-admin-required-sandbox)されている間、Claude Code は `.claude/settings.json` と `.claude/settings.local.json` 内のエントリを無視します
343
344除外されたコマンドは、通常の権限フローを経由します。
246 345
247サンドボックス化されたコマンドがホームディレクトリとマウントされたボリュームへの読み取りアクセスを拒否しながら、作業ディレクトリを読み取り可能に保つには、パスルールを記述する代わりに [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ja/settings-reference#permissions-blockreadsoutsideworkingdirectories) を設定します。346* [読み取り専用コマンド](/docs/ja/permissions#read-only-commands)と、許可ルールでカバーされているコマンドは、プロンプトなしで実行されます
347* auto モードでは、その他の除外されたコマンドを分類器がレビューします
348* `bypassPermissions` モードでは、除外されたコマンドは確認ルールに一致しない限りプロンプトなしで実行されます
349
350エントリが一致することを確認するには、Manual モードに切り替えて、`docker compose up -d` のような何かを変更する一致コマンドを実行するよう Claude に依頼します。権限プロンプトのタイトルは「Bash command (unsandboxed)」になります。
351
352<Warning>
353 除外されたコマンドは、ユーザーの完全なアクセス権で実行されます。`docker *` のような広範なエントリは、そのツールができることすべてをカバーします。インタープリター、作業ディレクトリ内のスクリプト、またはそこにあるファイルに作用するツール(`docker compose` が compose ファイルに対して行うように)をカバーするパターンを書くと、Claude はそのファイルを書き込み、その後サンドボックスの外で実行できてしまいます。パターンを狭くするほど、Claude がサンドボックスの外で実行できるものは少なくなります。
354</Warning>
248 355
249<h3 id="disable-filesystem-isolation">356<h3 id="disable-filesystem-isolation">
250 ファイルシステム分離を無効化357 ファイルシステム分離を無効にする
251</h3>358</h3>
252 359
253`sandbox.filesystem.disabled` を `true` に設定して、ネットワーク分離を保持しながらファイルシステム分離をスキップします。以下の例は、ネットワークドメインの許可リストを保持しながらファイルシステム分離をオフにします。360`sandbox.filesystem.disabled` を `true` に設定すると、ネットワーク分離を維持したままファイルシステム分離をスキップできます。以下の例では、ネットワークドメインの許可リストを維持したまま、ファイルシステム分離をオフにします。
254 361
255```json theme={null}362```json theme={null}
256{363{
266}373}
267```374```
268 375
269サンドボックスには 2 つの独立したレイヤーがあります。[ファイルシステム分離](#filesystem-isolation)はサンドボックス化されたコマンドが読み取りおよび書き込みできるパスを制御し、[ネットワーク分離](#network-isolation)はそれらが到達できるドメインを制御します。ファイルシステムレイヤーがオフの場合、サンドボックス化されたコマンドはホストファイルシステムへの無制限の読み取りおよび書き込みアクセスを取得しますが、ネットワーク出力は許可されたドメインに限定されたままです。レイヤーをオフにするのは、コマンドが書き込む内容ではなく、コマンドが接続する場所を制御するためにサンドボックスを使用する場合です。376サンドボックスには独立した 2 つのレイヤーがあります。[ファイルシステム分離](#filesystem-isolation)はサンドボックス化されたコマンドが読み書きできるパスを制御し、[ネットワーク分離](#network-isolation)はそれらが到達できるドメインを制御します。ファイルシステムレイヤーをオフにすると、サンドボックス化されたコマンドはホストのファイルシステムに対して無制限の読み書きアクセスを得ますが、ネットワークの送信先は許可したドメインに限定されたままです。コマンドが何を書き込むかではなく、どこに接続するかを制御する目的でサンドボックスを使う場合に、このレイヤーをオフにしてください。
270 377
271設定はデフォルトでオフであり、サンドボックスが実行されるプラットフォーム(macOS、Linux、WSL2)に適用されます。Claude Code v2.1.216 以降が必要です。378`sandbox.filesystem.disabled` のデフォルトは `false` です。Claude Code v2.1.216 以降が必要です。
272 379
273<Warning>380<Warning>
274 ファイルシステム分離がオフで、コマンドが自動許可される場合、サンドボックス化されたコマンドは、後続のコマンドが実行または読み取るファイル(シェルスタートアップファイル、`$PATH` 上の実行可能ファイル、`~/.claude/settings.json` など)を書き込み、次の実行時に独自のアクセスを拡大するために使用できます。`filesystem.disabled` を `true` に設定するのは、独自のアクセスをエスカレートしないと信頼できるワークロードのみです。[`allowManagedDomainsOnly`](#keep-developers-from-widening-the-policy) でネットワークドメインをロックするとリスクを狭めますが、そのロックはサンドボックス内で実行されるコマンドにのみ適用されるため、リスクは完全には除去されません。381 ファイルシステム分離がオフでコマンドが自動許可されている場合、サンドボックス化されたコマンドは、シェルの起動ファイル、`$PATH` 上の実行ファイル、`~/.claude/settings.json` など、後続のコマンドが実行または読み取るファイルを書き込み、それを利用して次回の実行時に自身のアクセス権を広げることができます。`filesystem.disabled` を `true` に設定するのは、自身のアクセス権を昇格させないと信頼できるワークロードに限定してください。[`allowManagedDomainsOnly`](#keep-developers-from-widening-the-policy) でネットワークドメインをロックするとリスクは狭まりますが、このロックはサンドボックス内で実行されるコマンドにのみ適用されるため、リスクがなくなるわけではありません。
275</Warning>382</Warning>
276 383
277<h4 id="which-settings-can-disable-it">384<h4 id="which-settings-can-disable-it">
278 どの設定がそれを無効化できるか385 無効にできる設定
279</h4>386</h4>
280 387
281ファイルシステム分離をオフにするとサンドボックス化されたコマンドが実行できることが拡大するため、Claude Code は `filesystem.disabled` をこれらの設定ソースからのみ尊重します。388ファイルシステム分離をオフにすると、サンドボックス化されたコマンドができることが広がるため、Claude Code は以下の設定ソースからの `filesystem.disabled` のみを尊重します。
282 389
283* ユーザー設定、管理設定、および `--settings` CLI フラグはそれを設定できます。`.claude/settings.json` と `.claude/settings.local.json` のプロジェクト設定はできないため、チェックアウトされたプロジェクトはファイルシステム分離をオフにすることはできません。390* ユーザー設定、管理設定、および `--settings` CLI フラグで設定できます。`.claude/settings.json` と `.claude/settings.local.json` のプロジェクト設定では設定できないため、チェックアウトしたプロジェクトがファイルシステム分離をオフにすることはできません。
284* 管理設定が `sandbox.filesystem` をまったく設定するか、`"mode": "deny"` を持つ `sandbox.credentials.files` エントリをリストする場合、管理設定のみがキーを設定できます。これにより、管理者がデプロイしたファイルシステム制限が有効に保たれます。そのようなデプロイを緩和するには、管理設定で `"disabled": true` を設定します。391* 管理設定が `sandbox.filesystem` を何らかの形で設定している場合、または `"mode": "deny"` の `sandbox.credentials.files` エントリを記載している場合は、管理設定のみがこのキーを設定できます。これにより、管理者がデプロイしたファイルシステムの制限が有効なまま維持されます。そのようなデプロイを緩和するには、管理設定で `"disabled": true` を設定します。
285* [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ja/env-vars) が設定されている場合、Claude Code は管理設定を含むすべてのソースから `filesystem.disabled` を無視し、ファイルシステム分離をオンに保ちます。392* [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ja/env-vars) が設定されている場合、Claude Code は管理設定を含むすべてのソースからの `filesystem.disabled` を無視し、ファイルシステム分離をオンのまま維持します。
286 393
287管理された `credentials.files` エントリが `filesystem.disabled` をピンするかどうか(キーを管理設定にロックして開発者がファイルシステム分離をオフにできないようにする)は、エントリの `mode` とサンドボックスの開始時にエントリに何が起こるかによって異なります。394[有効な](/docs/ja/settings-reference#invalid-credential-entries-in-managed-settings) `mask` エントリは、起動時に Claude Code がそのエントリについて [`deny` にフォールバック](#mask-credential-files)した場合でも、このキーを固定しません。認証情報ディレクトリのようにマスクできないパスは、管理設定で明示的な `deny` エントリとして記載してください。これによりキーが固定されます。
288
289| 管理エントリ | `filesystem.disabled` をピンする | 分離がオフの場合にファイルを保護するもの |
290| - | - | - |
291| `"mode": "deny"` | はい | なし。読み取りブロックはファイルシステムレイヤーの一部です |
292| `"mode": "mask"`、マスクとして適用 | いいえ | マスキング自体。Linux と WSL2 の[センチネルコピーとプロキシ](#mask-credential-files)、macOS のサンドボックス独自の読み取りルール |
293| `"mode": "mask"`、[セットアップで `deny` にフォールバック](#mask-credential-files) | いいえ | なし、`deny` と同じです。マスクできないパス(ディレクトリなど)を明示的な `deny` エントリとしてリストします。これはキーをピンします |
294| `"mode": "mask"`、[検証によって `deny` に低下](/docs/ja/managed-settings#invalid-entries-in-managed-settings) | はい、明示的な `deny` のように | なし、`deny` と同じです |
295
296フォールバックはサンドボックスの開始時に発生し、Claude Code が既に設定を読み込んだ後にピンチェックが実行されるため、フォールバックされたエントリはピンしません。検証は設定の読み込み中に無効なエントリを `deny` に書き直すため、低下したエントリは `deny` として記述したものと同じようにピンします。
297 395
298<h4 id="what-changes-when-filesystem-isolation-is-off">396<h4 id="what-changes-when-filesystem-isolation-is-off">
299 ファイルシステム分離がオフの場合に何が変わるか397 ファイルシステム分離がオフのときに変わること
300</h4>398</h4>
301 399
302`filesystem.disabled` を設定すると、ファイルシステムレイヤー自体が強制する保護が解除されます。他のレイヤーが強制する保護は引き続き適用されます。400`filesystem.disabled` を設定すると、ファイルシステムレイヤー自体が適用している保護が解除されます。他のレイヤーが適用している保護は引き続き適用されます。
303 401
304| 保護 | ファイルシステム分離がオフの場合 |402| 保護 | ファイルシステム分離がオフの場合 |
305| - | - |403| - | - |
306| `filesystem.denyRead` と [`credentials.files`](#protect-credentials) `deny` 読み取りブロック | 強制されません。ファイルシステムレイヤーは両方を適用します |404| `filesystem.denyRead` と [`credentials.files`](#protect-credentials) の `deny` による読み取りブロック | 適用されません。どちらもファイルシステムレイヤーが適用しています |
307| `credentials.envVars` `deny` と `mask` エントリ | 強制されます。環境変数スクラビングはファイルシステムレイヤーから独立しています |405| `credentials.envVars` の `deny` と `mask` エントリ | 適用されます。環境変数の除去はファイルシステムレイヤーから独立しています |
308| [`credentials.files` `mask` エントリ](#mask-credential-files)がマスクとして適用 | 強制されます。マスキングはファイルシステムレイヤーから独立しています。[`deny` にフォールバック](#mask-credential-files)したエントリは強制されません。`deny` エントリと同じです |406| マスクとして適用された [`credentials.files` の `mask` エントリ](#mask-credential-files) | 適用されます。マスキングはファイルシステムレイヤーから独立しています。[`deny` にフォールバックした](#mask-credential-files)エントリは、他の `deny` エントリと同様に適用されません |
309 407
310他に 2 つのことが変わります。408その他に 2 つの点が変わります。
311 409
312* サンドボックス化されたコマンドは、ユーザーごとの一時ディレクトリではなく、シェルの `$TMPDIR` を継承します。すべての一時ディレクトリは書き込み可能で、Claude Code はコマンドをユーザーごとの一時ディレクトリにリダイレクトしなくなるためです。410* サンドボックス化されたコマンドは、ユーザーごとの一時ディレクトリではなく、シェルの `$TMPDIR` を継承します。すべての一時ディレクトリが書き込み可能になり、Claude Code がコマンドをユーザーごとの一時ディレクトリにリダイレクトしなくなるためです。
313 411
314 Linux では、変数は親シェルでしばしば設定されていません。Bash ツールのガイダンスは、`$TMPDIR` に依存するのではなく、`mktemp -d` でスクラッチディレクトリを作成するよう Claude に指示します。412 Linux では、親シェルでこの変数が設定されていないことがよくあります。Bash ツールのガイダンスは、`$TMPDIR` に頼るのではなく `mktemp -d` で作業用ディレクトリを作成するよう Claude に指示します。
315* [`autoAllowBashIfSandboxed`](/docs/ja/settings-reference#sandbox-autoallowbashifsandboxed) は引き続きデフォルトで `true` であるため、サンドボックス化されたコマンドはプロンプトなしで実行され続けます。プロンプトを表示するには `false` に設定します。413* [`autoAllowBashIfSandboxed`](/docs/ja/settings-reference#sandbox-autoallowbashifsandboxed) のデフォルトは引き続き `true` であるため、サンドボックス化されたコマンドはプロンプトなしで実行され続けます。サンドボックス化されたコマンドでプロンプトを表示するには、`false` に設定します。
316 414
317<h3 id="protect-credentials">415<h3 id="protect-credentials">
318 認証情報を保護416 認証情報を保護する
319</h3>417</h3>
320 418
321`sandbox.credentials` 設定は、サンドボックス化されたコマンドから保護するための認証情報ファイルと環境変数を宣言します。各エントリはファイルパスまたは環境変数と `mode` に名前を付けます。専用の `credentials` ブロックは、認証情報ルールを一緒にグループ化し、一般的なファイルシステムルールから分離します。419`sandbox.credentials` 設定では、サンドボックス化されたコマンドから保護する認証情報ファイルと環境変数を宣言します。各エントリには、ファイルパスまたは環境変数と、`mode` を指定します。専用の `credentials` ブロックを使うことで、認証情報のルールをまとめて、一般的なファイルシステムのルールとは分けて管理できます。
322 420
323`"mode": "deny"` を持つエントリの場合、ファイルパスはサンドボックス内での読み取りに対して拒否されます。これは `filesystem.denyRead` が適用する制限と同じであり、環境変数は各サンドボックス化されたコマンドの実行前に設定解除されます。ファイル保護はファイルシステムレイヤーの一部であるため、[ファイルシステム分離を無効化](#disable-filesystem-isolation)した場合は適用されません。環境変数保護は引き続き適用されます。421`"mode": "deny"` のエントリでは、ファイルパスはサンドボックス内での読み取りが拒否され(`filesystem.denyRead` が適用するのと同じ制限)、環境変数はサンドボックス化された各コマンドの実行前に未設定にされます。ファイルの保護はファイルシステムレイヤーの一部であるため、[ファイルシステム分離を無効にした](#disable-filesystem-isolation)場合は適用されませんが、環境変数の保護は引き続き適用されます。
324 422
325以下の例は AWS 認証情報ファイルと SSH ディレクトリの読み取りをブロックし、`GITHUB_TOKEN` と `NPM_TOKEN` をサンドボックス化されたコマンドの環境から削除します。423以下の例では、AWS の認証情報ファイルと SSH ディレクトリの読み取りをブロックし、サンドボックス化されたコマンドの環境から `GITHUB_TOKEN` と `NPM_TOKEN` を削除します。
326 424
327```json theme={null}425```json theme={null}
328{426{
342}440}
343```441```
344 442
345環境変数エントリとファイルエントリは、[認証情報をマスク](#mask-credentials)の下で説明されている `"mode": "mask"` も受け入れます。443環境変数のエントリとファイルのエントリは `"mode": "mask"` も受け付けます。これについては[認証情報をマスクする](#mask-credentials)で説明します。
346 444
347ファイルパスは `sandbox.filesystem.*` 設定と同じ[プレフィックスルール](/docs/ja/settings-reference#sandbox-path-prefixes)に従います。445ファイルパスは、`sandbox.filesystem.*` 設定と同じ[プレフィックスのルール](/docs/ja/settings-reference#sandbox-path-prefixes)に従います。
348 446
349Claude Code はセッションが読み込むすべての[設定スコープ](/docs/ja/settings#settings-precedence)から `deny` エントリをマージします。`deny` エントリはアクセスを狭めるだけなので、任意のスコープが 1 つを追加できますが、別のスコープが追加したものを削除できるスコープはありません。447Claude Code は、セッションが読み込むすべての[設定スコープ](/docs/ja/settings#settings-precedence)の `deny` エントリをマージします。`deny` エントリはアクセスを狭めることしかしないため、どのスコープでも追加できますが、別のスコープが追加したエントリをどのスコープも削除することはできません。
350 448
351[設定ソースを除外](#configure-sandboxing)する場合。449[設定ソースを除外した](#configure-sandboxing)場合:
352 450
353* **プロジェクトまたはローカル設定**: Claude Code はそれらの `credentials` エントリを適用しません。Claude Code v2.1.246 以降が必要です。451* **プロジェクト設定またはローカル設定**: Claude Code はそれらの `credentials` エントリをいずれも適用しません。Claude Code v2.1.246 以降が必要です。
354* **ユーザー設定**: Claude Code は `~/.claude/settings.json` の `deny` エントリを引き続き適用し、その[ファイル `mask` エントリ](#mask-credential-files)を制限として保持しますが、その[環境変数 `mask` エントリ](#mask-environment-variables)を削除します。452* **ユーザー設定**: Claude Code は `~/.claude/settings.json` 内の `deny` エントリを引き続き適用し、[ファイルの `mask` エントリ](#mask-credential-files)も制限として維持します(ただし、それらはプロキシが実際の値に置換することを認可しなくなります)が、[環境変数の `mask` エントリ](#mask-environment-variables)は破棄します。
355 453
356組み込みの認証情報拒否リストはないため、リストしたファイルと変数のみが制限されます。454組み込みの認証情報拒否リストはないため、制限されるのは記載したファイルと変数のみです。
357 455
358`sandbox.credentials` はサンドボックス化された Bash コマンドのみに影響します。サンドボックスに関係なくすべてのサブプロセスから認証情報を削除するには、[`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ja/env-vars) を設定します。456`sandbox.credentials` は、サンドボックス化された Bash コマンドにのみ影響します。サンドボックス化にかかわらずすべてのサブプロセスから認証情報を除去するには、[`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ja/env-vars) を設定します。
359 457
360<h3 id="mask-credentials">458<h3 id="mask-credentials">
361 認証情報をマスク459 認証情報をマスクする
362</h3>460</h3>
363 461
364マスキングは、[認証情報を保護](#protect-credentials)の下の `deny` エントリよりもさらに進みます。認証情報をブロックする代わりに、Claude Code はサンドボックス化されたコマンドにプレースホルダーであるセンチネルを表示し、[サンドボックスプロキシ](#network-isolation)は許可したホストへのアウトバウンドリクエストで実際の値を交換します。ファイルの場合、置換は Linux と WSL2 の動作です。[macOS はファイルをブロック](#mask-credential-files)します。462認証情報をマスクすると、Claude Code はサンドボックス化されたコマンドにセンチネルと呼ばれるセッションごとのプレースホルダーを見せ、[サンドボックスプロキシ](#network-isolation)が許可したホストへの送信リクエストで実際の値に置き換えます。[認証情報を保護する](#protect-credentials)で説明した `deny` エントリは、代わりに認証情報をブロックします。macOS 上のファイルについては、Claude Code はマスクする代わりに[ファイルをブロックします](#mask-credential-files)。
365 463
366<h4 id="mask-environment-variables">464環境変数のマスキングには Claude Code v2.1.199 以降が必要です。すべてのフィールドは [`sandbox.credentials`](/docs/ja/settings-reference#sandbox-credentials) のリファレンスに記載されています。
367 環境変数をマスク
368</h4>
369 465
370`"mode": "mask"` は認証情報を保護しながら、それで認証するツールが機能し続けるようにします。`deny` は変数を完全に削除し、これは `gh` や `npm` などの必要なツールも破壊します。Claude Code v2.1.199 以降が必要です。466マスキングには以下が必要です。
371 467
372`mask` を使用すると、サンドボックス化されたコマンドは実際の値の代わりにセッションごとのセンチネル値を見ます。各 `mask` エントリは `injectHosts` をリストでき、実際の値が到達できるホストです。リクエストがそれらの 1 つに対してサンドボックスを離れるとき、[サンドボックスプロキシ](#network-isolation)はセンチネルを実際の値に置き換えます。コマンドとそれがログに記録するものは実際の認証情報を保持しませんが、そのリクエストは引き続き認証されます。468* **TLS 終端**: プロキシはリクエストの内容の中で実際の値を置換するため、その内容を参照できる必要があります。プロキシ自体が TLS を終端するように、[`network.tlsTerminate`](/docs/ja/settings-reference#sandbox-network-tlsterminate) を設定してください。これを設定しない場合、マスキングは何も漏らさずに失敗します。コマンドにはセンチネルしか見えませんが、センチネルはそのままサーバーに届き、認証が失敗します。Claude Code は起動時にこの設定ミスを報告します。
469* **許可された送信先**: 各 `mask` エントリには `injectHosts`(実際の値の送信先として許可されるホスト)を記載できます。プロキシは[ドメイン許可リスト](#network-isolation)が許可する接続でのみ注入を行うため、各 `injectHosts` のホストは `network.allowedDomains` を通じても到達可能である必要があります。`injectHosts` のない `mask` エントリの場合、プロキシは `network.allowedDomains` 内のすべてのホストへのリクエストで実際の値に置換します。
470* **信頼できる設定スコープ**: マスキングはプロキシが実際の認証情報をどこかに送信することを認可するため、Claude Code は `mask` エントリ、`network.tlsTerminate`、[`credentials.allowPlaintextInject`](/docs/ja/settings-reference#sandbox-credentials-allowplaintextinject)、`awsPairs`、`sigv4` を、ユーザー設定、管理設定、および `--settings` フラグからのみ尊重します。リポジトリの `.claude/settings.json` や `.claude/settings.local.json` 内のこれらは無視されます。管理者がサーバー管理設定を通じて `mask` エントリ、`network.tlsTerminate`、または `credentials.allowPlaintextInject` を配布する場合、それらは[承認が必要な設定](/docs/ja/server-managed-settings#security-approval-dialogs)として扱われます。
373 471
374プロキシはリクエストコンテンツ内の認証情報を置き換えるため、それらを見る必要があります。[`network.tlsTerminate`](/docs/ja/settings-reference#sandbox-network-tlsterminate) を設定して、プロキシが TLS 自体を終了するようにします。472<h4 id="mask-environment-variables">
375 473 環境変数をマスクする
376それなしでは、マスキングは何も公開せずに失敗します。コマンドはセンチネルのみを見ますが、センチネルはサーバーに変更されずに到達し、認証は失敗します。Claude Code はこの設定ミスをスタートアップで報告します。474</h4>
377
378置換はヘッダーとリクエストボディをカバーします。認証情報自体ではなく、認証情報から派生した署名で認証するリクエストは、プロキシで再署名する必要があります。[AWS リクエストに再署名](#re-sign-aws-requests)は AWS でそれがどのように機能するかをカバーします。
379 475
380プロキシは[ドメイン許可リスト](#network-isolation)が許可する接続にのみ注入するため、各 `injectHosts` 宛先は `network.allowedDomains` を通じても到達可能である必要があります。476環境変数をマスクするには、その `credentials.envVars` エントリに `"mode": "mask"` を設定します。コマンドやそれがログに記録するものが実際の認証情報を保持することはありませんが、リクエストは引き続き認証されます。同じ変数がいずれかのスコープで `deny` として記載されている場合は、`deny` が優先されます。
381 477
382以下の例は 2 つのトークンをマスクします。`GH_TOKEN` は `api.github.com` へのリクエストにのみ置き換えられ、`NPM_TOKEN` は `injectHosts` を持たず、`network.allowedDomains` のすべてのホストへのリクエストで置き換えられます。478以下の例では、2 つのトークンをマスクします。`GH_TOKEN` は `api.github.com` へのリクエストでのみ置換され、`NPM_TOKEN` は `injectHosts` がないため、`network.allowedDomains` 内のすべてのホストへのリクエストで置換されます。
383 479
384```json theme={null}480```json theme={null}
385{481{
399}495}
400```496```
401 497
402<span id="ipv6-destinations-in-injecthosts" />IPv6 宛先は 2 つのリストで異なるスペルを使用してください。各リストは独自のマッチャーを持つためです。498マスキングはデフォルトで値全体を置き換えます。`DATABASE_URL` 接続文字列や JWT のように構造を持つ値には、[`extract`、`decode`、`maskClaims`、`onExtractNoMatch` フィールド](/docs/ja/settings-reference#sandbox-credentials-envvars)を使用して、値を解析するツールが動作し続けるようにしてください。
403
404* **`network.allowedDomains`**: [ドメインリストが使用する括弧形式](#ipv6-addresses-in-domain-lists)(`"[::1]"` など)。プロキシはこのリストをチェックして接続を許可します。
405* **`injectHosts`**: 正規の圧縮形式での裸のアドレス(`"::1"` または `"2001:db8::1"` など)。プロキシは各エントリをコネクションの裸の宛先アドレスと照合し、ポートを無視するため、括弧で囲まれた、ゾーン ID、または異なる圧縮スペルは一致せず、プロキシはそこで認証情報を注入しません。
406
407`claude doctor` は、`injectHosts` エントリが宛先と一致できないことを警告 `Sandbox credential injectHosts entries can never match their destination` でフラグします。このチェックには Claude Code v2.1.229 以降が必要です。
408
409`deny` とは異なり、マスキングはプロキシに実際の認証情報をリストされたホストに送信することを認可するため、Claude Code はユーザーまたは管理者が制御する設定からのみそれを尊重します。ユーザー設定、管理設定、および `--settings` CLI フラグです。Claude Code はリポジトリの `.claude/settings.json` または `.claude/settings.local.json` の `mask` エントリを無視します。これらのファイルでは、`network.tlsTerminate` と [`credentials.allowPlaintextInject`](/docs/ja/settings-reference#sandbox-credentials-allowplaintextinject)(プロキシが暗号化されていないリクエストに認証情報を注入できるようにする設定)も無視します。[ユーザー設定を除外](#configure-sandboxing)する場合、Claude Code は `~/.claude/settings.json` の環境変数 `mask` エントリも削除します。
410 499
411管理者が `mask` エントリ、`network.tlsTerminate`、または `credentials.allowPlaintextInject` をサーバー管理設定を通じて配信する場合、それらは[承認が必要な設定](/docs/ja/server-managed-settings#security-approval-dialogs)としてカウントされます。500<span id="ipv6-destinations-in-injecthosts" />IPv6 の送信先は、2 つのリストで異なる書き方をしてください。
412 501
413同じ変数が任意のスコープで `deny` でリストされている場合、`deny` が優先されます。502* **`network.allowedDomains`**: `"[::1]"` のような角括弧付きの形式
503* **`injectHosts`**: `"::1"` のような、正規の圧縮形式による角括弧なしのアドレス
414 504
415マスキングはデフォルトで変数の全体値を置き換えます。これは裸のトークンに適しています。オプションのエントリフィールド(Claude Code v2.1.224 以降が必要)は、構造を持つ値を処理します。505プロキシはポートを無視して各 `injectHosts` エントリを接続の角括弧なしの送信先アドレスと照合するため、角括弧付き、ゾーン ID 付き、または異なる圧縮方法で書かれたものは決して一致しません。`claude doctor` は、決して一致しないエントリを `Sandbox credential injectHosts entries can never match their destination` という警告で指摘します。このチェックには Claude Code v2.1.229 以降が必要です。
416
417* `extract`: Claude Code が値全体に適用する正規表現。各マッチの 1 グループでキャプチャされたテキストのみを置き換えるため、値を解析するツール(`DATABASE_URL` 接続文字列など)はサンドボックス内で引き続き機能します。パターンは少なくとも 1 つのキャプチャグループを含む必要があります。
418* `onExtractNoMatch` はパターンが何もマッチしない場合に何が起こるかを制御します。
419 * `warn`(デフォルト)は警告を発し、変数を未マスク状態で渡します
420 * `deny` はサンドボックス内で変数を設定解除します
421 * `error` は設定を修正するまでサンドボックスセットアップを停止します
422* `decode: "jwt"`: JSON Web Token(JWT)を保持する変数の場合。Claude Code は値が JWT であることを検証し、それを構造的に有効な偽のトークンに置き換えるため、サンドボックス内のトークンをデコードするコードは機能し続けます。`maskClaims` を追加して、トークン全体を置き換える代わりに個別にマスクするトップレベルペイロードクレームをリストします。他のクレームは読み取り可能なままです。値が JWT として検証されない場合、またはリストされたクレームが一致しない場合、Claude Code は警告を伴って変数を未マスク状態で渡します。`decode` は `extract` と組み合わせることはできません。
423
424設定リファレンスの [`credentials.envVars[]` 行](/docs/ja/settings-reference#sandbox-settings)で完全なフィールドリストを参照してください。
425 506
426<h4 id="re-sign-aws-requests">507<h4 id="re-sign-aws-requests">
427 AWS リクエストに再署名508 AWS リクエストを再署名する
428</h4>509</h4>
429 510
430AWS リクエストはリクエストコンテンツ上に SigV4 署名を持つため、`AWS_ACCESS_KEY_ID` と `AWS_SECRET_ACCESS_KEY` を一緒にマスクします。プロキシはアクセスキーのセンチネルで SigV4 リクエストを検出し、実際の値を置き換えた後に再署名します。シークレットのみをマスクすると、プレースホルダーで署名されたリクエストが残り、プロキシが検出できないため、AWS で失敗します。Claude Code はこのケースをスタートアップで警告しますが、アクセスキー ID のみがマスクされている場合は警告しません。プロキシが再署名できない検出されたリクエスト(`x-amz-date` ヘッダーが欠落しているなど)は、壊れた署名でサーバーに到達する代わりに、プロキシエラーで失敗します。511AWS リクエストはリクエストの内容に対する SigV4 署名を持つため、`AWS_ACCESS_KEY_ID` と `AWS_SECRET_ACCESS_KEY` は一緒にマスクしてください。プロキシはアクセスキーの[センチネル](#mask-credentials)によって SigV4 リクエストを検出し、実際の値でリクエストを再署名します。これには Claude Code v2.1.221 以降が必要です。シークレットのみをマスクすると、リクエストはプロキシが検出できないプレースホルダーで署名されるため、AWS で失敗します。
431
432Claude Code は、全体値をマスクする場合、従来の `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、および `AWS_SESSION_TOKEN` 変数を 1 つの認証情報に自動的にリンクします。AWS 認証情報が他の名前の変数に存在する場合、[`credentials.awsPairs`](/docs/ja/settings-reference#sandbox-credentials-awspairs) で自分でグループ化します。これには Claude Code v2.1.224 以降が必要です。この例は、既に `MY_KEY_ID`、`MY_SECRET_KEY`、および `MY_SESSION_TOKEN` を全体値としてマスクする設定にペアリングを追加します。上記の[マスキング設定](#mask-environment-variables)のように。
433
434```json theme={null}
435{
436 "sandbox": {
437 "credentials": {
438 "awsPairs": [
439 {
440 "accessKeyIdVar": "MY_KEY_ID",
441 "secretAccessKeyVar": "MY_SECRET_KEY",
442 "sessionTokenVar": "MY_SESSION_TOKEN"
443 }
444 ]
445 }
446 }
447}
448```
449
450各エントリは以下のルールに従います。
451
452* `accessKeyIdVar` と `secretAccessKeyVar` はアクセスキー ID とシークレットキーを保持するマスク済み `envVars` エントリに名前を付けます。オプションの `sessionTokenVar` は一時認証情報のセッショントークンを保持するエントリに名前を付けます。設定されている場合、プロキシは再署名されたリクエストで実際のトークンを `x-amz-security-token` として送信します。
453* 名前付きの各変数は、`extract` または `decode` なしで全体値をマスクする `mask` エントリである必要があります。
454* プロキシはアクセスキー ID エントリの `injectHosts` にリストされたホストでリクエストに再署名します。
455* ペアで従来の変数のいずれかに名前を付けると、自動ペアリングが置き換えられます。
456 512
457`mask` エントリと同様に、`awsPairs` はユーザー設定、管理設定、および `--settings` CLI フラグからのみ尊重されます。513Claude Code は、慣例的な変数である `AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、`AWS_SESSION_TOKEN` の値全体をマスクすると、それらを自動的に 1 つの認証情報として関連付けます。AWS の認証情報が別の名前の変数にある場合は、[`credentials.awsPairs`](/docs/ja/settings-reference#sandbox-credentials-awspairs) でグループ化してください。これには Claude Code v2.1.224 以降が必要です。
458 514
4593 つの AWS リクエスト形式は、プロキシが再計算できない署名を持ちます。そのようなリクエストがマスク済みペアのプレースホルダーで署名されている場合、プロキシは壊れた署名を転送するのではなく失敗します。未マスク認証情報で署名されたリクエストは影響を受けません。[`credentials.sigv4`](/docs/ja/settings-reference#sandbox-credentials-sigv4) 設定(Claude Code v2.1.224 以降が必要)は、フォームごとにこれを緩和します。フォームのキーを `passthrough` に設定すると、リクエストはプレースホルダー派生署名で転送されるため、呼び出しツールは AWS 独自の拒否応答を受け取る代わりにプロキシエラーを受け取ります。`awsPairs` と同様に、`sigv4` はユーザー設定、管理設定、および `--settings` CLI フラグからのみ尊重されます。515ストリーミングアップロード、署名付き URL、SigV4A リクエストは、プロキシが再計算できない署名を持ちます。これらのリクエストがマスクされたペアのプレースホルダーで署名されている場合、プロキシは壊れた署名を転送するのではなく、リクエストを失敗させます。マスクされていない認証情報で署名されたリクエストが影響を受けることはありません。これらのリクエスト形式のいずれかを代わりに転送するには、[`credentials.sigv4`](/docs/ja/settings-reference#sandbox-credentials-sigv4) を使用します。これには Claude Code v2.1.224 以降が必要です。AWS は依然としてリクエストを拒否するため、呼び出し元のツールはプロキシエラーではなく AWS 自身の拒否レスポンスを受け取ります。
460
461| リクエスト形式 | `sigv4` キー | プロキシが再署名できない理由 |
462| :- | :- | :- |
463| aws-chunked ストリーミングアップロード | `streaming` | チャックごとの署名はシード署名から連鎖するため、再署名にはボディの書き直しが必要です |
464| 署名済み URL | `presigned` | 署名は URL 自体に存在し、`Authorization` ヘッダーはありません |
465| SigV4A 非対称署名 | `sigv4a` | 再計算する共有キー HMAC がありません |
466 516
467<h4 id="mask-credential-files">517<h4 id="mask-credential-files">
468 認証情報ファイルをマスク518 認証情報ファイルをマスクする
469</h4>519</h4>
470 520
471ファイルエントリも `"mode": "mask"` を受け入れます。これには Claude Code v2.1.221 以降が必要です。サンドボックス化されたコマンドが見るものはプラットフォームに依存します。521認証情報ファイルをマスクするには、その `credentials.files` エントリに `"mode": "mask"` を設定します。ファイルのマスキングには Claude Code v2.1.221 以降が必要です。サンドボックス化されたコマンドに何が見えるかは、プラットフォームによって異なります。
472 522
473* **Linux と WSL2**: サンドボックス化されたコマンドはファイルのセンチネルコピーを読み取ります。シークレットがプレースホルダー値に置き換えられたスタンドイン。[サンドボックスプロキシ](#network-isolation)は出力時に実際の値を置き換えます。523* **Linux と WSL2**: サンドボックス化されたコマンドはファイルの[センチネル](#mask-credentials)コピーを読み取り、プロキシが送信リクエストで実際の値に置換します。
474* **macOS**: サンドボックス化されたコマンドはリストされたファイルを読み取ることができません。Claude Code はセンチネルコピーを構築せず、出力時に何も置き換えないため、ファイルで認証するツールはサンドボックス内で機能しません。`deny` と同じ効果です。`deny` エントリとは異なり、[ファイルシステム分離を無効化](#disable-filesystem-isolation)した場合でも読み取りブロックは保持されます。524* **macOS**: サンドボックス化されたコマンドはファイルをまったく読み取れません。Claude Code はセンチネルコピーを作成しないため、そのファイルを使って認証するツールはサンドボックス内で動作しません。これは `deny` と同じ効果です。[ファイルシステム分離を無効にした](#disable-filesystem-isolation)場合でも、読み取りブロックは維持されます。
475 525
476すべてのプラットフォームで、Claude Code は [`network.tlsTerminate`](/docs/ja/settings-reference#sandbox-network-tlsterminate) 要件と `injectHosts` を[マスク済み環境変数](#mask-environment-variables)と同じ方法で適用し、リポジトリ設定を同じ方法で無視します。[ユーザー設定を除外](#configure-sandboxing)する場合、Claude Code は `~/.claude/settings.json` のファイル `mask` エントリを制限として保持しますが、エントリはプロキシが実際の値を置き換えることをもはや認可しません。526以下の例では、`~/.config/gh/hosts.yml` に保存された GitHub トークンをマスクします。`extract` パターンはファイルのどの部分がシークレットであるかを示すため、Linux と WSL2 では `gh` が設定の残りの部分を引き続き解析できます。
477
478以下の例は `~/.config/gh/hosts.yml` に保存された GitHub トークンをマスクします。以下で説明される `extract` パターンは、Claude Code にファイルのどの部分がシークレットであるかを伝えます。Linux と WSL2 では、ファイルを読み取るサンドボックス化されたコマンドはトークンの代わりにセンチネルを取得し、プロキシは `api.github.com` へのリクエストで実際のトークンを置き換えます。
479 527
480```json theme={null}528```json theme={null}
481{529{
499}547}
500```548```
501 549
502マスクがアクティブであることを確認するには、Claude にサンドボックス化されたコマンドで `cat ~/.config/gh/hosts.yml` を実行するよう依頼します。Linux と WSL2 では出力はトークンの代わりにセンチネル値を表示し、macOS では読み取りが失敗します。550マスクが有効であることを確認するには、サンドボックス化されたコマンドで `cat ~/.config/gh/hosts.yml` を実行するよう Claude に依頼します。Linux と WSL2 では出力にトークンの代わりにセンチネルが表示され、macOS では読み取りが失敗します。
503
504Linux と WSL2 では、`extract` パターンは `hosts.yml` の残りを読み取り可能に保つものです。Claude Code は正規表現を全体ファイルに適用し、各マッチの 1 グループでキャプチャされたテキストのみを置き換えるため、`gh` は引き続き設定を解析し、トークンのみがプレースホルダーです。`extract` を `.netrc`、JSON、YAML などのツールが解析する構造化ファイルに使用します。パターンは少なくとも 1 つのキャプチャグループを含む必要があります。`extract` なしでは、Claude Code はファイル全体のコンテンツを 1 つのセンチネル値に置き換えます。これは、単一の裸のシークレットを保持し、他に何もないファイルに適しています。
505
506JWT を保持するファイルの場合、`extract` の代わりに、または一緒に `decode: "jwt"` を設定します。`decode` には Claude Code v2.1.224 以降が必要です。Claude Code は組み込みパターンで JWT 候補を見つけるか、設定されている場合は `extract` パターンで見つけ、各候補が JWT であることを検証し、それを構造的に有効な偽のトークンに置き換えるため、サンドボックス内でトークンをデコードするコードは機能し続けます。`maskClaims` を追加して、トークン全体を置き換える代わりに、各検証済みトークン内の名前付きトップレベルペイロードクレームのみをマスクし、他のクレームは読み取り可能なままにします。候補が検証されない場合、またはリストされたクレームが一致しない場合、以下の `onExtractNoMatch` フィールドが結果を管理します。これは、パターンが何もマッチしない場合と同じです。
507
5082 つのオプションフィールドはマッチング動作を改善します。両方は `mode` が `mask` で `extract` または `decode` が設定されている場合にのみ適用されます。macOS では、ファイルシステム分離がオンの場合、Claude Code は `mask` エントリを `deny` として適用します。パターンが実行される前です。これらのフィールドと以下の不一致の結果は、[ファイルシステム分離を無効化](#disable-filesystem-isolation)した場合にのみ macOS で有効になります。
509 551
510* `onExtractNoMatch` はマッチングがファイル内でマスクするものを見つけない場合に何が起こるかを制御します。552`extract` または `decode` がない場合、Claude Code はファイル全体を 1 つのセンチネルに置き換えます。これは、単独のシークレットだけを保持するファイルに適しています。部分的なマスキングと、パターンが何にも一致しない場合の動作を制御するには、[`extract`、`decode`、`maskClaims`、`onExtractNoMatch`、`maskDuplicates` フィールド](/docs/ja/settings-reference#sandbox-credentials-files)を使用してください。
511 553
512 * `warn`(デフォルト)は警告を発し、エントリをスキップするため、サンドボックス化されたコマンドは実際のファイルを未マスク状態で読み取ることができます。デフォルトは認証情報が合法的に存在しない可能性があるケースに適しています。シークレットが存在する可能性があるがパターンが見落とす可能性がある場合は、`deny` を使用します554<Warning>
513 * `deny` はファイルを読み取り不可にします555 照合でマスクするものが見つからなかった場合、`onExtractNoMatch` のデフォルト値である `warn` はエントリをスキップするため、サンドボックス化されたコマンドはマスクされていない実際のファイルを読み取れます。macOS では、ファイルシステム分離がオンのときは常に Claude Code がパターンの実行前に `mask` エントリを `deny` として適用するため、一致しない場合の結果が有効になるのは[ファイルシステム分離がオフ](#disable-filesystem-isolation)の場合のみです。このデフォルトは正当に存在しない場合がある認証情報に適しています。シークレットが存在する可能性があるもののパターンがそれを見逃す可能性がある場合は、[`deny`](/docs/ja/settings-reference#mask-fields-for-files) を使用してください。
514 * `error` は設定を修正するまでサンドボックスセットアップを停止します556</Warning>
515
516 Claude Code は、読み取りブロックが強制されない場合は常に `deny` を `error` として扱います。[ファイルシステム分離を無効化](#disable-filesystem-isolation)した場合、および任意の設定ソースからの `filesystem.allowRead` エントリがファイルのパスを再度開く場合です。
517* `maskDuplicates` は、マッチした各マスク済み認証情報値(`extract` キャプチャまたは `decode` 検証済みトークン)の逐語的コピーも置き換えます。マッチした範囲外で見つかった場合、シークレットが繰り返される場所です。生の部分文字列と照合するため、短いまたは一般的な値はどこでも置き換えられます。長く、高エントロピーのシークレット用に予約します。デフォルト: false。
518 557
519`mask` は単一のファイルに適用されるため、各認証情報ファイルを個別にリストします。Claude Code は `mask` エントリが安全にマスクできない場合にフォールバックして `deny` します。ディレクトリパス、グロブパターン、8 MiB より大きいファイル、または UTF-8 テキストではないファイル。代わりにディレクトリを明示的な `deny` エントリとして記述します。[どの設定がそれを無効化できるか](#which-settings-can-disable-it)の下の表は、各フォームが `filesystem.disabled` をピンするかどうか、およびファイルシステム分離がオフの場合の動作をカバーします。558`mask` は単一のファイルに適用されるため、各認証情報ファイルを個別に記載してください。Claude Code は、安全にマスクできない `mask` エントリ(ディレクトリパス、glob パターン、8 MiB を超えるファイル、UTF-8 テキストではないファイル)については `deny` にフォールバックします。
520 559
521<h2 id="how-sandboxing-works">560<h2 id="how-sandboxing-works">
522 サンドボックス化の仕組み561 サンドボックス化の仕組み
523</h2>562</h2>
524 563
525<h3 id="filesystem-isolation">564<h3 id="filesystem-isolation">
526 ファイルシステム分離565 ファイルシステムの分離
527</h3>566</h3>
528 567
529サンドボックス化された Bash ツールはファイルシステムアクセスを特定のディレクトリに制限します。568サンドボックス化された Bash ツールは、ファイルシステムへのアクセスを特定のディレクトリに制限します。
530 569
531* **デフォルトの書き込み動作**:現在の作業ディレクトリとそのサブディレクトリへの読み取りおよび書き込みアクセス、`--add-dir`、`/add-dir`、または [`permissions.additionalDirectories`](/docs/ja/settings-reference#permissions-additionaldirectories) で追加したディレクトリ、加えて `$TMPDIR` が指すユーザーごとの一時ディレクトリへのアクセス570* **デフォルトの書き込み動作**: 現在の作業ディレクトリとそのサブディレクトリ、`--add-dir`、`/add-dir`、または [`permissions.additionalDirectories`](/docs/ja/settings-reference#permissions-additionaldirectories) で追加したディレクトリ、さらに `$TMPDIR` が指すユーザーごとの一時ディレクトリへの読み取りおよび書き込みアクセス
532* **デフォルトの読み取り動作**:特定の拒否ディレクトリを除く、コンピュータ全体への読み取りアクセス。このデフォルトは `~/.aws/credentials` や `~/.ssh/` などの認証情報ファイルの読み取りを許可することに注意してください。[`sandbox.credentials`](#protect-credentials) を使用してこれらのファイルの読み取りをブロックし、シークレット環境変数の設定を解除するか、パスを `denyRead` に追加してください。571* **デフォルトの読み取り動作**: 特定の拒否されたディレクトリを除き、コンピューター全体への読み取りアクセス。このデフォルトでは認証情報ファイルの読み取りも許可されるため、コマンドに読み取らせたくない[認証情報を保護](#protect-credentials)してください。
533* **読み取りブロック**:[`permissions.blockReadsOutsideWorkingDirectories`](/docs/ja/settings-reference#permissions-blockreadsoutsideworkingdirectories) がオンの場合、サンドボックス化されたコマンドはホームディレクトリと、[Sandboxed commands under the block](/docs/ja/settings-reference#sandboxed-commands-under-the-block) がリストするパスを除く、ユーザーファイルを保持する他のディレクトリへの読み取りアクセスも失います。そのセクションはこのブロックの一部が適用されない場合についても説明しています。572* **読み取りブロック**: [`permissions.blockReadsOutsideWorkingDirectories`](/docs/ja/settings-reference#permissions-blockreadsoutsideworkingdirectories) をオンにすると、サンドボックス化されたコマンドは、[ブロック下のサンドボックス化されたコマンド](/docs/ja/settings-reference#sandboxed-commands-under-the-block)に記載されたパスを除き、ホームディレクトリおよびユーザーファイルを保持するその他のディレクトリへの読み取りアクセスも失います。このセクションでは、ブロックのこの部分が適用されない場合についても説明しています。
534* **ブロックされたアクセス**:明示的な許可なしに作業ディレクトリ、追加されたディレクトリ、およびユーザーごとの一時ディレクトリ外のファイルを変更できません。これには `~/.bashrc` などのシェル設定ファイルと `/bin/` のシステムバイナリが含まれます。573* **Git worktree**: 作業ディレクトリが[リンクされた git worktree](/docs/ja/worktrees) である場合、サンドボックスはメインリポジトリの共有 `.git` ディレクトリへの書き込みも許可するため、`git commit` などのコマンドで ref やインデックスを更新できます。そのディレクトリ内の `hooks/` と `config` への書き込みは引き続き拒否されます。
535* **Git worktrees**:作業ディレクトリが[リンクされた git worktree](/docs/ja/worktrees)の場合、サンドボックスはメインリポジトリの共有 `.git` ディレクトリへの書き込みも許可するため、`git commit` などのコマンドが refs とインデックスを更新できます。そのディレクトリ内の `hooks/` と `config` への書き込みは引き続き拒否されます。
536* **設定可能**:設定を通じてカスタム許可パスと拒否パスを定義します
537 574
538ファイルシステム分離をスキップして、ネットワーク分離を維持するには、[`sandbox.filesystem.disabled`](#disable-filesystem-isolation) を設定します。575ネットワークの分離を維持したままファイルシステムの分離を完全にスキップするには、[`sandbox.filesystem.disabled`](#disable-filesystem-isolation) を設定します。
539 576
540<h3 id="protected-paths">577<h3 id="protected-paths">
541 保護されたパス578 保護されたパス
542</h3>579</h3>
543 580
544サンドボックス化されたコマンドが書き込みできるディレクトリ内でも、サンドボックスは Claude Code が設定とコードを読み込むファイルへの書き込みを拒否します。これらのファイルを編集できるコマンドは、自身に権限を付与したり、Claude Code がサンドボックス外で実行する hook または MCP サーバーを追加したりする可能性があります。権限システムには独自の[保護されたパス](/docs/ja/permission-modes#protected-paths)があり、ツールが実行される前に Claude Code が承認する内容を制御します。サンドボックスのリストは既に実行中のコマンドに適用されます。4 つのパスグループをカバーしています。581サンドボックス化されたコマンドが書き込み可能なディレクトリ内であっても、サンドボックスは Claude Code が設定やコードを読み込むファイルへの書き込みを引き続き拒否します。これらのファイルを編集できるコマンドは、自身に権限を付与したり、Claude Code がサンドボックスの外で実行するフックや MCP サーバーを追加したりできてしまうためです。権限システムには独自の[保護されたパス](/docs/ja/permission-modes#protected-paths)があり、ツールの実行前に Claude Code が何を承認するかを制御します。サンドボックスのリストは、すでに実行中のコマンドに適用されます。対象となるパスは次の 4 つのグループです。
545 582
546* **作業ディレクトリおよびその上のディレクトリ内**:`.claude` 設定ファイル、`.claude/skills`、`.claude/agents`、`.claude/commands`、`.claude/hooks` ディレクトリ、`.mcp.json`、および Claude Code が独自に実行するファイル(`.claude/workflows` や `.claude/scheduled_tasks.json` など)583* **作業ディレクトリとその上位のディレクトリ**: `.claude` 設定ファイル、`.claude/skills`、`.claude/agents`、`.claude/commands`、`.claude/hooks` ディレクトリ、`.mcp.json`、および `.claude/workflows` や `.claude/scheduled_tasks.json` など Claude Code が自ら実行するファイル
547* **作業ディレクトリのみ**:`.bashrc` や `.zshrc` などのシェルスタートアップファイル、`.gitconfig`、`.vscode` および `.idea` ディレクトリ、`.git` 内の `hooks` および `config`584* **作業ディレクトリのみ**: `.bashrc` や `.zshrc` などのシェル起動ファイル、`.gitconfig`、`.vscode` および `.idea` ディレクトリ、`.git` 内の `hooks` と `config`
548* **作業ディレクトリをベア git リポジトリに変えるファイル**:トップレベルの `HEAD`、`objects`、`refs`、加えて `config` と `hooks`(`HEAD` が隣に存在する場合)。`config` という名前のファイルは `HEAD` がなくても拒否されます。Linux および WSL2 では、サンドボックス化されたコマンドの実行中に表示されるトップレベルの `HEAD` ファイルまたは `objects` または `refs` ディレクトリをサンドボックスが削除します。585* **作業ディレクトリをベア git リポジトリに変えてしまうファイル**: 最上位の `HEAD`、`objects`、`refs`、および `HEAD` が隣にある場合の既存の `config` と `hooks` エントリ。`config` という名前のファイルは、`HEAD` がなくても拒否されます。Linux と WSL2 では、サンドボックス化されたコマンドの実行中に最上位の `HEAD` ファイルや `objects` または `refs` ディレクトリが出現すると、サンドボックスがそれを削除します
549* **`~/.claude` または `CLAUDE_CONFIG_DIR` が指すディレクトリ内**:そのほとんどのコンテンツ、加えて `~/.claude.json` および `.credentials.json` 認証情報ストア586* **`~/.claude`、または `CLAUDE_CONFIG_DIR` が指すディレクトリ内**: その内容の大部分、および `~/.claude.json` と `.credentials.json` 認証情報ストア
550 587
551セッション中に保護された設定ファイルのパスにシンボリックリンクが表示される場合、サンドボックスは次のコマンドから、それが指すファイルへの書き込みも拒否します。588セッション中に保護された設定ファイルのパスにシンボリックリンクが出現した場合、サンドボックスは次のコマンドから、そのリンク先のファイルへの書き込みも拒否します。
552 589
553これらのパスの 1 つを除外する方法はありません。パスをカバーする `allowWrite` エントリまたは `Edit` 許可ルールは保護を解除しません。保護をオフにする唯一の方法は [`filesystem.disabled`](#disable-filesystem-isolation) です。これはすべてのパスのファイルシステム分離をオフにします。マシンで解決されたこれらのパスのほとんどを確認するには、`/sandbox` を実行して **Config** タブを開きます。このタブは、独自の `denyWrite` エントリと混在して、**Denied within allowed** の下にそれらをリストします。590これらのパスのいずれかを除外する方法はありません。パスを対象とする `allowWrite` エントリや `Edit` 許可ルールでは保護は解除されません。保護をオフにする唯一の方法は [`filesystem.disabled`](#disable-filesystem-isolation) で、これはすべてのパスでファイルシステムの分離をオフにします。ご使用のマシンで解決されたこれらのパスの大部分を確認するには、`/sandbox` を実行して **Config** タブを開きます。ここでは、これらのパスがユーザー自身の `denyWrite` エントリと混在して **Denied within allowed** の下に一覧表示されます。
554 591
555`git merge` または `git checkout` がこれらのパスの 1 つで `unable to unlink old` で失敗する場合は、[Troubleshooting](#troubleshooting) を参照してください。592これらのパスのいずれかで `git merge` または `git checkout` が `unable to unlink old` で失敗する場合は、[git コマンドが `unable to unlink old` で失敗する](#a-git-command-fails-with-unable-to-unlink-old)を参照してください。
556 593
557<h3 id="network-isolation">594<h3 id="network-isolation">
558 ネットワーク分離595 ネットワークの分離
559</h3>596</h3>
560 597
561ネットワークアクセスはサンドボックス外で実行されるプロキシサーバーを通じて制御されます。598サンドボックス化されたコマンドには、ネットワークへの直接の経路がありません。
562 599
563* **ドメイン制限**:Claude Code はデフォルトでドメインを事前に許可しません。コマンドが新しいドメインにアクセスする必要がある場合、Claude Code はプロンプトを表示します。[オートモード](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode)では、Claude は[Per-command allowed domains](#per-command-allowed-domains-in-auto-mode)に従って、コマンド自体でコマンドが必要とするホストを指定します。600* **Linux と WSL2**: コマンドは、ユーザーのネットワークに接続されていない別のネットワーク名前空間で実行されます
564* **承認の選択肢**:プロンプトで「はい」を選択すると、Claude Code は現在のセッションの残りの期間そのホストを許可し、同じホストへの後続の接続ではプロンプトを表示しません。「はい、今後は聞かない」を選択すると、Claude Code は `WebFetch(domain:...)` 許可ルールを[ローカル設定](/docs/ja/permissions#permission-system)に保存するため、そのホストは今後のセッションで許可されたままになります。601* **macOS**: Seatbelt サンドボックスフレームワークが、デフォルトでサンドボックスプロキシへの接続以外の接続をブロックします
565* **事前許可ドメイン**:[`allowedDomains`](/docs/ja/settings-reference#sandbox-network-alloweddomains) でドメインを事前に許可してプロンプトを完全に回避します。Claude Code は、[Permission rules](#permission-rules) で説明されているように、`WebFetch(domain:...)` 許可ルールからのドメインも事前に許可します。
566* **厳密な許可リスト**:ユーザー、管理、または CLI `--settings` 設定で [`strictAllowlist`](/docs/ja/settings-reference#sandbox-network-strictallowlist) を `true` に設定した場合、Claude Code はプロンプトの代わりに、許可リスト外のホストへのサンドボックス化されたコマンドアクセスを拒否します。許可リストは、サンドボックスが他の方法でプロンプトを表示するのと同じものです。`allowedDomains` に加えて `WebFetch(domain:...)` 許可ルールからのドメイン、または `allowManagedDomainsOnly` が設定されている場合は管理設定エントリのみです。Claude Code はサンドボックス化されたコマンドのみにこれを実施します。`WebFetch` などのインプロセスツールは引き続き[権限ルール](#permission-rules)に従います。リポジトリの `.claude/settings.json` または `.claude/settings.local.json` で設定しても効果はありません。Claude Code v2.1.219 以降が必要です。
567* **管理ロックダウン**:[`allowManagedDomainsOnly`](/docs/ja/settings-reference#sandbox-network-allowmanageddomainsonly) が管理設定で設定されている場合、許可されていないドメインはプロンプトの代わりに自動的にブロックされ、管理設定からの `allowedDomains` および `WebFetch(domain:...)` 許可ルールのみが尊重されます。
568* **企業プロキシ**:ネットワークが発信トラフィックを企業プロキシを通じて送信する必要がある場合、[プロキシ設定](/docs/ja/network-config#proxy-configuration)で説明されているように、`HTTPS_PROXY`、`HTTP_PROXY`、`NO_PROXY` を設定の `env` ブロックで設定して、[バックグラウンドエージェント](/docs/ja/network-config#set-network-variables-in-settings-not-the-shell)もそれらを取得するようにするか、Claude Code を起動する環境で設定します。Claude Code はドメイン許可リストを実施してから、許可されたコネクションをそのアップストリームプロキシを通じてトンネルします。
569* **カスタムプロキシサポート**:高度なユーザーは発信トラフィックにカスタムルールを実装できます
570* **包括的なカバレッジ**:制限はすべてのスクリプト、プログラム、およびコマンドによって生成されるサブプロセスに適用されます
571 602
572`WebFetch(domain:...)` ルールでは、サンドボックスは 2 つのワイルドカード形式を尊重します。`*.example.com` などの先頭の `*.` とベアの `*`。ベアの `*` 形式には Claude Code v2.1.186 以降が必要です。`WebFetch(domain:example.*)` などの他の位置のワイルドカードはフェッチに一致しますが、サンドボックス化されたコマンドには効果がありません。603Claude Code はサンドボックスの外、ユーザーのマシン上でサンドボックスプロキシを実行し、`HTTP_PROXY`、`HTTPS_PROXY`、`ALL_PROXY` および関連する環境変数を使ってコマンドをプロキシに向けます。プロキシは、各接続のホスト名を許可ドメインおよび拒否ドメインと照合します。
604
605ツールが到達できる範囲は、そのツールがプロキシを使用するかどうかによって異なります。
606
607* **プロキシ変数を読み取るツール**: `curl`、`npm`、HTTPS 経由の `git` などのツールは、ホストが許可されると接続できます。ポートを指定しない `allowedDomains` エントリは、そのホストのすべてのポートを許可します
608* **プロキシ変数を無視するツール**: 素の `ssh`、ほとんどのデータベースドライバーなどのツールは、許可されたホストであっても接続できません。[データベースクライアントやその他の非 HTTP ツールが許可されたホストに到達できない](#a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host)を参照してください
609* **TCP 以外のもの**: UDP、QUIC 上の HTTP/3、および `ping` などの ICMP ツールはサンドボックスの外に出られません
610
611以下の設定と動作により、プロキシが許可するホストが制御されます。
612
613* **ドメイン制限**: 許可ドメインは最初は空です。コマンドが新しいドメインを初めて必要とした場合の動作については、[許可ドメイン外のホスト](#hosts-outside-your-allowed-domains)で説明しています。
614* **承認の選択**: プロンプトで Yes を選択すると、Claude Code は現在のセッションの残りの間、そのホストを許可します。「Yes, and don't ask again」を選択すると、Claude Code は `WebFetch(domain:...)` 許可ルールを[ローカル設定](/docs/ja/permissions#permission-system)に保存するため、今後のセッションでもそのホストは許可されたままになります。サンドボックスが[管理者必須](#repository-settings-under-an-admin-required-sandbox)の場合、Claude Code はルールをユーザー設定に保存し、すべてのプロジェクトに適用されます。
615* **事前許可ドメイン**: [`allowedDomains`](/docs/ja/settings-reference#sandbox-network-alloweddomains) でドメインを事前に許可すると、プロンプトを完全に回避できます。[権限ルール](#permission-rules)で説明しているように、Claude Code は `WebFetch(domain:...)` 許可ルールのドメインも事前に許可します。
616* **厳格な許可リスト**: ユーザー設定、管理設定、または CLI の `--settings` 設定で [`strictAllowlist`](/docs/ja/settings-reference#sandbox-network-strictallowlist) を `true` に設定すると、Claude Code はプロンプトを表示する代わりに、サンドボックス化されたコマンドから許可リスト外のホストへのアクセスを拒否します。許可リストは `allowedDomains` と `WebFetch(domain:...)` 許可ルールのドメインの合計で、`allowManagedDomainsOnly` が設定されている場合は管理設定のエントリのみとなります。リポジトリのエントリについては、[管理者必須のサンドボックスなしで適用されるロック](#locks-that-apply-without-an-admin-required-sandbox)で説明しています。Claude Code はこれをサンドボックス化されたコマンドにのみ適用します。`WebFetch` などのプロセス内ツールは引き続き[権限ルール](#permission-rules)に従います。リポジトリの `.claude/settings.json` または `.claude/settings.local.json` で設定しても効果はありません。Claude Code v2.1.219 以降が必要です。
617* **管理設定によるロックダウン**: 管理設定で [`allowManagedDomainsOnly`](/docs/ja/settings-reference#sandbox-network-allowmanageddomainsonly) が設定されている場合、許可されていないドメインはプロンプトを表示せずに自動的にブロックされ、管理設定の `allowedDomains` と `WebFetch(domain:...)` 許可ルールのみが適用されます。
618* **企業プロキシ**: ネットワークで送信トラフィックを企業プロキシ経由にする必要がある場合は、[プロキシ設定](/docs/ja/network-config#proxy-configuration)の説明に従って `HTTPS_PROXY`、`HTTP_PROXY`、`NO_PROXY` を設定します。[バックグラウンドエージェント](/docs/ja/network-config#set-network-variables-in-settings-not-the-shell)にも適用されるよう設定の `env` ブロックで設定するか、Claude Code を起動する環境で設定してください。Claude Code はドメイン許可リストを適用したうえで、許可された接続をその上流プロキシ経由でトンネリングします。`http://` と `https://` のプロキシ URL が使用でき、必要に応じて URL に Basic 認証を含めることもできます。
619
620`WebFetch(domain:...)` ルールでは、サンドボックスは 2 つのワイルドカード形式を認識します。`*.example.com` のような先頭の `*.` と、単独の `*` です。単独の `*` 形式には Claude Code v2.1.186 以降が必要です。`WebFetch(domain:example.*)` のようにそれ以外の位置にあるワイルドカードは、フェッチには引き続き一致しますが、サンドボックス化されたコマンドには効果がありません。
573 621
574<Note>622<Note>
575 組み込みプロキシは要求されたホスト名に基づいて許可リストを実施し、デフォルトでは TLS トラフィックを終了または検査しません。Claude Code v2.1.199 以降で利用可能な実験的な [`network.tlsTerminate`](/docs/ja/settings-reference#sandbox-network-tlsterminate) 設定により、組み込みプロキシ自体が TLS を終了するようになります。[`mask` 認証情報エントリ](#mask-credentials)にはこの動作が必要です。デフォルトの影響については [Security limitations](#security-limitations) を参照してください。脅威モデルが TLS 検査を必要とする場合は、[Custom proxy configuration](#custom-proxy-configuration) を参照してください。623 組み込みプロキシは、要求されたホスト名に基づいて許可リストを適用し、デフォルトでは TLS トラフィックの終端や検査を行いません。Claude Code v2.1.199 以降で利用可能な実験的な [`network.tlsTerminate`](/docs/ja/settings-reference#sandbox-network-tlsterminate) 設定を使用すると、組み込みプロキシ自体が TLS を終端します。これは [`mask` 認証情報エントリ](#mask-credentials)に必要です。デフォルトの影響については[セキュリティ上の制限](#security-limitations)を、脅威モデルで TLS の検査が必要な場合は[カスタムプロキシ設定](#custom-proxy-configuration)を参照してください。
576</Note>624</Note>
577 625
626<h4 id="hosts-outside-your-allowed-domains">
627 許可ドメイン外のホスト
628</h4>
629
630サンドボックス化されたコマンドが許可ドメインにないホストに接続すると、コマンドはサンドボックス内にとどまり、判断を待ちます。インタラクティブなターミナルセッションでは、判断は権限モードによって異なります。
631
632| 権限モード | 接続の扱い |
633| :- | :- |
634| `bypassPermissions` モード、および[権限のバイパスが利用可能](/docs/ja/permission-modes#skip-all-checks-with-bypasspermissions-mode)な plan モード | プロンプトなしで許可 |
635| 手動モード、`acceptEdits` モード、およびそれ以外の plan モード | プロンプトが表示される |
636| auto モード | コマンドが[ホストを列挙](#per-command-allowed-domains-in-auto-mode)し、分類器がそのリストを承認した場合を除き拒否 |
637| `dontAsk` モード | 拒否 |
638
639[`strictAllowlist`](/docs/ja/settings-reference#sandbox-network-strictallowlist) または [`allowManagedDomainsOnly`](/docs/ja/settings-reference#sandbox-network-allowmanageddomainsonly) がオンの場合、組み込みのサンドボックスプロキシはすべての権限モードで接続を拒否します。`bypassPermissions` モードでは、これらのいずれかがオンでない限り、許可ドメイン外のホストは許可されます。そのモードでコマンドがサンドボックスの外に出られる場合については、[サンドボックスなしでの再試行というエスケープハッチ](#the-unsandboxed-retry-escape-hatch)で説明しています。[`deniedDomains`](/docs/ja/settings-reference#sandbox-network-denieddomains) にあるホストへの接続も、すべての権限モードで拒否されます。
640
641<h4 id="hostnames-that-resolve-to-local-addresses">
642 ローカルアドレスに解決されるホスト名
643</h4>
644
645ホスト名が許可リストを通過した後、サンドボックスプロキシはその名前を解決し、ローカルアドレスのみに解決される場合は接続を拒否します。ローカルアドレスには、`127.0.0.1` などのループバックアドレス、`169.254.169.254` クラウドメタデータエンドポイントなどのリンクローカルアドレス、およびユーザー自身のマシンに割り当てられたアドレスが含まれます。`localhost` および `*.localhost` という名前は、ループバックへの解決が許可されます。
646
647`10.0.0.0/8` などのプライベート範囲に解決される許可済みのイントラネットホスト名は接続できます。名前が拒否されるアドレスに解決されることを許可するには、`"127.0.0.1:8080"` のように、その IP アドレスを `allowedDomains` に追加します。
648
649このチェックはホスト名に適用されます。IP アドレスへの接続は、許可ドメインと権限モードによって判断されます。また、プロキシは上流の企業プロキシ経由で送信する接続についてはこのチェックをスキップします。名前の解決はその企業プロキシが行うためです。
650
578<h4 id="per-command-allowed-domains-in-auto-mode">651<h4 id="per-command-allowed-domains-in-auto-mode">
579 オートモードでのコマンドごとの許可ドメイン652 auto モードでのコマンドごとの許可ドメイン
580</h4>653</h4>
581 654
582[オートモード](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode)でサンドボックスがオンの場合、Claude はネットワーク承認をトリガーする代わりに、コマンド自体でコマンドが必要とするホストを指定します。サンドボックスで実行される各 Bash、PowerShell、または [Monitor](/docs/ja/tools-reference#monitor-tool) コマンドは、サンドボックスの許可リストを超えたホストのリストを持つことができます。`registry.npmjs.org` などのドメイン、`*.pythonhosted.org` などのワイルドカード、または IP アドレス(各々にオプションの `:port` 付き)。分類器はホストとコマンドを一緒にレビューします。Claude Code v2.1.271 以降が必要です。655サンドボックス化がオンの [auto モード](/docs/ja/permission-modes#eliminate-prompts-with-auto-mode)では、Claude は接続ごとにネットワーク承認をトリガーする代わりに、コマンドが必要とするホストをコマンド自体に指定します。サンドボックス内で実行される各 Bash、PowerShell、または [Monitor](/docs/ja/tools-reference#monitor-tool) コマンドは、サンドボックスの許可リストを超えるホストのリストを持つことができます。`registry.npmjs.org` のようなドメイン、`*.pythonhosted.org` のようなワイルドカード、または IP アドレスで、それぞれにオプションで `:port` を付けられます。分類器はホストをコマンドと一緒に審査します。Claude Code v2.1.271 以降が必要です。
583 656
584承認されたリストはそのコマンドのみに対してそれが実行されている限りそれらのホストを開きます。セッションの許可されたホストまたは設定に何も追加されません。次のコマンドは独自のホストを指定します。657承認されたリストは、そのコマンドの実行中に限り、そのコマンドに対してのみそれらのホストを開放します。セッションの許可ホストや設定には何も追加されず、次のコマンドは独自のホストを指定します。
585 658
586ホストを持つコマンドは、権限ルールまたはサンドボックスの[オートアロー モード](#sandbox-modes)によって承認される代わりに、分類器に送られます。[ask ルール](/docs/ja/permissions#manage-permissions)がコマンドのプロンプトを強制する場合、ターミナルの権限ダイアログはそれの隣にホストをリストし、そこで承認することは両方をカバーします。659ホストを持つコマンドは、権限ルールやサンドボックスの[自動許可モード](#sandbox-modes)によって承認されるのではなく、分類器に送られます。[確認ルール](/docs/ja/permissions#manage-permissions)によってコマンドにプロンプトが強制される場合、ターミナルの権限ダイアログではコマンドの横にホストが一覧表示され、そこで承認すると両方が対象になります。
587 660
588コマンドごとのリストはサンドボックスがデフォルトで拒否するものだけを広げます。[`deniedDomains`](/docs/ja/settings-reference#sandbox-network-denieddomains) エントリはまだブロックします。[`strictAllowlist`](/docs/ja/settings-reference#sandbox-network-strictallowlist) または [`allowManagedDomainsOnly`](/docs/ja/settings-reference#sandbox-network-allowmanageddomainsonly) が許可リストをロックする場合、Claude Code はコマンドごとのリストを拒否します。661コマンドごとのリストは、サンドボックスがデフォルトで拒否する範囲のみを広げます。[`deniedDomains`](/docs/ja/settings-reference#sandbox-network-denieddomains) のエントリは引き続きブロックされます。[`strictAllowlist`](/docs/ja/settings-reference#sandbox-network-strictallowlist) または [`allowManagedDomainsOnly`](/docs/ja/settings-reference#sandbox-network-allowmanageddomainsonly) が許可リストをロックしている場合、Claude Code はコマンドごとのリストを拒否します。
589 662
590コマンドごとのリストが適用されている間、Claude Code は承認されたコマンドがリストしなかったホストへの接続をプロンプトなしで分類器チェックなしで拒否します。拒否はコマンドの結果でホストを指定し、Claude はホストが追加されたコマンドを再実行します。663コマンドごとのリストが適用されている間、Claude Code は、承認されたどのコマンドにも列挙されていないホストへの接続を、プロンプトや分類器のチェックなしに拒否します。拒否の際はコマンドの結果にホスト名が示され、Claude はそのホストを追加してコマンドを再実行します。
591 664
592<h4 id="ipv6-addresses-in-domain-lists">665<h4 id="ipv6-addresses-in-domain-lists">
593 ドメインリスト内の IPv6 アドレス666 ドメインリスト内の IPv6 アドレス
594</h4>667</h4>
595 668
596サンドボックスのドメインリストは `allowedDomains`、`deniedDomains`、およびそれらに供給する `WebFetch(domain:...)` ルールです。それらのいずれかで IPv6 アドレスに一致させるには、リテラルを括弧で囲んで記述します。`"[::1]"` はすべてのポートでそのアドレスに一致し、`"[::1]:443"` はポート 443 でのみ一致します。ポートを 1 から 65535 の数値として先頭のゼロなしで記述します。括弧で囲まれた形式には Claude Code v2.1.229 以降が必要です。v2.1.229 より前では、括弧で囲まれていないエントリの最後のコロンの後のテキストがポート番号の場合、Claude Code はそれを 1 つとして読み取ったため、`::1:443` はポート 443 でアドレス `::1` を指定しました。669`allowedDomains`、`deniedDomains`、または `WebFetch(domain:...)` ルールで IPv6 アドレスに一致させるには、アドレスを角括弧で囲んで記述します。`"[::1]"` はすべてのポートでそのアドレスに一致し、`"[::1]:443"` はポート 443 でのみ一致します。角括弧形式には Claude Code v2.1.229 以降が必要です。
597
598IPv6 アドレスのネットワーク承認プロンプトで「はい、今後は聞かない」を選択すると、Claude Code は `WebFetch(domain:...)` ルールをアドレスを括弧で囲んで保存するため、ルールは今後のセッションでアドレスに一致し続けます。
599 670
600括弧で囲まれていないエントリで 2 つ以上のコロンがある場合は曖昧です。`::1:443` は完全な IPv6 アドレスとアドレスの後にポートの両方です。Claude Code は、どの読み取りを意図したかを推測する代わりに、曖昧なスペルを保守的に実施します。671`::1:443` のような角括弧のないエントリは、アドレスとポート付きのアドレスのどちらとも解釈できるため曖昧です。
601 672
602* **拒否リスト**:Claude Code はエントリが解析するすべての読み取りを拒否するため、意図した読み取りがブロックされます。解析可能な読み取りがないエントリの場合、Claude Code は何もブロックしません。673* **拒否リスト**: Claude Code はエントリが解釈され得るすべての読み方を拒否するため、意図した読み方がどちらであってもブロックされます。解釈可能な読み方がないエントリについては、Claude Code は何もブロックしません
603* **許可リスト**:Claude Code は記述したもの以上を許可しません。その読み取りが正常に解析される場合、曖昧なエントリをホストとポートの読み取りに書き直し、許可リストを拡大するのではなく、エントリを完全にドロップする可能性があります。674* **許可リスト**: Claude Code は記述された以上のものを許可しません。曖昧なエントリは、ホストとポートとしての読み方が正しく解析できる場合はその読み方に書き換え、許可リストを広げるよりはエントリを完全に破棄することがあります
604 675
605ターミナルで `claude doctor` を実行して、影響を受けるエントリを見つけます。`Sandbox network domain entries have unreliable spellings` 警告は最大 3 つを指定し、残りをカウントします。括弧で囲まれた形式で各エントリを書き直して、警告をクリアします。警告は、`@`、パスまたはクエリ文字、括弧内のワイルドカードなど、他の理由でスペルが信頼できないエントリも指定します。676曖昧なエントリを見つけるには、ターミナルで `claude doctor` を実行し、`Sandbox network domain entries have unreliable spellings` という警告を確認します。曖昧なエントリはそれぞれ角括弧形式で書き直してください。
606 677
607<h3 id="os-level-enforcement">678<h3 id="os-level-enforcement">
608 OS レベルの実施679 OS レベルの適用
609</h3>680</h3>
610 681
611サンドボックス化された Bash ツールはオペレーティングシステムセキュリティプリミティブを使用します。682サンドボックス化された Bash ツールは、オペレーティングシステムのセキュリティプリミティブを使用します。
612 683
613* **macOS**:サンドボックス実施に Seatbelt を使用します684* **macOS**: サンドボックスの適用に Seatbelt を使用します
614* **Linux**:分離に [bubblewrap](https://github.com/containers/bubblewrap) を使用します685* **Linux**: 分離に [bubblewrap](https://github.com/containers/bubblewrap) を使用します
615* **WSL2**:Linux と同じく bubblewrap を使用します686* **WSL2**: Linux と同じく bubblewrap を使用します
616 687
617WSL1 は bubblewrap が WSL2 でのみ利用可能なカーネル機能を必要とするため、サポートされていません。688[`@anthropic-ai/sandbox-runtime`](https://github.com/anthropics/sandbox-runtime) パッケージを単独で実行して、Claude Code プロセスをラップすることもできます。[サンドボックスランタイム](/docs/ja/sandbox-environments#sandbox-runtime)を参照してください。
618
619これらの同じプリミティブは、スタンドアロン [`@anthropic-ai/sandbox-runtime`](https://github.com/anthropic-experimental/sandbox-runtime) パッケージとして利用可能です。[Sandbox environments](/docs/ja/sandbox-environments#sandbox-runtime) ページでは、Claude Code プロセス全体をラップするための別のアプローチとしてこれについて説明しています。
620 689
621<h2 id="how-sandboxing-relates-to-permissions-and-permission-modes">690<h2 id="how-sandboxing-relates-to-permissions-and-permission-modes">
622 サンドボックスが権限と権限モードにどのように関連するか691 サンドボックスが権限と権限モードにどのように関連するか
677 管理設定でサンドボックス化を実施する746 管理設定でサンドボックス化を実施する
678</h3>747</h3>
679 748
680すべての開発者にサンドボックスを要求するには、[管理設定](/docs/ja/managed-settings#delivery-mechanisms)を通じて `sandbox` キーを配信します。MDM で管理されるファイルまたは Claude.ai の [server-managed settings](/docs/ja/server-managed-settings)を通じて配信します。749すべての開発者にサンドボックスを要求するには、[管理設定](/docs/ja/managed-settings#delivery-mechanisms)を通じて `sandbox` キーを配信します。MDM で管理されるファイルまたは claude.ai の[サーバー管理設定](/docs/ja/server-managed-settings)を通じて配信します。
681 750
682以下の管理設定構成はサンドボックスを有効化し、サンドボックスが初期化できない場合は Claude Code の起動を拒否し、モデルがサンドボックス外でコマンドを再試行するのを防止します。751以下の管理設定はサンドボックスを有効化し、プラットフォームがサポートされていない場合や依存関係が不足している場合は Claude Code の起動を拒否し、モデルがサンドボックス外でコマンドを再試行するのを防止します。
683 752
684```json theme={null}753```json theme={null}
685{754{
691}760}
692```761```
693 762
694`enabled` を超える 2 つのキーは、サンドボックスがコマンドを実行できない場合に何が起こるかを制御します。763`enabled` 以外の 2 つのキーは、サンドボックスがコマンドを実行できない場合に何が起こるかを制御します。
764
765* **`failIfUnavailable`**:Linux の bubblewrap などの依存関係が不足している場合、サンドボックス化されていない実行にフォールバックするのではなく、Claude Code の起動をブロックします
766* **`allowUnsandboxedCommands: false`**:Claude Code は `dangerouslyDisableSandbox` エスケープハッチを無視するため、サンドボックス内でコマンドが失敗しても、Claude はそれをサンドボックス外で再試行できません
695 767
696* **`failIfUnavailable`**:Linux の bubblewrap などの不足している依存関係は、警告を表示してサンドボックス化されていない実行にフォールバックするのではなく、Claude Code の起動をブロックします768これらと併せて、次の追加を検討してください。
697* **`allowUnsandboxedCommands: false`**:Claude Code は `dangerouslyDisableSandbox` エスケープハッチを無視するため、サンドボックス内で失敗するコマンドはサンドボックス外で再試行できません
698 769
699それらと一緒に検討する価値のある 2 つの追加があります。サンドボックス化なしで実行する必要がある組織承認ツールについて `excludedCommands` を追加します。`~/.aws` や `~/.ssh` などの認証情報ディレクトリについて [`sandbox.credentials`](#protect-credentials) エントリを追加します。また、秘密環境変数についても追加します。デフォルトの読み取りポリシーはこれらを許可します。770* 分離なしで実行する必要がある組織承認済みのツールについて `excludedCommands` を追加します。この設定により、[リポジトリの設定でコマンドをサンドボックスの外に出すことができなくなる](#repository-settings-under-an-admin-required-sandbox)ためです
771* `~/.aws` や `~/.ssh` などの認証情報ディレクトリと、秘密の環境変数について [`sandbox.credentials`](#protect-credentials) エントリを追加します。デフォルトの読み取りポリシーではこれらが引き続き許可されるためです
700 772
701このサンドボックス構成は Claude が実行するコマンドをサンドボックス化します。開発者は依然として [`!` シェルモードプロンプト](/docs/ja/interactive-mode#shell-mode-with-prefix)でコマンドを入力し、Claude Code の外の任意のターミナルで既に持っているのと同じアクセス権でサンドボックス外で実行できます。入力されたコマンドがサンドボックス化される場合のセッションについては、[サンドボックス化されていない再試行エスケープハッチ](#the-unsandboxed-retry-escape-hatch)を参照してください。773この設定は Claude が実行するコマンドをサンドボックス化します。開発者は依然として [`!` シェルモードプロンプト](/docs/ja/interactive-mode#shell-mode-with-prefix)でコマンドを入力し、Claude Code の外の任意のターミナルで既に持っているのと同じアクセス権でサンドボックス外で実行できます。入力されたコマンドがサンドボックス内で実行されるセッションについては、[strict サンドボックスモード](#turn-off-the-retry-with-strict-sandbox-mode)を参照してください。
702 774
703サンドボックスはネイティブ Windows では実行されないため、フリートに Windows ホストが含まれている場合、この設定を macOS と Linux にスコープするか、それらのユーザーに WSL2 またはコンテナ内で Claude Code を実行させてください。775サンドボックスはネイティブ Windows では実行されないため、`failIfUnavailable` が設定されていると、それらのマシンでは Claude Code が起動時に終了します。フリートに Windows ホストが含まれている場合は、次の方法を取れます。
776
777* **オペレーティングシステムごとに設定を配信する**:MDM を通じて、または[管理設定ファイル](/docs/ja/managed-settings#delivery-mechanisms)として、macOS と Linux のマシンにのみデプロイします。[サーバー管理設定](/docs/ja/server-managed-settings#current-limitations)は組織内のすべてのユーザーに適用されます
778* **Windows ユーザーをサポートされている環境に移行する**:WSL2 またはコンテナ内で Claude Code を実行してもらいます
704 779
705<h3 id="keep-developers-from-widening-the-policy">780<h3 id="keep-developers-from-widening-the-policy">
706 開発者がポリシーを広げるのを防ぐ781 開発者がポリシーを広げるのを防ぐ
707</h3>782</h3>
708 783
709`enabled` と `failIfUnavailable` などのブール値キーの場合、Claude Code は管理値を使用し、開発者がローカルで設定したものを無視します。`excludedCommands` と `allowRead` などの配列キーの場合、Claude Code はセッションが読み込むすべてのスコープからエントリをマージするため、開発者はポリシーを広げるエントリを追加できます。784管理設定で `enabled` や `failIfUnavailable` などのブール値キーを設定した場合、Claude Code は管理値を使用し、開発者がローカルで設定したものを無視します。`allowRead` などの配列キーの場合、Claude Code はセッションが読み込むスコープからエントリをマージするため、そのキーがロックの対象になっていない限り、開発者はポリシーを広げるエントリを追加できます。
785
786管理設定で設定されていない限り、開発者のユーザー設定または `--settings` で次のキーをオンにできます。サンドボックスが[管理者必須](#repository-settings-under-an-admin-required-sandbox)でない限り、リポジトリの `.claude/settings.json` でもオンにできます。いずれもサンドボックスを弱めるため、使用させたくない場合は管理設定で `false` に設定してください。
787
788* [`enableWeakerNestedSandbox`](/docs/ja/settings-reference#sandbox-enableweakernestedsandbox)
789* [`enableWeakerNetworkIsolation`](/docs/ja/settings-reference#sandbox-enableweakernetworkisolation)
790* [`network.allowAllUnixSockets`](/docs/ja/settings-reference#sandbox-network-allowallunixsockets)
791* [`network.allowLocalBinding`](/docs/ja/settings-reference#sandbox-network-allowlocalbinding)
792* [`allowAppleEvents`](/docs/ja/settings-reference#sandbox-allowappleevents)(リポジトリではオンにできません)
793
794管理設定で `allowManagedReadPathsOnly` を `true` に設定して、管理設定からの `allowRead` エントリのみが尊重されるようにします。これにより、開発者が組織承認済みのパスを超えて読み取りアクセスを広げるのを防止します。
710 795
711管理設定で `allowManagedReadPathsOnly` を `true` に設定して、管理設定からの `allowRead` エントリのみが尊重されるようにします。これにより、開発者は組織承認パスを超えて読み取りアクセスを広げるのを防止します。ネットワークドメインを同じ方法で管理値にロックするには、[`allowManagedDomainsOnly`](/docs/ja/settings-reference#sandbox-network-allowmanageddomainsonly)を設定します。796ネットワークドメインを同じ方法で管理値にロックするには、[`allowManagedDomainsOnly`](/docs/ja/settings-reference#sandbox-network-allowmanageddomainsonly) を設定します。このロックがオンの場合、[プロキシポート](#custom-proxy-configuration)を設定できるのは管理設定のみです。
712 797
713管理設定が `sandbox.filesystem` を設定するか、`"mode": "deny"` を含む `sandbox.credentials.files` エントリをリストする場合、管理設定のみが [`filesystem.disabled`](#disable-filesystem-isolation)を設定できるため、開発者は管理者がデプロイしたファイルシステム制限をオフにすることはできません。`mask` エントリがキーをピンするかどうかは、それがどのように解決されるかに依存します。[どの設定がそれを無効にできるか](#which-settings-can-disable-it)の下の表は 4 つのケースをカバーしています。798管理設定が `sandbox.filesystem` を設定するか、`"mode": "deny"` を含む `sandbox.credentials.files` エントリをリストする場合、管理設定のみが [`filesystem.disabled`](#disable-filesystem-isolation) を設定できるため、開発者は管理者がデプロイしたファイルシステム制限をオフにすることはできません。[有効な](/docs/ja/settings-reference#invalid-credential-entries-in-managed-settings) `mask` エントリはキーをロックしません。[どの設定がそれを無効にできるか](#which-settings-can-disable-it)を参照してください。
714 799
715`excludedCommands` には同等の管理のみロックダウンがないため、開発者は常にサンドボックス外で実行する追加コマンドを追加するエントリを追加できます。管理リストを狭く保ちます。800<h4 id="repository-settings-under-an-admin-required-sandbox">
801 管理者必須のサンドボックスにおけるリポジトリ設定
802</h4>
803
804次のいずれかの設定が有効な間、サンドボックスは管理者必須になります。
805
806* [`allowUnsandboxedCommands`](/docs/ja/settings-reference#sandbox-allowunsandboxedcommands) が管理設定で `false` に設定されている場合、または管理設定で `true` に設定されていない限り `--settings` フラグで `false` に設定されている場合
807* [`allowManagedDomainsOnly`](/docs/ja/settings-reference#sandbox-network-allowmanageddomainsonly) が管理設定で `true` に設定されている場合
808
809これらの設定はサンドボックスをオンにしないため、`enabled` も設定してください。
810
811サンドボックスが管理者必須である間、Claude Code はサンドボックスを緩める設定を、管理設定、`--settings` フラグ、および各開発者の `~/.claude/settings.json` からのみ取得します。リポジトリの `.claude/settings.json` および `.claude/settings.local.json` にある次の設定は無視されます。
812
813| リポジトリの設定 | Claude Code が無視するもの |
814| :- | :- |
815| `excludedCommands`、`ignoreViolations`、`network.allowedDomains`、`network.allowUnixSockets`、`network.allowMachLookup`、`network.httpProxyPort`、`network.socksProxyPort` | すべてのエントリ |
816| `filesystem.allowWrite`、`Edit(...)` 許可ルール、`permissions.additionalDirectories` | 各エントリがサンドボックス化されたコマンドに与える書き込みアクセス。Claude のファイルツールは引き続き `Edit(...)` ルールと追加ディレクトリに従います |
817| `WebFetch(domain:...)` 許可ルール | 各ルールがサンドボックスの許可リストに追加するホスト。WebFetch ツールは引き続きそのルールに従います |
818| `enableWeakerNestedSandbox`、`enableWeakerNetworkIsolation`、`network.allowAllUnixSockets`、`network.allowLocalBinding` | `true`。`false` は引き続き適用されます |
819| `enabled`、`failIfUnavailable` | 開発者の `~/.claude/settings.json` が `true` を設定している場合の `false` |
820| `filesystem.allowRead` | 管理設定、`--settings`、またはユーザー設定で読み取りが拒否されているパスまたはその配下のエントリ、あるいはそれに一致する可能性のある glob |
821
822サンドボックスが管理者必須である間も、次の設定は引き続き適用されます。
823
824* **リポジトリのファイル内**:deny エントリと `autoAllowBashIfSandboxed` の値。リポジトリによる変更を防ぐには、管理設定でこのキーを設定してください
825* **開発者自身の設定内**:表にある設定は、`allowManagedDomainsOnly` などの管理専用ロックの対象でない限り、`~/.claude/settings.json` または `--settings` から引き続き適用されます。`excludedCommands` や `filesystem.allowWrite` など、そのほとんどには管理専用ロックがありません
826
827[管理設定でサンドボックス化を実施する](#enforce-sandboxing-with-managed-settings)の設定により、サンドボックスは管理者必須になります。リポジトリからは指定できないため、承認済みのツールに必要な `excludedCommands`、`allowWrite`、およびソケットのエントリは管理設定に追加してください。
828
829Claude Code v2.1.285 以降が必要です。v2.1.282 から v2.1.284 では、同じ設定によって Claude Code はリポジトリの `excludedCommands` エントリを無視していました。
830
831<h4 id="locks-that-apply-without-an-admin-required-sandbox">
832 管理者必須のサンドボックスがなくても適用されるロック
833</h4>
834
835一部の設定は、サンドボックスが管理者必須でない場合でも、1 つの制限を直接上書きするリポジトリのキーを Claude Code に無視させます。各設定がこの効果を持つのは、その行に記載されたファイルで設定した場合のみであり、リポジトリのその他のサンドボックス設定は引き続き適用されます。Claude Code v2.1.285 以降が必要です。
836
837| 設定 | 設定する場所 | Claude Code がリポジトリの設定で無視するもの |
838| :- | :- | :- |
839| `network.deniedDomains` または `WebFetch(domain:...)` 拒否ルール | 管理設定、`--settings` | `httpProxyPort` と `socksProxyPort` |
840| `network.strictAllowlist` | 管理設定、`--settings`、ユーザー設定 | プロキシポート、`allowedDomains`、および `WebFetch(domain:...)` 許可ルール |
841| `filesystem.denyRead`、`Read(...)` 拒否ルール、または `credentials.files` エントリ | 管理設定、`--settings` | 管理設定、`--settings`、またはユーザー設定で読み取りが拒否されているパスまたはその配下にある `allowRead`、`allowWrite`、`Edit(...)` 許可、または `additionalDirectories` のエントリ、あるいはそれに一致する可能性のある glob |
842
843これらのロックは、サンドボックス化されたコマンドがアクセスできる範囲を変更します。WebFetch ツールと Claude のファイルツールは、引き続きリポジトリのルールと追加ディレクトリに従います。
716 844
717<h3 id="custom-proxy-configuration">845<h3 id="custom-proxy-configuration">
718 カスタムプロキシ設定846 カスタムプロキシ設定
719</h3>847</h3>
720 848
721高度なネットワークセキュリティを必要とする組織の場合、カスタムプロキシを実装して以下を行うことができます。849独自のツールでサンドボックストラフィックを検査、フィルタリング、またはログに記録するには、組み込みのサンドボックスプロキシを、同じマシン上で実行する独自のプロキシに置き換えます。
722 850
723* HTTPS トラフィックを復号化して検査する851ネットワーク上の別の場所にある企業プロキシを通じてサンドボックストラフィックをルーティングするには、代わりに [ネットワーク分離](#network-isolation)の **企業プロキシ** の項目で説明されているように `HTTPS_PROXY` を設定します。そうすることで、Claude Code の許可リストが引き続き適用されます。
724* カスタムフィルタリングルールを適用する
725* すべてのネットワークリクエストをログに記録する
726* 既存のセキュリティインフラストラクチャと統合する
727 852
728Claude Code をプロキシにポイントするには、[サンドボックス設定](/docs/ja/settings-reference#sandbox-settings)でプロキシポートを設定します。853サンドボックス化されたコマンドをプロキシに向けるには、[サンドボックス設定](/docs/ja/settings-reference#sandbox-settings)でプロキシがリッスンする localhost のポートを設定します。
729 854
730```json theme={null}855```json theme={null}
731{856{
738}863}
739```864```
740 865
866ポートを設定し、さらに `HTTPS_PROXY` または `HTTP_PROXY` も設定した場合、Claude Code はサンドボックス化されたコマンドが独自のプロキシに送信したものを、これらの変数で指定されたプロキシに転送しません。企業プロキシにアクセスするには、独自のプロキシがそこへ転送するように設定してください。
867
868どのファイルでポートを設定できるかは、その他のサンドボックス設定によって異なります。最初に一致するケースが適用されます。
869
870* **`allowManagedDomainsOnly` がオンの場合**:管理設定のみ
871* **サンドボックスが[管理者必須](#repository-settings-under-an-admin-required-sandbox)である場合、または[より限定的なネットワークロック](#locks-that-apply-without-an-admin-required-sandbox)が適用される場合**:管理設定、`--settings`、およびユーザー設定
872* **それ以外の場合**:任意の設定ファイル
873
874Claude Code はそれ以外の場所で設定されたポートを無視します。v2.1.285 より前は、任意の設定ファイルでポートを設定できました。
875
876<Warning>
877 いずれかのポートが適用されると、そのプロキシに送信されるすべてのものをフィルタリングする責任は独自のプロキシが負います。`allowedDomains`、`deniedDomains`、`strictAllowlist`、承認プロンプト、[ローカルアドレスのチェック](#hostnames-that-resolve-to-local-addresses)など、Claude Code 自体のネットワーク制御はそのトラフィックには適用されなくなります。サンドボックス化されたコマンドはどちらのプロキシにも接続できるため、ポートを 1 つだけ設定した場合、もう一方のプロキシにおける Claude Code のドメインリストでは、コマンドが独自のプロキシを通じてアクセスする先を制限できません。
878</Warning>
879
741<h2 id="troubleshooting">880<h2 id="troubleshooting">
742 トラブルシューティング881 トラブルシューティング
743</h2>882</h2>
744 883
745一部のコマンドはサンドボックス内で失敗しますが、サンドボックス外では機能します。以下の修正は最も一般的なケースをカバーしています。884一部のコマンドは、サンドボックス外では機能するにもかかわらず、サンドボックス内では失敗します。症状やエラーメッセージに一致する見出しを探してください。
885
886組織のサンドボックスが[管理者必須](#repository-settings-under-an-admin-required-sandbox)の場合、Claude Code はプロジェクトの設定ファイル内にある、これらの修正で挙げる設定を無視します。そのため、すべてのプロジェクトで適用される `~/.claude/settings.json` に保存してください。それでも修正が効果を持たない場合は、組織の管理設定がそのキーを設定している可能性があります。
887
888`excludedCommands` パターンを追加する修正では、そのパターンに一致するコマンドからサンドボックスが外れます。[除外されたコマンドでできること](#run-commands-outside-the-sandbox-with-excludedcommands)を参照してください。
889
890<h3 id="commands-fail-with-a-host-not-allowed-error">
891 コマンドがホスト許可なしエラーで失敗する
892</h3>
893
894多くの CLI ツールは特定のホストに到達する必要があります。プロンプトが表示されたらホストを承認するか、[`allowedDomains`](/docs/ja/settings-reference#sandbox-network-alloweddomains) に追加してください。組織が `allowManagedDomainsOnly` で許可リストをロックしている場合はプロンプトが表示されないため、管理者にホストの追加を依頼してください。
895
896<h3 id="jest-hangs-or-fails">
897 `jest` がハングまたは失敗する
898</h3>
899
900`watchman` はサンドボックスと互換性がありません。代わりに `jest --no-watchman` を実行してください。
901
902<h3 id="go-based-clis-fail-tls-verification-on-macos">
903 Go ベースの CLI が macOS で TLS 検証に失敗する
904</h3>
905
906`gh`、`gcloud`、`terraform` などのツールは [Seatbelt](#os-level-enforcement) の下で TLS 検証に失敗する可能性があります。これらのツールをサンドボックス外で実行するには、各ツールのパターン(`gh *` など)を [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) に追加してください。そのツールはユーザーの完全なアクセス権と保存された認証情報で実行されます。`httpProxyPort` を MITM プロキシとカスタム CA で使用している場合は、代わりに [`enableWeakerNetworkIsolation`](/docs/ja/settings-reference#sandbox-enableweakernetworkisolation) を `true` に設定してください。
907
908<h3 id="open-osascript-or-browser-based-auth-flows-fail-with-error-600-on-macos">
909 `open`、`osascript`、またはブラウザベースの認証フローが macOS でエラー `-600` で失敗する
910</h3>
911
912サンドボックスはデフォルトで Apple Events をブロックします。ユーザー、管理、または CLI 設定で [`allowAppleEvents`](/docs/ja/settings-reference#sandbox-allowappleevents) を `true` に設定して、それらを許可してください。Claude Code はプロジェクト設定ではこのキーを無視します。
913
914`allowAppleEvents` を有効にするとコード実行の分離が削除されます。サンドボックス化されたコマンドはユーザープロンプトなしで他のアプリケーションをサンドボックス化されていない状態で起動でき、macOS オートメーション同意プロンプト(TCC)の対象となる実行中のアプリケーションに AppleScript コマンドを送信できるためです。または、`open *` などのパターンを [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) に追加してください。その場合、各 `open` 呼び出しは権限フローを経由します。また、`open` は Claude が書いたものを含め、任意のファイルやアプリを起動できます。
915
916<h3 id="docker-commands-fail">
917 `docker` コマンドが失敗する
918</h3>
919
920`docker` はサンドボックスと互換性がありません。必要な `docker` コマンドを、`docker compose *` などの `excludedCommands` パターンでサンドボックス外に出してください。除外された `docker` コマンドが到達できる範囲については、[`excludedCommands` でサンドボックス外でコマンドを実行する](#run-commands-outside-the-sandbox-with-excludedcommands)で説明しています。パターンを狭くするほど、サンドボックス外に出るコマンドは少なくなります。
921
922<h3 id="pbcopy-xclip-or-wl-copy-doesn’t-update-the-clipboard">
923 `pbcopy`、`xclip`、または `wl-copy` がクリップボードを更新しない
924</h3>
925
926`pbcopy`、`xclip`、`wl-copy` のクリップボードユーティリティはサンドボックス内からシステムクリップボードに到達できない場合があり、その場合はパイプされたテキストが到達しません。
927
928Claude の出力をクリップボードに配置するには、Claude に応答で出力するよう依頼してから、[`/copy`](/docs/ja/commands) を実行してください。`/copy` はサンドボックス化されたコマンドではなく Claude Code プロセスからクリップボードに書き込みます。
929
930Claude がテキストをこれらのツールの 1 つにパイプする場合、ツールを [`excludedCommands`](/docs/ja/settings-reference#sandbox-excludedcommands) に追加しても、それだけではその呼び出しはサンドボックス外に出ません。
931
932<h3 id="a-git-command-fails-with-unable-to-unlink-old">
933 git コマンドが `unable to unlink old` で失敗する
934</h3>
935
936`git merge`、`git checkout` などのコマンドは、サンドボックスが書き込みを拒否するファイルを置き換える必要がある場合に `unable to unlink old` で失敗します。Linux と WSL2 ではエラーは `Read-only file system` で終わります。そのファイルは次のいずれかの場所にある可能性があります:
937
938* `.claude/skills` などの[保護されたパス](#protected-paths)の下
939* `denyWrite` エントリの 1 つの下
940* サンドボックスがコマンドに書き込みを許可するディレクトリの外
941
942失敗後、Claude は[コマンドをサンドボックス外で再実行することを提案](#the-unsandboxed-retry-escape-hatch)する場合があります。その再試行を承認するか、別のターミナルで git コマンドを自分で実行してください。`allowUnsandboxedCommands` を `false` に設定している場合、Claude は再試行を提案できないため、コマンドを自分で実行してください。
943
944<h3 id="bubblewrap-fails-to-start-inside-a-container">
945 Bubblewrap がコンテナ内で起動に失敗する
946</h3>
947
948非特権コンテナでは、[bubblewrap](#os-level-enforcement) は新しい `/proc` ファイルシステムをマウントできないため、サンドボックス化されたコマンドは `bwrap` エラー(`Can't mount proc on /newroot/proc: Operation not permitted` など)で失敗します。[`enableWeakerNestedSandbox`](/docs/ja/settings-reference#sandbox-enableweakernestedsandbox) を `true` に設定して、サンドボックスが代わりにコンテナの既存の `/proc` をバインドマウントするようにしてください。この設定は、外部コンテナが既に必要な分離境界を提供する場合にのみ使用してください。新しい `/proc` マウントであれば隠されるプロセス情報を、この設定はサンドボックス化されたコマンドに公開するためです。
949
950<h3 id="0-byte-read-only-files-appear-at-claude-settings-paths-and-yes-and-don’t-ask-again-doesn’t-save">
951 0 バイトの読み取り専用ファイルが `.claude` 設定パスに表示され、「はい、今後は聞かない」が保存されない
952</h3>
953
954Linux と WSL2 では、サンドボックスはサンドボックス化されたコマンドが実行されている間に、まだ存在しないファイルに対する書き込み拒否を保持するために、そこに 0 バイトの読み取り専用プレースホルダーを作成します。サンドボックスはその後プレースホルダーを削除します。SIGKILL などによってセッションがそのクリーンアップが実行される前に強制終了された場合、プレースホルダーは残ります。後のセッションは毎回起動時にそれらを読み取り専用で再度バインドするため、プレースホルダーが残っている箇所では、権限の選択を保存するなどの設定書き込みが失敗します。
955
956ターミナルで `claude doctor` を実行して、残されたプレースホルダーファイルをリストアップしてください。[`Stale sandbox mask files left by a killed session`](/docs/ja/errors#stale-sandbox-mask-files-left-by-a-killed-session) 警告はその一部の名前を表示し、残りをカウントします。そのプロジェクトで他の Claude Code セッションが実行されていない間に、`rm` で各ファイルを削除してください。v2.1.257 より前では、Claude Code は同じプレースホルダーを残していましたが、警告していませんでした。
957
958<h3 id="git-over-ssh-fails-with-the-sandbox-on">
959 サンドボックスがオンの状態で SSH 経由の `git` が失敗する
960</h3>
961
962macOS では、SSH リモートに対する `git fetch`、`git pull`、`git push` は、ホストが許可されていてもサンドボックス内で失敗します。Linux と WSL2 では、ホストが許可されれば動作します。Claude Code は git の SSH 接続を[サンドボックスプロキシ](#network-isolation)経由でトンネリングしますが、macOS のトンネルはそのプロキシに対して認証できません。
963
964Linux と WSL2 でそれでも接続が失敗する場合は、以下を確認してください:
965
966* **ホストがポート 22 で許可されている**:`"git.example.com"` のようにポートを指定しない `allowedDomains` エントリで対象になります
967* **企業プロキシがポート 22 を許可している**:ネットワークでアップストリームプロキシが必要な場合、トンネルもそれを経由します
968* **鍵がファイルとして読み取り可能である**:サンドボックスは `ssh-agent` ソケットをブロックする場合があり、`~/.ssh` に対する `denyRead` または `credentials` エントリは鍵ファイルを隠します
969
970macOS では、リモートを HTTPS に切り替えてください。これには個人用アクセストークンなどの HTTPS 認証情報が必要です:
971
972```bash theme={null}
973git remote set-url origin https://git.example.com/example-org/example-repo.git
974```
975
976SSH リモートを維持する必要がある場合は、[`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) で git のネットワークコマンドをサンドボックス外に出してください:
977
978```json theme={null}
979{
980 "sandbox": {
981 "excludedCommands": ["git fetch *", "git pull *", "git push *"]
982 }
983}
984```
985
986これらのエントリは `git push origin main` に一致します。`cd` を追加する呼び出し、`git -C` を使用する呼び出し、またはコマンド置換を含む呼び出しは、サンドボックス内のままです。除外された git コマンドは、`allowedDomains` にあるホストだけでなく、任意のホストに到達できます。
987
988SSH 経由の単純な `ssh`、`scp`、`rsync` は、[データベースクライアントの項目](#a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host)で説明している理由で失敗します。
989
990<h3 id="a-database-client-or-other-non-http-tool-fails-to-reach-an-allowed-host">
991 データベースクライアントやその他の非 HTTP ツールが許可されたホストに到達できない
992</h3>
993
994プロキシの環境変数を無視するツールは、`allowedDomains` にあるホストであっても、サンドボックス内から接続できません。サンドボックス化されたコマンドには[ネットワークへの直接の経路がない](#network-isolation)ため、独自に接続を開くツールは失敗します。ほとんどのデータベースドライバー、単純な `ssh`、UDP を使用するツールはこのように動作します。
995
996失敗はネットワークエラーまたは名前解決エラーのように見えます:
997
998* **macOS**:`Operation not permitted`、または `Could not resolve host` などの名前解決エラー
999* **Linux と WSL2**:`Network is unreachable`、または `Temporary failure in name resolution` などの名前解決エラー
1000
1001プロキシを使用するツールは、ホストが許可されていない場合に異なる形で失敗します。ネットワークのプロンプトが表示されるか、ツールがプロキシから `403` レスポンスを受け取ります。
1002
1003ツールが接続できるようにするには、それを必要とするコマンドを [`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) でサンドボックス外で実行してください。この例では 1 つのスクリプトを除外し、[ask ルール](/docs/ja/permissions)を追加して、実行ごとに承認するようにしています:
1004
1005```json theme={null}
1006{
1007 "sandbox": {
1008 "excludedCommands": ["python scripts/load_orders.py *"]
1009 },
1010 "permissions": {
1011 "ask": ["Bash(python scripts/load_orders.py *)"]
1012 }
1013}
1014```
1015
1016スクリプトはユーザーの完全なアクセス権で実行され、Claude は作業ディレクトリ内にあるスクリプトを編集できるため、プロンプトが表示されたらスクリプトを確認してください。
1017
1018<h3 id="a-command-fails-to-reach-a-server-on-localhost">
1019 コマンドが localhost 上のサーバーに到達できない
1020</h3>
1021
1022デフォルトでは、サンドボックス化されたコマンドは、開発サーバーやコンテナ内のデータベースなど、マシン上でサンドボックス外で実行されているサーバーに直接接続できません。変更できる内容はプラットフォームによって異なります:
746 1023
747* **コマンドがホスト許可なしエラーで失敗する**:多くの CLI ツールは特定のホストに到達する必要があります。プロンプトが表示されたときに許可を付与すると、ホストが許可リストに追加されるため、ツールは将来サンドボックス内で実行されます。1024* **macOS**:[`network.allowLocalBinding`](/docs/ja/settings-reference#sandbox-network-allowlocalbinding) を `true` に設定します。これにより、サンドボックス化されたコマンドはネットワークポートでリッスンし、localhost の任意のポートに接続できるようになります。これには、そこでリッスンしている他のすべてのサービスが含まれます。その結果、認証を必要としない localhost サービス(デバッガーなど)がサンドボックス外でコマンドの代わりに動作できるようになり、非ループバックアドレスでリッスンするコマンドは他のマシンからの接続を受け入れます
748* **`jest` がハングまたは失敗する**:`watchman` はサンドボックスと互換性がありません。代わりに `jest --no-watchman` を実行してください。1025* **Linux と WSL2**:サンドボックス化されたコマンドの `localhost` はそのコマンド専用です。コマンドはポートでリッスンでき、自身が起動したサーバーに到達できます。`localhost` または `127.0.0.1` への直接接続はホスト上のサーバーには到達せず、`allowLocalBinding` は効果がありません。ホストのサーバーを必要とするコマンドは、[`excludedCommands`](#run-commands-outside-the-sandbox-with-excludedcommands) でサンドボックス外で実行してください。そこではファイルシステムやネットワークの制限はありません。サンドボックスプロキシを経由する接続については、[ローカルアドレスに解決されるホスト名](#hostnames-that-resolve-to-local-addresses)を参照してください
749* **Go ベースの CLI が macOS で TLS 検証に失敗する**:`gh`、`gcloud`、`terraform` などのツールは Seatbelt の下で TLS 検証に失敗する可能性があります。これらのツールを [`excludedCommands`](/docs/ja/settings-reference#sandbox-excludedcommands) にリストしてください。`httpProxyPort` を MITM プロキシとカスタム CA で使用している場合は、代わりに [`enableWeakerNetworkIsolation`](/docs/ja/settings-reference#sandbox-enableweakernetworkisolation) を `true` に設定してください。
750* **`open`、`osascript`、またはブラウザベースの認証フローが macOS でエラー `-600` で失敗する**:サンドボックスはデフォルトで Apple Events をブロックします。ユーザー、管理、または CLI 設定で [`allowAppleEvents`](/docs/ja/settings-reference#sandbox-allowappleevents) を `true` に設定して、それらを許可してください。プロジェクト設定はこのキーでは無視されます。これを有効にするとコード実行の分離が削除されます。サンドボックス化されたコマンドはユーザープロンプトなしで他のアプリケーションをサンドボックス化されていない状態で起動でき、macOS オートメーション同意プロンプト(TCC)の対象となる実行中のアプリケーションに AppleScript コマンドを送信できるためです。または、コマンドを [`excludedCommands`](/docs/ja/settings-reference#sandbox-excludedcommands) に追加してください。
751* **`docker` コマンドが失敗する**:`docker` はサンドボックスと互換性がありません。`docker *` を [`excludedCommands`](/docs/ja/settings-reference#sandbox-excludedcommands) に追加してください。
752* **`pbcopy`、`xclip`、または `wl-copy` がクリップボードを更新しない**:これらのクリップボードユーティリティはサンドボックス内からシステムクリップボードに到達できず、パイプされたテキストが到達しない場合があります。
753 1026
754 Claude の出力をクリップボードに配置するには、Claude にレスポンスで出力するよう依頼してから、[`/copy`](/docs/ja/commands) を実行してください。`/copy` はサンドボックス化されたコマンドではなく Claude Code プロセスからクリップボードに書き込みます。1027この例では macOS でこの設定をオンにします:
755 1028
756 Claude がテキストをこれらのツールの 1 つにパイプする場合、ツールを [`excludedCommands`](/docs/ja/settings-reference#sandbox-excludedcommands) に追加しても、その呼び出しをサンドボックス外に出すわけではありません。1029```json theme={null}
757* **git コマンドが `unable to unlink old` で失敗する**:`git merge`、`git checkout` などのコマンドは、サンドボックスが書き込みを拒否するファイルを置き換える必要がある場合にこのように失敗します。そのファイルが `.claude/skills` などの[保護されたパス](#protected-paths)の下にあるか、`denyWrite` エントリの 1 つの下にあるか、またはサンドボックスがコマンドに書き込みを許可するディレクトリの外にあるかどうかです。Linux と WSL2 ではエラーは `Read-only file system` で終わります。1030{
1031 "sandbox": {
1032 "network": {
1033 "allowLocalBinding": true
1034 }
1035 }
1036}
1037```
1038
1039`localhost` に対する `allowedDomains` エントリはプロキシを経由する接続に適用されるため、直接接続には影響しません。Claude Code はサンドボックス化されたコマンドに `NO_PROXY` を設定し、プロキシ経由ではなく `localhost` に直接接続するようにしています。また、このエントリは、プロキシを使用するコマンドに対して、マシンの localhost のすべてのポートを公開します。`127.0.0.1` を指す開発用ホスト名については、[許可されたホスト名が `resolved to a loopback address` で拒否される](#an-allowed-hostname-is-refused-with-resolved-to-a-loopback-address)を参照してください。
1040
1041<h3 id="an-allowed-hostname-is-refused-with-resolved-to-a-loopback-address">
1042 許可されたホスト名が `resolved to a loopback address` で拒否される
1043</h3>
1044
1045サンドボックスプロキシは、[ローカルアドレスに解決される](#hostnames-that-resolve-to-local-addresses)許可されたホスト名を拒否します。これは `127.0.0.1` を指す `myapp.test` などの開発用の名前に影響します。コマンドは `403` レスポンスを受け取り、その本文には `Connection to myapp.test blocked: resolved to a loopback address` のようにアドレスの種類が示されます。
1046
1047名前の解決先の IP アドレスをホスト名と並べて `allowedDomains` に追加し、それぞれにサーバーがリッスンするポートを指定してください:
1048
1049```json theme={null}
1050{
1051 "sandbox": {
1052 "network": {
1053 "allowedDomains": ["myapp.test:3000", "127.0.0.1:3000"]
1054 }
1055 }
1056}
1057```
758 1058
759 失敗後、Claude は[コマンドをサンドボックス外で再実行することを提案](#the-unsandboxed-retry-escape-hatch)する場合があります。その再試行を承認するか、別のターミナルで git コマンドを自分で実行してください。`allowUnsandboxedCommands` を `false` に設定している場合、Claude は再試行を提案できないため、コマンドを自分で実行してください。同じ git コマンドが頻繁に失敗する場合は、[`excludedCommands`](/docs/ja/settings-reference#sandbox-excludedcommands) に追加してください。1059ポートを指定しない IP アドレスのエントリでは、サンドボックス化されたコマンドがそのアドレスでリッスンしているすべてのサービスに到達できるようになります。
760* **Bubblewrap がコンテナ内で起動に失敗する**:非特権コンテナでは、bubblewrap は新しい `/proc` ファイルシステムをマウントできないため、サンドボックス化されたコマンドは `bwrap` エラー(`Can't mount proc on /newroot/proc: Operation not permitted` など)で失敗します。[`enableWeakerNestedSandbox`](/docs/ja/settings-reference#sandbox-enableweakernestedsandbox) を `true` に設定して、内部サンドボックスがコンテナの既存の `/proc` をバインドマウントするようにしてください。このオプションは、外部コンテナが既に必要な分離境界を提供する場合にのみ使用してください。新しい `/proc` マウントが隠すサンドボックス化されたコマンドにプロセス情報を公開するためです。
761* **0 バイトの読み取り専用ファイルが `.claude` 設定パスに表示され、「はい、今後は聞かない」が保存されない**:Linux と WSL2 では、サンドボックスはサンドボックス化されたコマンドが実行されている間に、まだ存在しないファイルに対する書き込み拒否を保持するために、そこに 0 バイトの読み取り専用プレースホルダーを作成します。サンドボックスはその後プレースホルダーを削除します。SIGKILL などによってセッションがそのクリーンアップが実行される前に強制終了された場合、プレースホルダーは残ります。後のセッションは毎回起動時にそれらを読み取り専用で再度バインドするため、プレースホルダーが残っている箇所では、権限の選択を保存するなどの設定書き込みが失敗します。
762 1060
763 `claude doctor` を実行して、残されたプレースホルダーファイルをリストアップしてください。[`Stale sandbox mask files left by a killed session`](/docs/ja/errors#stale-sandbox-mask-files-left-by-a-killed-session) 警告は最大 3 つの名前を表示し、残りをカウントします。そのプロジェクトで他の Claude Code セッションが実行されていない間に、`rm` で各ファイルを削除してください。v2.1.257 より前では、Claude Code は同じプレースホルダーを残していましたが、フラグを立てていませんでした。1061v2.1.284 より前では、プロキシは許可されたホスト名がどのアドレスに解決されても接続していました。
764* **`--dangerously-skip-permissions` が root として失敗する**:このフラグは Linux と macOS で root として実行するか sudo 経由で実行する場合にブロックされます。root アクセスと許可プロンプトなしを組み合わせるとシステム上のあらゆるファイルまたはサービスを変更できるためです。チェックは認識されたサンドボックス内で自動的にスキップされます。コンテナで自律的に実行するには、[dev container](/docs/ja/devcontainer) 設定を使用してください。これは Claude Code を非 root ユーザーとして実行します。1062
1063<h3 id="/sandbox-fails-with-sandbox-settings-are-overridden-by-a-higher-priority-configuration">
1064 `/sandbox` が `Sandbox settings are overridden by a higher-priority configuration` で失敗する
1065</h3>
1066
1067上位の[設定レベル](/docs/ja/settings#settings-precedence)が `sandbox.enabled`、`sandbox.autoAllowBashIfSandboxed`、または `sandbox.allowUnsandboxedCommands` を設定している場合、`/sandbox` はパネルを開く代わりに `Error: Sandbox settings are overridden by a higher-priority configuration and cannot be changed locally.` を出力します。パネルは選択内容を `.claude/settings.local.json` に保存しますが、そこに保存された値はそれらのレベルを上書きできません。
1068
1069管理設定と `--settings` はローカル設定より優先されます。このセッションでどれが読み込まれたかを確認するには、`/status` を実行して `Setting sources` 行を確認してください:
1070
1071* **`Command line arguments`**:[`--settings`](/docs/ja/settings#change-a-setting-for-one-session) を指定して Claude Code を起動した場合は、渡したファイルまたは JSON がこれらのキーのいずれかを設定しているか確認してください。設定している場合は、そこで値を変更するか、これらのキーを含めずに Claude Code を再起動してください。
1072* **`Enterprise managed settings`**:組織の管理設定が読み込まれています。それらがこれらのキーのいずれかを設定している場合、そのキーは `/sandbox` からも、ユーザーが管理するどの設定ファイルからも変更できないため、管理者に問い合わせてください。
765 1073
766<h2 id="limitations">1074<h2 id="limitations">
767 制限事項1075 制限事項
773 セキュリティ上の制限1081 セキュリティ上の制限
774</h3>1082</h3>
775 1083
776* **ネットワークフィルタリング**:サンドボックスは、プロセスが接続できるドメインを制限します。デフォルトでは、組み込みプロキシは発信トラフィックを終了または検査しないため、暗号化された接続の内容は検査されません。実験的な [`network.tlsTerminate`](/docs/ja/settings-reference#sandbox-network-tlsterminate) 設定は、[`mask` 認証情報置換](#mask-credentials)のためにプロキシで TLS を終了しますが、コンテンツフィルタリングは追加しません。ポリシーで許可されるのは信頼できるドメインのみであることを確認する責任があります。1084* **ネットワークフィルタリング**:サンドボックスは、プロセスが接続できるドメインを制限します。デフォルトでは、組み込みプロキシは発信トラフィックの TLS を終端または検査しないため、暗号化された接続の内容は検査されません。実験的な [`network.tlsTerminate`](/docs/ja/settings-reference#sandbox-network-tlsterminate) 設定は、[`mask` 認証情報置換](#mask-credentials)のためにプロキシで TLS を終了しますが、コンテンツフィルタリングは追加しません。ポリシーで許可されるのは信頼できるドメインのみであることを確認する責任があります。
777 1085
778<Warning>1086<Warning>
779 `github.com` などの広いドメインを許可すると、データ流出のパスが作成される可能性があります。プロキシは TLS を検査せずにクライアント提供のホスト名から許可決定を行うため、サンドボックス内で実行されるコードは [ドメインフロンティング](https://en.wikipedia.org/wiki/Domain_fronting)または同様の技術を使用して許可リスト外のホストに到達する可能性があります。脅威モデルがより強力な保証を必要とする場合は、TLS を終了してトラフィックを検査し、CA 証明書をサンドボックス内にインストールする [カスタムプロキシ](#custom-proxy-configuration)を設定してください。より強力な TLS 対応ネットワーク分離は開発の活発な領域です。1087 `github.com` などの広いドメインを許可すると、データ流出のパスが作成される可能性があります。プロキシは TLS を検査せずにクライアント提供のホスト名から許可決定を行うため、サンドボックス内で実行されるコードは [ドメインフロンティング](https://en.wikipedia.org/wiki/Domain_fronting)または同様の技術を使用して許可リスト外のホストに到達する可能性があります。脅威モデルがより強力な保証を必要とする場合は、TLS を終了してトラフィックを検査し、CA 証明書をサンドボックス内にインストールする [カスタムプロキシ](#custom-proxy-configuration)を設定してください。より強力な TLS 対応ネットワーク分離は開発の活発な領域です。
781 1089
782* **Unix ソケットを通じた権限昇格**:`allowUnixSockets` 設定は、サンドボックスバイパスにつながる可能性のあるシステムサービスへのアクセスを不注意に付与する可能性があります。たとえば、`/var/run/docker.sock` へのアクセスを許可すると、Docker ソケットを通じてホストシステムへのアクセスが効果的に付与されます。サンドボックスを通じて許可する Unix ソケットを慎重に検討してください。1090* **Unix ソケットを通じた権限昇格**:`allowUnixSockets` 設定は、サンドボックスバイパスにつながる可能性のあるシステムサービスへのアクセスを不注意に付与する可能性があります。たとえば、`/var/run/docker.sock` へのアクセスを許可すると、Docker ソケットを通じてホストシステムへのアクセスが効果的に付与されます。サンドボックスを通じて許可する Unix ソケットを慎重に検討してください。
783* **ファイルシステム権限昇格**:過度に広いファイルシステム書き込み権限は権限昇格攻撃を有効にする可能性があります。`$PATH` の実行可能ファイルを含むディレクトリ、システム設定ディレクトリ、またはユーザーシェル設定ファイル(`.bashrc` または `.zshrc`)への書き込みを許可すると、他のユーザーまたはシステムプロセスがこれらのファイルにアクセスするときに異なるセキュリティコンテキストでコード実行につながる可能性があります。1091* **ファイルシステム権限昇格**:過度に広いファイルシステム書き込み権限は権限昇格攻撃を有効にする可能性があります。`$PATH` の実行可能ファイルを含むディレクトリ、システム設定ディレクトリ、またはユーザーシェル設定ファイル(`.bashrc` または `.zshrc`)への書き込みを許可すると、他のユーザーまたはシステムプロセスがこれらのファイルにアクセスするときに異なるセキュリティコンテキストでコード実行につながる可能性があります。
784* **Linux サンドボックス強度**:Linux 実装は強力なファイルシステムとネットワーク分離を提供しますが、特権付き名前空間のない Docker 環境内、または特権のないユーザー名前空間が sysctl で無効化されている Linux ホスト上で動作できるようにする `enableWeakerNestedSandbox` モードが含まれています。このオプションはセキュリティを大幅に弱め、追加の分離が別の方法で実施される場合にのみ使用する必要があります。1092* **Linux サンドボックス強度**:Linux 実装は強力なファイルシステムとネットワーク分離を提供しますが、特権付き名前空間のない Docker 環境内で動作できるようにする `enableWeakerNestedSandbox` モードが含まれています。このオプションはセキュリティを大幅に弱め、追加の分離が別の方法で実施される場合にのみ使用する必要があります。
785* **macOS での Apple Events**:macOS サンドボックスはデフォルトで Apple Events をブロックします。`allowAppleEvents` 設定はこの制限を解除して、`open` や `osascript` などのツールが動作するようにしますが、コード実行分離を削除します。サンドボックス化されたコマンドは、ユーザープロンプトなしで他のアプリケーションをサンドボックス化されていない状態で起動でき、実行中のアプリケーションに AppleScript コマンドを送信できます。これはアプリごとの macOS オートメーション同意プロンプト(TCC)の対象です。これはユーザー、管理、または CLI 設定からのみ有効です。プロジェクト設定では有効にできません。1093* **macOS での Apple Events**:macOS サンドボックスはデフォルトで Apple Events をブロックします。`allowAppleEvents` 設定はこの制限を解除して、`open` や `osascript` などのツールが動作するようにしますが、コード実行分離を削除します。サンドボックス化されたコマンドは、ユーザープロンプトなしで他のアプリケーションをサンドボックス化されていない状態で起動でき、実行中のアプリケーションに AppleScript コマンドを送信できます。これはアプリごとの macOS オートメーション同意プロンプト(TCC)の対象です。これはユーザー、管理、または CLI 設定からのみ有効です。プロジェクト設定では有効にできません。
786 1094
787<h3 id="platform-and-tool-compatibility">
788 プラットフォームとツールの互換性
789</h3>
790
791* **プラットフォームサポート**:macOS、Linux、WSL2 をサポートします。WSL1 とネイティブ Windows はサポートされていません。
792* **パフォーマンスオーバーヘッド**:最小限ですが、一部のファイルシステム操作はわずかに遅くなる可能性があります。
793* **ツール互換性**:特定のシステムアクセスパターンを必要とするツールの中には、設定調整が必要な場合や、サンドボックス外で実行する必要がある場合があります。
794
795<h3 id="scope">1095<h3 id="scope">
796 スコープ1096 スコープ
797</h3>1097</h3>
798 1098
799サンドボックスは Bash サブプロセスを分離します。他のツールは異なる境界の下で動作します。1099サンドボックスはシェルコマンドとその子プロセスを分離します。サンドボックスの対象外となるツールとヘルパープロセスは、[サンドボックス外で実行されるもの](#what-runs-outside-the-sandbox)に記載されています。コンピュータ使用とサブエージェントとサンドボックスの関係は次のとおりです。
800 1100
801* **組み込みファイルツール**:Read、Edit、Write はサンドボックスを通じて実行するのではなく、権限システムを直接使用します。[permissions](/docs/ja/permissions)を参照してください。
802* **コンピュータ使用**:Claude がアプリを開いてスクリーンを制御する場合、分離された環境ではなく実際のデスクトップで実行されます。アプリごとの権限プロンプトが各アプリケーションをゲートします。[CLI でのコンピュータ使用](/docs/ja/computer-use)または [Desktop でのコンピュータ使用](/docs/ja/desktop#let-claude-use-your-computer)を参照してください。1101* **コンピュータ使用**:Claude がアプリを開いてスクリーンを制御する場合、分離された環境ではなく実際のデスクトップで実行されます。アプリごとの権限プロンプトが各アプリケーションをゲートします。[CLI でのコンピュータ使用](/docs/ja/computer-use)または [Desktop でのコンピュータ使用](/docs/ja/desktop#let-claude-use-your-computer)を参照してください。
803* **環境変数**:サンドボックス化された Bash コマンドはデフォルトで親プロセス環境を継承します。そこに設定されたすべての認証情報を含みます。サンドボックス化されたコマンドの特定の変数を設定解除またはマスクするには [`sandbox.credentials`](#protect-credentials)を使用するか、すべてのサブプロセスから認証情報を削除するには [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](/docs/ja/env-vars)を設定してください。
804* **サブエージェント**:[subagents](/docs/ja/sub-agents)は親セッションと同じプロセスで実行され、同じサンドボックス設定を使用します。親セッションでサンドボックス化が有効な場合、サブエージェント内の Bash コマンドはサンドボックス化されます。1102* **サブエージェント**:[subagents](/docs/ja/sub-agents)は親セッションと同じプロセスで実行され、同じサンドボックス設定を使用します。親セッションでサンドボックス化が有効な場合、サブエージェント内の Bash コマンドはサンドボックス化されます。
1103* **Mod**:[mod](/docs/ja/plugins/mods/overview) は Claude Code 内で独自のコードを実行するプラグインであり、mod が起動するプロセスはサンドボックス外で実行されます。[mod がアクセスできる範囲](/docs/ja/plugins/mods/overview#what-a-mod-can-reach)を参照してください。
805 1104
806<Warning>1105<Warning>
807 効果的なサンドボックス化にはファイルシステムとネットワークの両方の分離が必要です。ネットワーク分離がない場合、侵害されたエージェントは SSH キーなどの機密ファイルを流出させる可能性があります。ファイルシステム分離がない場合、[ファイルシステムレイヤーを無効化](#disable-filesystem-isolation)することによるものであれ、侵害されたエージェントはシステムリソースにバックドアを仕掛けてネットワークアクセスを取得する可能性があります。デフォルトを広げるときは、`allowWrite` パス、広い `allowedDomains` エントリ、または `excludedCommands` 例外が反対側の制限を元に戻さないことを確認してください。1106 効果的なサンドボックス化にはファイルシステムとネットワークの両方の分離が必要です。ネットワーク分離がない場合、侵害されたエージェントは SSH キーなどの機密ファイルを流出させる可能性があります。ファイルシステム分離がない場合、それが制限の緩いポリシーによるものであれ、[ファイルシステムレイヤーを無効化](#disable-filesystem-isolation)したことによるものであれ、侵害されたエージェントはシステムリソースにバックドアを仕掛けてネットワークアクセスを取得する可能性があります。デフォルトを広げるときは、`allowWrite` パス、広い `allowedDomains` エントリ、または `excludedCommands` 例外が反対側の制限を元に戻さないことを確認してください。
808</Warning>1107</Warning>
809 1108
810<h2 id="see-also">1109<h2 id="see-also">