4 分で読めます

Claude CodeのBashサンドボックス実装ガイド

「AIエージェントに承認なしでコマンドを実行させたいが、暴走したときの被害範囲が怖い」——エージェントガバナンスを検討する現場でよく出る懸念だ。Claude Codeはこの問題に、BashサンドボックスというOS層の隔離機構で答える。権限ルールによる事前承認とは独立した仕組みで、承認済みコマンドが想定外の動作をしてもカーネルが機械的に止める。本記事は公式ドキュメントに基づき、設定方法と限界を整理する。

Claude CodeのBashサンドボックスとは何か

Bashサンドボックスはコマンド実行前ではなく実行中に、OSがファイルとネットワークの境界を強制する仕組みです。

macOSでは追加インストール不要のSeatbeltフレームワーク、LinuxとWSL2ではbubblewrap(bwrap)を使い、Bashコマンドとその子プロセス全てにファイルシステムとネットワークの境界を強制する。/sandboxコマンドでモード選択・除外コマンド・解決済み設定を確認できる。Linuxではオプションのseccompフィルタでユニックスドメインソケットのブロックも追加できる。

サンドボックスと権限ルールはどう違うか

権限ルールは「実行して良いか」を事前判定し、サンドボックスは「実行後に何に触れるか」をOSが強制する、独立した2層です。

権限ルールはコマンド文字列(またはauto modeの分類器判定)を根拠に実行前へ判断する。一方サンドボックスは実際に動くプロセスをOSが縛るため、モデルが何を意図していたかに関わらず境界が保たれる。auto-allowモードではサンドボックス化できるコマンドはプロンプトなしで自動承認されるが、rm等の危険パス操作や明示的なdenyルールは常に優先される。

ファイルシステムと通信はどう隔離されるか

デフォルトでは作業ディレクトリのみ書き込み可、読み取りはホーム含め全体可、通信は許可済みドメインのみ通過します。

書き込みは作業ディレクトリ・--add-dirで追加したディレクトリ・セッション一時ディレクトリに限られ、.claude/settings.json.git/hooksなどの設定ファイルは書き込み可能領域の中でも保護される。読み取りはデフォルトで~/.aws/credentials~/.ssh/も含め全体に及ぶため、sandbox.credentialsでファイル・環境変数をdeny(遮断)またはmask(実利用先にだけプロキシ経由で復元)に設定する必要がある。ネットワークはサンドボックス外で動くプロキシが仲介し、sandbox.network.allowedDomainsで事前許可したドメイン以外は初回アクセス時にプロンプトまたは分類器判定にかかる。

エンタープライズ環境ではどう強制すればよいか

組織全体に強制するには managed settings で enabledfailIfUnavailableallowManagedDomainsOnly を配布します。

個人設定は.claude/settings.local.jsonに保存されるが、全開発者に強制するにはMDMまたはserver-managed settings経由でsandbox.enabled: truefailIfUnavailable: trueを配布し、依存パッケージ欠如時に無防備な平文実行へフォールバックさせない。allowManagedDomainsOnlyを設定すれば開発者側のallowedDomains追加を無視し、組織承認ドメインのみに固定できる。AWS認証情報のように署名を伴う値はcredentials.awsPairsでペア指定すれば、プロキシがSigV4署名を再計算しつつ実値を隠したまま送信できる。大規模なマルチチーム統制はRDEの設計支援対象になる。

導入前に知っておくべき限界は何か

標準のプロキシはTLSを終端しないため、ドメイン偽装(domain fronting)で許可ドメイン外への通信が理論上可能です。

サンドボックスのネットワーク許可はクライアントが提示するホスト名を根拠に判定し、デフォルトではTLSの中身を検査しない。厳格な脅威モデルではnetwork.tlsTerminateによるTLS終端か、独自CA証明書を組み込んだカスタムプロキシが必要になる。また対象はBashサブプロセスのみで、Read/Edit/Writeツールは通常の権限システムで別途制御され、Computer Useは実機の画面を直接操作するため対象外である。dockerjest --watchmanなど一部ツールはサンドボックスと非互換なためexcludedCommandsでの除外が必要になる。

規模別の留意点(SMB / エンタープライズ)

SMB(中小企業)向け

エンジニアが少ない環境では、まず/sandboxパネルでauto-allowモードを有効にし、kubectlterraformなど書き込み先を広げたいツールだけsandbox.filesystem.allowWriteに個別追加するのが現実的な出発点だ。設定は~/.claude/settings.jsonに1回書けば全プロジェクトに適用される。Kuuのエージェントガバナンス支援ではこうした最小構成の導入相談も受け付けている。

エンタープライズ向け

managed settingsでsandbox.enabledfailIfUnavailableを固定し、.claude/settings.json側からの無効化を防ぐ。加えてsandbox.credentials~/.aws~/.sshを明示的にdeny/maskしないと、デフォルトの読み取り許可がそれらを素通りさせる点に注意したい。

参考

まとめ

Claude CodeのBashサンドボックスは、権限ルールという確率的・事前判定の防御に、OSレベルで強制される決定論的な第2層を重ねる仕組みだ。デフォルトの読み取り許可範囲やTLS非検査といった限界を理解した上で、SMBはallowWriteの個別追加から、エンタープライズはmanaged settingsでの強制から始めるのが実践的な導入順序になる。自社のエージェント実行基盤への組み込みを検討する際は、Kuu株式会社のエージェントガバナンス支援を活用してほしい。

関連記事

Claude Codeの権限設計——最初のdenyルール3つエージェントの封じ込め設計——環境・モデル・外部の3層防御Claude in Chromeの権限設計——3モードと運用指針エージェントのツール実行環境——サンドボックス分離の設計パターン