Skip to main content
Claude Code を分離することで、セッションがホスト上で読み取り、書き込み、ネットワークにアクセスできる内容を制限します。これは、Claude に権限プロンプトを少なくして作業させたり、無人で実行したり、完全に信頼していないコードを指定したりする場合に最も重要です。 Claude Code は、軽量なコマンド単位のサンドボックスから完全に独立した仮想マシンまで、複数の種類の分離環境で実行できます。このページでは、それらを分離内容と必要な要件で比較し、脅威モデルに合ったものを選択するのに役立ち、組織全体でその選択を強制する方法を示します。
より広いセキュリティモデルについては、セキュリティを参照してください。Agent SDK デプロイメントについては、セキュアなデプロイメントを参照してください。

サンドボックス化アプローチの比較

以下の表の最初の 2 つのアプローチはコンテナなしでホストオペレーティングシステム上で実行されます。残りは Claude Code をコンテナまたは仮想マシン内に配置します。 サンドボックス化された Bash ツールは Claude Code に組み込まれており、Bash コマンドのみを制限します。組み込みファイルツール、MCP サーバー、hooks はホスト上で直接実行されます。表内の他のすべてのアプローチは、Claude Code プロセス全体を分離境界内に配置するため、ファイルツール、MCP サーバー、hooks も制限されます。
サンドボックス分離はセキュリティ侵害の影響を軽減しますが、リスクを完全に排除することはできません。ネットワーク出力を許可するアプローチは、エージェントが読み取ることができるデータをリークする可能性があり、プロジェクトディレクトリを書き込み可能にマウントするアプローチはそのコードを変更する可能性があります。ハード制御としてサンドボックスに依存する前に、セキュリティの制限事項を確認してください。分離はモデルに送信される内容を変更しません。プロンプトと Claude が読み取るファイルは、サンドボックスの有無にかかわらず、Anthropic API または設定されたプロバイダーに送信されます。Claude Code が送信する内容と削減方法については、データ使用を参照してください。

アプローチを選択する

目標を以下の行と照合してから、その後に続く詳細セクションを読んでください。

分離が権限モードとどのように関連するか

権限モードは、ツール呼び出しが実行されるかどうか、および最初にプロンプトが表示されるかどうかを決定します。分離は、コマンドが実行されたら何にアクセスできるかを制限します。この 2 つは連携して機能します。権限モードがアクションを確認なしで実行させる場合、分離境界はそれらのアクションが到達できる内容を制限します。 --dangerously-skip-permissions を渡すと、Claude は最初にあなたに尋ねることなく行動します。どのモードも自動承認しないアクションは依然として適用されます。 間違いをキャッチするプロンプトがないため、選択した分離境界があなたのシステムを保護するものです。常にコンテナ、VM、または サンドボックスランタイム内で --dangerously-skip-permissions セッションを実行してください。ファイルツール、MCP サーバー、hooks も境界内にあります。Linux と macOS では、Claude Code はこのフラグを使用して root として実行されている場合は起動を拒否するため、コンテナ、VM、またはサンドボックスランタイムを非 root ユーザーとして実行してください。 自動モードはプロンプトを、アクションをレビューする分類器に置き換えます。分類器はアクション単位の制御であり、分離境界ではないため、分離境界は無人実行の防御層を追加し、--dangerously-skip-permissions の場合のように必須ではありません。 サンドボックス化された Bash ツール単独では Bash のみを制限するため、どちらのモードでも完全に無人で実行するには不十分です。アプローチを重ねることができます。サンドボックス化された Bash ツールをコンテナまたは VM 内で実行すると、外側の環境境界の上に OS レベルのコマンド制限が得られます。Bash サンドボックス自体が権限ルールおよび権限モードとどのように相互作用するかについては、サンドボックス化が権限および権限モードとどのように関連するかを参照してください。

サンドボックス化された Bash ツール

このオプションはネイティブ Windows をサポートしていません。Windows ホストでは、WSL2 または以下のコンテナまたは VM アプローチのいずれかを使用してください。
サンドボックス化された Bash ツールは Claude Code に組み込まれています。オペレーティングシステムプリミティブを使用して、Claude が実行するすべての Bash、PowerShell、または Monitor コマンドのファイルシステムとネットワークアクセスを制限します。 /sandbox コマンドを実行してサンドボックスパネルを開き、モードを選択してください。サンドボックス化ガイドでは、承認モード、デフォルト境界、および拡大または縮小する方法について説明しています。 コマンド単位のサンドボックスはセッションで実行されるすべてをカバーしていません。
  • Read、Edit、WebFetch などの他の 組み込みツールは Claude Code プロセス内で実行され、任意のコードを生成しません。権限ルールがパスまたはドメインでそれらをゲートします。
  • MCPサーバーと command hooksは、ホスト上で制約なく実行される別のプロセスです。
組み込みツール、MCP サーバー、hooks をすべて 1 つの OS 境界の背後に配置するには、Claude Code プロセス全体を サンドボックスランタイム、dev コンテナ、または カスタムコンテナ内で実行してください。

Sandbox ランタイム

@anthropic-ai/sandbox-runtime パッケージは、プロセス全体を、組み込み Bash サンドボックスが使用するのと同じ Seatbelt または bubblewrap 分離でラップします。Claude Code をランタイムを通じて実行すると、シェルコマンドだけでなく、セッションのツール、フック、MCP サーバーも制約されます。ランタイムはベータ版のリサーチプレビューであり、パッケージの進化に伴い、その設定形式が変わる可能性があります。 このセクションでは、設定する内容とランタイムが独自に実施する内容について説明します。Agent SDK アプリケーションでランタイムをデプロイする場合は、セキュアデプロイガイドを参照してください。

ランタイムのセットアップと起動

Linux と WSL2 では、ランタイムは組み込みサンドボックスと同じ bubblewrap および socat パッケージに加えて、ripgrep に依存します。Claude Code はこれをバンドルしていますが、スタンドアロンランタイムは PATH から解決します。Linux と WSL2 のセットアップで説明されているように bubblewrap と socat をインストールし、ディストリビューションのパッケージマネージャーから ripgrep をインストールしてください。macOS では追加のパッケージは不要です。ランタイムはそこで組み込み Seatbelt サンドボックスを使用します。 デフォルトでは、ランタイムはネットワークアクセスを拒否し、書き込みを組み込みランタイムパスの小さなセットに限定するため、Claude Code をランタイムを通じて起動する前に設定してください。設定を ~/.srt-settings.json に配置するか、--settings で渡すファイルに配置します。パッケージの README に設定スキーマが記載されています。 少なくとも以下への書き込みアクセスを許可してください:
  • プロジェクトディレクトリ。
  • Claude Code の設定パス ~/.claude および ~/.claude.json。
  • Claude Code がランタイムファイルを書き込むディレクトリ。CLAUDE_CODE_TMPDIR を設定していない場合、そのディレクトリは次のとおりです:
    • Linux と WSL2:/tmp
    • macOS:/private/tmp。/tmp はこのディレクトリへのシンボリックリンクであり、Seatbelt は解決後のパスをチェックします。
セッションが必要とするネットワークドメインを許可してください:
  • api.anthropic.com、または設定したプロバイダーのエンドポイント。サードパーティプロバイダーでは、api.anthropic.com も保持してください。WebFetch ドメインセーフティチェックは、skipWebFetchPreflight: true を設定しない限り、デフォルトでそれを呼び出します。
  • claude.ai および platform.claude.com。OAuth サインインとトークンリフレッシュに必要です。API キーで認証された実行では、これら 2 つを削除できます。
Linux と WSL2 では、ランタイムは既に存在するパスにのみ書き込み許可を適用します。新しい環境では、最初の起動前に Claude Code の設定パスを作成してください:
設定ファイルが配置されたら、npx で Claude Code を起動し、ラップするコマンドとして claude を渡します:
Claude Code は、設定したファイルシステムおよびネットワーク境界を持つサンドボックス内で起動します。同じコマンドは、スタンドアロン MCP サーバーや他のヘルパープロセスのサンドボックス化にも使用できます。

ランタイムが独自にブロックするもの

ランタイムは、ユーザーによる設定なしで最高リスクの書き込みをブロックします:
  • denyWrite は allowWrite より優先されます。
  • プロジェクトルートでは、ランタイムは .git/hooks を拒否し、filesystem.allowGitConfig: true を設定しない限り .git/config を拒否し、.mcp.json、.claude/commands、.claude/agents、およびシェルスタートアップファイルを拒否します。
  • macOS では、これらの拒否は書き込みが発生したときにチェックされるため、ネストされたファイルとセッション中に作成されたリポジトリもカバーします。
  • Linux と WSL2 では、ランタイムは起動時に拒否リストを一度だけ構築します。プロジェクトルートを確実にカバーし、その時点で存在するネストされたコピーの浅いスキャンをベストエフォートで実行し、git init、git clone、またはスキャフォルディングなど、セッションが後で作成するものはカバーしません。README の mandatoryDenySearchDepth セクションでは、スキャンの正確なセマンティクスについて説明しています。
  • ~/.srt-settings.json が存在せず、--settings を渡さない場合でも、ランタイムは起動します。ネットワークアクセスをブロックし、書き込みを /tmp/claude、~/.npm/_logs、~/.claude/debug などの組み込みランタイムパスに限定します。クリーンスタートを設定が読み込まれた証拠として受け取らないでください。
  • 設定ファイルが存在するが空、読み取り不可、または無効な場合、ランタイムは起動を拒否します。これは ~/.srt-settings.json でも、--settings で渡すファイルでも同じです。また、--settings ファイルが存在しない場合も起動を拒否します。
書き込み許可には、Claude Code が設定を読み込む他のパスも依然として含まれるため、denyWrite でそれらを拒否してください。それらに書き込みできるサンドボックス化されたセッションは、次に Claude Code を起動するときに、サンドボックス化されずに実行されるフック、権限ルール、または MCP サーバーを永続化できます。

無人実行後

書き込み可能なままにしたパスを確認してください。Linux と WSL2 では、セッションが作成したものも確認してください。

Dev コンテナ

Dev コンテナは Claude Code を Docker コンテナ内で実行します。VS Code または互換性のあるエディターが管理し、プロジェクトがマウントされます。リポジトリの .devcontainer/ ディレクトリで独自に定義できます。 claude-code リポジトリは、デフォルト拒否 iptables ファイアウォールを備えた example dev container を出発点として公開しています。リポジトリにコピーし、ファイアウォール許可リスト、ベースイメージ、ピン留めされた Claude Code バージョンを環境に合わせて調整します。ファイアウォールが未承認の出力をブロックするため、このような設定は無人作業のために --dangerously-skip-permissions で Claude Code を実行することをサポートしています。

カスタムコンテナ

Claude Code は、独自のネットワークポリシー、マウントされたボリューム、seccomp プロファイルを備えた任意の Docker または OCI コンテナイメージで実行できます。これは、既存のコンテナインフラストラクチャまたは CI ランナーを持つ組織にとって最も一般的なパスです。 複数のマネージドサンドボックスおよびリモート実行サービスがコンテナをホストできます。操作するコンテナと同じチェックリストが適用されます。書き込み可能にマウントされているもの、その内部で到達可能な認証情報とトークン、ネットワーク出力ポリシーが許可するものを確認します。 コマンド単位の制限のためにコンテナ内に組み込みの Bash サンドボックスを重ねることができます。特権のないコンテナには、コンテナ内で Bubblewrap が起動しないで説明されている enableWeakerNestedSandbox が必要です。

仮想マシン

専用の仮想マシンは、独自のカーネルと、クラウドまたは microVM デプロイメントでは独自の仮想化ハードウェアを備えた最強の分離を提供します。オプションには、クラウドインスタンス、ローカルハイパーバイザー、Firecracker などの microVM が含まれます。信頼できないコードを評価する場合、セキュリティポリシーがエージェントとホスト間のカーネルレベルの分離を要求する場合、またはホストレベルのアプローチがコンプライアンス要件を満たさない場合に、このアプローチを使用します。 Docker Sandboxes は、独自の Docker デーモンとワークスペース同期を備えた microVM を提供し、Docker Sandboxes がインストールされているホストで Claude Code を実行できます。これは Docker の無料のスタンドアロン製品であり、Docker Desktop は必要ありません。

クラウドセッション

クラウドセッションは、分離された Anthropic 管理の仮想マシンで実行されます。ネットワークプロキシはデフォルト許可リストを強制し、別のプロキシはサンドボックス内のリポジトリアクセスのためにスコープ付き認証情報を発行しながら、GitHub トークンをサンドボックスの外に保持します。組織がセルフホスト環境にルーティングするセッションは、代わりにユーザーがプロビジョニングするインフラストラクチャ上で実行され、分離、エグレス制御、および git 認証情報はデプロイメントの責任です。 インフラストラクチャを自分でプロビジョニングせずに完全な VM 分離が必要な場合、またはローカル開発環境がないデバイスからタスクを委任する場合に、このアプローチを使用します。Claude サブスクリプションが必要です。CLI から起動しない限り、サンドボックスがリポジトリをクローンできるように、接続された GitHub アカウントも必要です。--cloudを使用して CLI から起動する場合、Claude Code は代わりにローカルリポジトリをバンドルしてアップロードできます。プラン可用性と GitHub 認証オプションについては、クラウドで Claude Code を使用するを参照してください。

組織全体で分離を強制する

個々の開発者は、このページのいずれかのサンドボックス化アプローチにオプトインできます。組織が強制できるもの、およびどのツールで強制できるかは、アプローチによって異なります。
  • 組み込み Bash サンドボックス:Claude Code が自体で強制する唯一のアプローチです。管理設定を通じて sandbox 設定キーを配信します。MDM で管理されるファイルとして、または Claude.ai のサーバー管理設定を通じて。デプロイするキーと開発者がポリシーを拡大するのを防ぐ方法については、管理設定でサンドボックス化を強制を参照してください。
  • Dev コンテナ:example dev containerをリポジトリにコミットして、チーム全体で環境を標準化します。Claude Code がコンテナを要求しないため、これは強制境界ではなく慣例です。開発者が Claude Code をその外で実行できないようにする場合は、組織のデバイス管理またはソフトウェア許可リストツールでそれを強制します。
  • カスタムコンテナと VM:承認されたイメージを通じて Claude Code を配布し、組織のデバイス管理またはソフトウェア許可リストツールを使用して、その外でのインストールを防止します。

関連項目

これらのページでは、このページで説明しているサンドボックス化アプローチの設定とポリシーの詳細について説明しています。