Claude Codeのサンドボックスの選び方 — 6種の隔離範囲と目的別の早見表
Bash sandbox・sandbox runtime・dev container・custom container・VM・cloud sessionsの6種を、隔離範囲・Docker要否・設定の手間で比べ、目的別の選び方をまとめます。
Claude Codeの隔離手段は6種類あります。分かれ目は1つで、隔離されるのが「Bashコマンドだけ」か「Claude Codeのプロセス全体」かです。この線を先に引くと、残りの選択はほぼ決まります。
結論から書きます。普段使いで確認の回数を減らしたいだけなら、組み込みのBash sandboxで足ります。--dangerously-skip-permissionsで無人実行するなら、プロセス全体を囲う手段(sandbox runtime・コンテナ・VM)が前提です。信頼できないリポジトリは、専用のVMかcloud sessionsに寄せます。
6種類は何を隔離するのか
Claude Code公式のSandbox environmentsページは、6つの方式を次の4観点で並べています。上の2つはコンテナなしでホストOS上で動き、下の4つはClaude Codeをコンテナか仮想マシンの中に置きます。
| 方式 | 隔離される範囲 | Docker | 設定の手間 |
|---|---|---|---|
| Bash sandbox | 隔離される範囲Bash・PowerShell・Monitorツールのコマンドと子プロセス | Docker不要 | 設定の手間macOSは最小、Linux・WSL2は低 |
| sandbox runtime | 隔離される範囲ファイルツール・MCPサーバー・hooksを含むClaude Codeのプロセス全体 | Docker不要 | 設定の手間低 |
| dev container | 隔離される範囲開発環境一式 | Docker必要 | 設定の手間中 |
| custom container | 隔離される範囲開発環境一式 | Docker必要 | 設定の手間中から高 |
| VM | 隔離される範囲OS全体 | Docker不要 | 設定の手間高 |
| cloud sessions | 隔離される範囲Anthropicが管理するOS全体 | Docker不要 | 設定の手間なし(Claudeのサブスクリプションが必要) |
Bash sandboxだけが「コマンド単位」で、残りの5つは境界の内側にClaude Code本体ごと入ります。読み方は次のとおりです。
- Bash sandboxの外側にいるのは、Read・Edit・WebFetchなどの組み込みツール、ローカルのMCPサーバー、hooks、プラグインのmonitorです
- 組み込みツールはパスやドメインの権限ルールで制御されます
- MCPサーバーとhooksは、ホスト上で制限なしに動きます
目的から選ぶ早見表
方式の名前から入るより、やりたいことから逆引きするほうが速く決まります。
| やりたいこと | 最初に検討する方式 |
|---|---|
| 手元の日常作業で確認プロンプトを減らす | 最初に検討する方式Bash sandbox(/sandboxで設定) |
--dangerously-skip-permissionsかauto modeで無人実行する | 最初に検討する方式設定済みのdev container、任意のコンテナかVM、またはsandbox runtime |
| Dockerなしで、MCPサーバーとhooksもBashと一緒に隔離する | 最初に検討する方式sandbox runtime |
| 信頼できないリポジトリを扱う | 最初に検討する方式専用のVM、またはClaudeのサブスクリプションがあるならcloud sessions |
| チームでサンドボックス環境を標準化する | 最初に検討する方式リポジトリにコピーしたdev container |
| ローカル環境のない端末から使う | 最初に検討する方式cloud sessions |
| ネイティブWindowsで使う | 最初に検討する方式コンテナかVM、またはWSL2内のBash sandbox |
無人実行の前に確かめる順番
- Q`--dangerously-skip-permissions`を使いますか?答えが使わない答えがはい
Bash sandboxを有効にして、通常の確認付きで運用します。
- Qリポジトリは自分たちで書いた、信頼できるコードですか?答えが信頼できない答えがはい
専用のVMかcloud sessionsに移します。dev containerは、フラグ付きの実行で悪意あるプロジェクトからの持ち出しを防ぎません。
- QMCPサーバーとhooksを含むClaude Code本体を、境界の内側に置けますか?答えが置けない答えがはい
sandbox runtime、コンテナ、VMのいずれかを用意してからフラグを使います。
外向き通信を絞ったうえで実行する
コンテナなら許可ドメインを絞るファイアウォール、sandbox runtimeならネットワークの許可リストを設定してから走らせます。
Bash sandbox:最も軽く、最も範囲が狭い
組み込み機能で、macOSはSeatbelt、LinuxとWSL2はbubblewrapで制限します。既定ではオフで、セッション内で/sandboxを実行するか、sandbox.enabledをtrueにして有効にします。設定キー単体の解説はsandbox.enabledにあります。
/sandbox既定の境界は、次の表のとおりです。
| 対象 | 既定の挙動 |
|---|---|
| 書き込み | 既定の挙動作業ディレクトリ、ユーザー単位の一時ディレクトリ、追加したディレクトリ。保護パスは書き込み不可 |
| 読み取り | 既定の挙動マシンの大半。~/.sshや~/.aws/credentialsも含む |
| ネットワーク | 既定の挙動直接の経路なし。ホスト上のプロキシが許可ドメインと照合する(許可ドメインは空から始まる) |
| 環境変数 | 既定の挙動Claude Codeから継承。環境内のシークレットも含む |
つまり、何も足さない状態では認証情報ファイルは読めます。sandbox.credentialsやdenyReadで塞ぐ前提で使います。
制約も押さえておきます。
- ネイティブWindowsでは非対応で、コマンドは隔離なしで動きます
- 組み込みのファイルツール、MCPサーバー、hooksは範囲外です
- 自分で
!プロンプトに打ったコマンドは、多くのセッションで隔離されません - 無人実行には、単体では足りないと明記されています
最後の点が選び方の肝です。Bash sandboxは「確認を減らす」には向きますが、「確認なしで任せる」境界としては不足します。ただし層は重ねられます。コンテナやVMの内側でBash sandboxを動かせば、外側の境界に加えてコマンド単位の制限が効きます。
sandbox runtime:Dockerなしでプロセス全体を囲う
@anthropic-ai/sandbox-runtimeパッケージは、Bash sandboxと同じSeatbeltかbubblewrapで、プロセス全体を包みます。ファイルツール、MCPサーバー、hooksまで同じ境界に入ります。ベータの研究プレビューで、設定形式は変わる可能性があります。起動はこの形です。
npx @anthropic-ai/sandbox-runtime claude起動前に設定ファイル(~/.srt-settings.json、または--settingsで渡すファイル)を用意します。既定ではネットワークが拒否され、書き込みもごく限られたパスに限定されるためです。書き込みを許すのは最低限、プロジェクトのディレクトリ、~/.claudeと~/.claude.json、Claude Codeの一時ディレクトリ(Linux・WSL2は/tmp、macOSは/private/tmp)です。通信を許すのはapi.anthropic.comのほか、OAuth認証ならclaude.aiとplatform.claude.comです。
LinuxとWSL2では、書き込み許可は既に存在するパスにしか適用されません。新しい環境では先に作っておきます。
mkdir -p ~/.claude && { [ -f ~/.claude.json ] || echo '{}' > ~/.claude.json; }落とし穴は2つあります。設定ファイルがなくても起動はするので、「起動できた」は設定が読まれた証拠になりません。一方、ファイルが空・読めない・不正なときは起動を拒否します。詳しい設定と遮断範囲はsandbox-runtimeの設定解説にまとめています。
dev containerとcustom container:環境ごと閉じる
dev containerは、Dockerコンテナの中でClaude Codeを動かし、プロジェクトをマウントする方式です。Claude Codeのリポジトリには、既定で外向き通信を拒否するiptablesファイアウォール付きの参照構成があります。これをコピーして、許可リスト・ベースイメージ・固定するClaude Codeのバージョンを調整するのが出発点です。ファイアウォールがあるため、--dangerously-skip-permissionsでの無人運用を支える構成になります。構築の詳細はDevContainer完全実装、通信制限はinit-firewall.shで扱っています。
ただし、dev containerにも限界があります。フラグ付きで実行すると、悪意あるプロジェクトによるコンテナ内の持ち出しは防げません。~/.claudeの認証情報もコンテナ内にあるためです。信頼できるリポジトリに限り、~/.sshなどのホストの秘密情報はマウントしないでください。
custom containerは、任意のDocker・OCIイメージに自前のネットワークポリシー、ボリューム、seccompプロファイルを組み合わせる形です。既存のコンテナ基盤やCI実行環境を持つ組織で最も多い経路とされています。確認項目は3つです。
- 書き込み可能でマウントしているもの
- コンテナ内から届く認証情報とトークン
- ネットワークの外向き通信ポリシー
特権なしのコンテナでBash sandboxを重ねる場合はenableWeakerNestedSandboxが必要になります。この設定は隔離を大きく弱めるので、外側のコンテナが十分な境界を持つときだけ使います。経緯はenableWeakerNestedSandboxとbwrapPathにあります。
VMとcloud sessions:OS単位で分ける
VMは専用のカーネルを持つため、最も強い分離になります。クラウドのインスタンス、ローカルのハイパーバイザー、FirecrackerのようなマイクロVMが選択肢です。信頼できないコードを評価するとき、セキュリティ方針でカーネルレベルの分離が求められるとき、ホスト側の方式ではコンプライアンスを満たせないときに向きます。Docker Sandboxesは独自のDockerデーモンとワークスペース同期を持つマイクロVMで、Docker Desktopなしの無償の単体製品です。
cloud sessionsはAnthropicが管理する隔離VMで動きます。ネットワークプロキシが既定の許可リストを強制し、別のプロキシがGitHubトークンをサンドボックスの外に保持して、内側にはリポジトリ用の限定的な認証情報を発行します。インフラの用意が要らず、手元に開発環境のない端末からタスクを渡せる点が利点です。
条件も確認します。
- Pro・Max・Team、およびプレミアムシートかChat + Claude Codeシートを持つEnterpriseで使えます
- 利用量は他のClaude利用と同じプラン上限に数えられ、クラウドVMの追加課金はありません
- CLIから
claude --cloudで起動する場合は、ローカルのリポジトリをバンドルしてアップロードできるため、GitHub連携が必須ではありません - 起動しない場合の切り分けはCloud sessions拒否の記事にあります
- Bedrockなどのサードパーティプロバイダー設定では
--cloudは使えません - 組織でIPアドレス許可リストを有効にしていると、Anthropic管理のcloud sessionsは認証エラーになります
組織で強制できるのはどの方式か
個人はどの方式も選べますが、組織が強制できる範囲は方式で違います。
| 方式 | 強制のしかた |
|---|---|
| Bash sandbox | 強制のしかたClaude Code自身が強制できる唯一の方式。sandboxキーを管理設定で配布する |
| dev container | 強制のしかたリポジトリにコミットして標準化する。ただし慣例であり、強制ではない |
| custom container・VM | 強制のしかた承認済みイメージで配布し、端末管理かソフトウェア許可リストで他の導入を防ぐ |
Bash sandboxを必須にする管理設定は、たとえば次の形です。
{
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false
}
}failIfUnavailableは、bubblewrapなどが欠けたときにフォールバックせず起動を止めます。allowUnsandboxedCommands: falseは、隔離下で失敗したコマンドを隔離なしで再試行する抜け道を閉じます。個別の解説はfailIfUnavailableとallowUnsandboxedCommandsにあります。
ネイティブWindows端末を含む組織では注意が要ります。サンドボックスが動かないため、failIfUnavailableを付けるとそのマシンではClaude Codeが起動時に終了します。MDMでOS別に配布するか、WSL2やコンテナへ移す必要があります。サーバー管理設定は組織の全ユーザーに適用されるので、前者の分け方はできません。
よくある組み合わせ
方式は排他ではありません。ありがちな組み合わせは3つです。
重ねて使う3つの形
コンテナ + Bash sandbox
外側のコンテナで環境を閉じ、内側のBash sandboxでコマンド単位の制限を足します。特権なしコンテナでは
enableWeakerNestedSandboxが前提です。sandbox runtime + 通信の許可リスト
Dockerを使わずにプロセス全体を囲い、通信先を承認済みのホストだけに絞ります。無人実行を軽く始めたいときの形です。
管理設定のBash sandbox + dev container
組織がBash sandboxを強制し、チームはdev containerで環境を揃えます。強制の層と標準化の層を分ける形です。
他社エージェントとの実装差はサンドボックス実装比較で扱っています。
選ぶときの判断
最初に決めるのは、フラグを使うか、リポジトリを信頼できるかの2点です。auto modeは分類器がアクションを審査する仕組みで、隔離境界ではありません。ただし無人実行の防御を一段厚くする意味で、境界を足す価値は残ります。--dangerously-skip-permissionsではその境界が必須になります。
LinuxとmacOSでは、このフラグはroot実行だと起動を拒否します。コンテナもVMもsandbox runtimeも、非rootのユーザーで動かす構成にしてください。