Claude Code の隔離環境を選ぶ

Claude Code エンジニアリング 7分で読めます

Claude Code を隔離すると、そのセッションが読み書きできる範囲とネットワークの到達範囲を制限できます。権限プロンプトを減らすとき、無人で動かすとき、完全には信用していないコードを扱うときほど効いてきます。この記事では公式ドキュメントに基づき、コマンド単位の軽い隔離から仮想マシンまでの選択肢を、何が隔離されるかという観点で比較します。

隔離が要る場面

隔離が問題になるのは、おおむね次の3つの場面です。

先に注意点を1つ。隔離は被害を小さくするだけで、リスクを消すわけではありません。外向き通信を許している構成なら、エージェントが読めるデータは持ち出され得ます。プロジェクトディレクトリを書き込み可能でマウントしているなら、そのコードは変更され得ます。

そしてもう1つ。隔離してもモデルへ送られる内容は変わりません。プロンプトと Claude が読んだファイルは、サンドボックスの有無にかかわらず Anthropic API か設定したプロバイダへ送信されます。

選択肢の比較

公式ドキュメントは選択肢を次のように整理しています。上2つはコンテナを使わずホスト OS 上で動き、残りは Claude Code をコンテナか仮想マシンの中に置きます。

手段隔離される範囲Docker導入の手間
Bash サンドボックスBash コマンドとその子プロセス不要macOS は最小・Linux と WSL2 は小
サンドボックスランタイムClaude Code プロセス全体(ファイル操作・MCP サーバー・フックを含む)不要
Dev Container開発環境全体必要
独自コンテナ開発環境全体必要中〜大
仮想マシンOS 全体不要
Claude Code on the webOS 全体(Anthropic がホスト)不要なし(Claude のサブスクリプションが必要)

目的から選ぶなら、自分のマシンでの日常作業なら Bash サンドボックス、無人実行なら Dev Container かサンドボックスランタイム、信用できないリポジトリなら専用の仮想マシンか Claude Code on the web、チームで環境を揃えるならリポジトリにコミットした Dev Container、という対応になります。

Bash サンドボックス

Bash サンドボックスは Claude Code に組み込まれています。OS のプリミティブを使って、Claude が実行するすべての Bash コマンドのファイルシステムとネットワークのアクセスを制限します。/sandbox コマンドでパネルを開き、モードを選びます。

重要なのはこれが Bash しか覆っていないことです。セッションの中で動くもののうち、次はこの外側にあります。

組み込みツール・MCP サーバー・フックまで1つの OS 境界の内側に入れたい場合は、Claude Code プロセス全体をサンドボックスランタイムか Dev Container、独自コンテナの中で動かす必要があります。

なお、この手段はネイティブの Windows には対応していません。Windows ホストでは WSL2 を使うか、コンテナ・仮想マシンを選びます。

サンドボックスランタイム

@anthropic-ai/sandbox-runtime パッケージは、組み込みの Bash サンドボックスと同じ Seatbelt / bubblewrap の隔離でプロセス全体を包みます。これを通して Claude Code を起動すると、Bash だけでなくセッション内のすべてのツール・フック・MCP サーバーが制約されます。ベータのリサーチプレビューであり、設定形式は変わる可能性があります。

Linux と WSL2 では bubblewrapsocat、加えて ripgrep が要ります(Claude Code は ripgrep を同梱しますが、単体のランタイムは PATH から解決します)。macOS では追加パッケージは不要で、組み込みの Seatbelt を使います。

既定ではネットワークを遮断し、書き込みを組み込みの少数のパスに閉じるので、起動前に設定が要ります。設定は ~/.srt-settings.json、または --settings で渡すファイルに書きます。書き込みは少なくともプロジェクトディレクトリ、~/.claude~/.claude.json/tmp に許可します。ネットワークは api.anthropic.com(サードパーティのプロバイダを使う場合も、WebFetch のドメイン安全確認がここを呼ぶため残す)と、OAuth のサインイン・トークン更新に使う claude.aiplatform.claude.com を許可します。

Linux と WSL2 では、書き込み許可はすでに存在するパスにしか適用されません。新しい環境では最初の起動前に設定パスを作っておきます。

mkdir -p ~/.claude && echo '{}' > ~/.claude.json

設定ができたら npx で包んで起動します。

npx @anthropic-ai/sandbox-runtime claude

ここで見落としやすい挙動が1つあります。有効な ~/.srt-settings.json が無くてもランタイムは起動します。その場合はネットワークを遮断し、書き込みを /tmp/claude などの組み込みパスに閉じた状態で動きます。つまり問題なく起動したことを設定が読まれた証拠にしてはいけません--settings でファイルを渡した場合だけは、読み込みに失敗すると起動を拒否します。

コンテナと仮想マシン

Dev Container は、VS Code などが管理する Docker コンテナの中で Claude Code を動かし、プロジェクトをマウントする方式です。公式リポジトリが、既定拒否の iptables ファイアウォールを含む例を公開しています。外向き通信が絞られているため、--dangerously-skip-permissions を付けた無人実行の置き場所として使えます。

独自コンテナは、自分のネットワークポリシー・マウント・seccomp プロファイルを持つ任意の Docker / OCI イメージで動かす方式です。コンテナ基盤や CI ランナーをすでに持っている組織はこれが最短路になります。何が書き込み可能でマウントされているか、どの資格情報とトークンがコンテナ内から届くか、外向き通信のポリシーが何を許しているかを確認する、という点は他のコンテナ運用と同じです。

仮想マシンは最も強い分離を与えます。専用のカーネルを持ち、クラウドや microVM では仮想化されたハードウェアも持ちます。信用できないコードを評価するとき、あるいはセキュリティポリシーがエージェントとホストのカーネルレベルの分離を要求するときに選びます。

Claude Code on the web は、各セッションを Anthropic が管理する隔離された仮想マシンで動かします。ネットワークプロキシが既定の許可リストを適用し、別のプロキシが GitHub トークンをサンドボックスの外に置いたまま、内側にはスコープを絞った資格情報を発行します。自前でインフラを用意せずに VM 相当の隔離が欲しいときの選択肢です。

権限モードとの関係

権限モードと隔離は別のものです。権限モードはツール呼び出しを実行するかどうかと、その前に確認するかどうかを決めます。隔離は、実行されたあとにそのコマンドが何へ届くかを制限します。両者は組み合わせて働きます。

--dangerously-skip-permissions を渡すと、Claude は確認せずに動きます。間違いを止めるプロンプトが無いので、選んだ隔離境界だけがシステムを守ります。このフラグを使うセッションは、必ずコンテナ・仮想マシン・サンドボックスランタイムの中で動かしてください。ファイル操作・MCP サーバー・フックも境界の内側に入れる必要があるためです。Linux と macOS では、root で実行しようとするとこのフラグ付きの起動は拒否されます。

auto モードはプロンプトの代わりに分類器が動作を確認します。これは動作ごとの制御であって隔離境界ではないので、無人実行では隔離境界を重ねる価値があります(ただし --dangerously-skip-permissions のときのように必須ではありません)。

Bash サンドボックスだけでは Bash しか制約されないため、どちらのモードでも完全な無人実行には足りません。組み合わせは可能で、コンテナや仮想マシンの中で Bash サンドボックスを動かせば、外側の環境境界の上にコマンド単位の OS レベルの制限が乗ります。

組織として強制できるかどうかは手段によって差があります。Claude Code 自身が強制できるのは組み込みの Bash サンドボックスだけで、sandbox の設定キーを管理設定として配布します。Dev Container はリポジトリにコミットして環境を揃える「規約」であって強制の境界ではありません(Claude Code はコンテナを必須にしていないため)。コンテナや仮想マシンの外で使わせたくないなら、デバイス管理やソフトウェアの許可リストで担保することになります。

本記事は Claude Code 公式ドキュメント「Choose a sandbox environment」を元にした非公式の日本語解説です。最新の仕様は公式ドキュメントを確認してください。