Claude Code サンドボックス設定2026では、信頼できる自社リポジトリは権限を絞った本機Macで実行し、出所不明・依存関係の導入・広い通信・長時間実行がある場合は、SSH鍵やクラウド資格情報を持たない専用仮想マシンまたはクラウドMacへ移してください。確認ダイアログだけに頼らず、ファイルシステム、ネットワーク出口、権限回避の3層を同時に制限することが条件です。
この記事は、外部リポジトリや未知のPull RequestをClaude Codeで調査する開発者、テストやMCPツールの実行権限を管理する責任者、AI Agent用の専用Macを準備する環境管理者を対象にしています。
※ 最終更新日:2026年8月15日。設定仕様はAnthropic公式ドキュメント、公式セキュリティアドバイザリ、Wizの原研究ページを同日に確認しています。
起動前のリスク判定
未知のリポジトリをクローンした直後、そのディレクトリでClaude Codeを起動する流れは、調査としては自然でも安全な初手とは限りません。危険はClaudeが生成するShellコマンドだけでなく、プロジェクト設定、Hooks、依存関係のインストールスクリプト、シンボリックリンク、MCPの宣言、外部ツールが返す指示にも含まれます。
Anthropicは、信頼確認の前にプロジェクト設定を読み込む経路で、環境変数ANTHROPIC_BASE_URLを攻撃者の管理する接続先へ変更できた事例を公式アドバイザリで公開しています。影響を受けたバージョンはv2.0.65未満、修正版はv2.0.65です。手動更新を使う環境では、起動前にバージョンを確認してください。詳しくはClaude Code公式セキュリティアドバイザリを参照できます。
また、Wizは2026年7月7日にGhostApprovalの研究更新を公開し、シンボリックリンクを含む許可確認画面と実際の書き込み先の差異を問題として説明しました。Anthropicは、シンボリックリンク警告が2026年2月5日のv2.1.32で出荷済みであり、報告されたシナリオは当時の脅威モデル外だったと回答しています。これは全バージョンが同じ方法で悪用できるという確定情報ではなく、第三者研究と提供元の見解が分かれている事例として扱うべきです。原研究はWizのGhostApproval報告で確認できます。
起動前チェックリスト
- [ ] Claude Codeを手動更新している場合、公式アドバイザリの修正版以降か確認する
- [ ]
.claude/、プロジェクト設定、Hooks、MCP設定を読む - [ ]
package.jsonのpreinstall、postinstall、prepareを確認する - [ ]
pyproject.toml、Makefile、Docker関連ファイル、インストールスクリプトを確認する - [ ] シンボリックリンクの実体とリンク先を確認する
- [ ] SSH秘密鍵、クラウド資格情報、署名鍵、Production用環境変数を実行環境から外す
- [ ] まず読み取り専用の計画モードでコードと設定を確認する
環境の選択基準
最初からすべてのリポジトリを仮想マシンへ移す必要はありません。ただし、Claude Code、macOS Seatbelt、Dev Container、仮想マシンは同じ防御層ではないため、何を隔離できるかを分けて考える必要があります。
| 実行方法 | 主な境界 | 向いている作業 | 残る注意点 |
|---|---|---|---|
| 本機Mac+権限制御 | Claude Codeの権限、macOSのSeatbelt | 信頼できるコードのレビュー、短い修正 | ホストの設定や資格情報を誤って許可しやすい |
| Dev Container | コンテナ、イメージ、ネットワーク設定 | 再現性のある開発、依存関係の導入 | バインドマウント、コンテナ内認証情報、許可済み通信は残る |
| 専用仮想マシン | ゲストOS、仮想ディスク、独立した資格情報 | 未知のスクリプト、長時間処理、破棄前提の調査 | ホストとの共有フォルダーやクリップボード設定に注意 |
| 専用クラウドMac | 物理Mac、独立アカウント、遠隔接続 | macOSツールチェーン、継続ジョブ、隔離ノード | 接続経路、ログ保存、利用後の再構築手順が必要 |
Anthropicの公式ドキュメントでも、Dev Containerは有用な保護を提供する一方、--dangerously-skip-permissionsを使うと、コンテナ内に存在するClaude Codeの認証情報などを外部へ送信できる可能性があるため、信頼できるリポジトリに限定するよう説明されています。Dev Container公式ガイドでは、ホストの~/.sshやクラウド資格情報をマウントしない運用も推奨されています。
| 判断条件 | 選ぶ環境 | 回避すべき設定 |
|---|---|---|
| 自社管理で、依存関係も固定されている | 本機Macのサンドボックス | SSH鍵を置いたままの自動承認 |
| 外部Pull Requestだが、コードを読むだけ | 計画モードまたは読み取り専用環境 | いきなりのインストール実行 |
| 依存関係の導入とテストが必要 | Dev Containerまたは専用VM | ホスト秘密情報のマウント |
| 出所不明で、通信や長時間実行がある | 専用VMまたは専用クラウドMac | 本機からの資格情報共有 |
| macOS専用ツールやXcodeが必要 | 専用クラウドMac | 使い終わった環境の継続利用 |
初回起動の設定
1. 読み取り専用で内容を確認する
最初のセッションでは、計画モードまたは標準の承認モードを使います。計画モードはファイルを読み取り、読み取り専用のShell操作で調査できますが、ソースファイルを編集しません。権限モードの公式説明でも、計画を承認した後に編集可能なモードへ移る流れが示されています。
確認対象は、次のように実行経路へ影響するファイルです。
.claude/settings.json、プロジェクト内の指示ファイル、Hookspackage.jsonのpreinstall、postinstall、prepare- Python、Ruby、Goなどの依存関係定義とインストール処理
.devcontainer/、Dockerfile、CI設定- MCPサーバーの接続先、起動コマンド、環境変数
- ホームディレクトリや親ディレクトリを指すシンボリックリンク
この段階では、コードの品質ではなく「何が起動され、どのパスへ書き込み、どの接続先へ通信するか」を確認します。
2. 権限ルールをdeny優先で組む
Claude Codeの権限ルールは、deny、ask、allowの順に評価され、最初に一致したルールが適用されます。したがって、許可ルールを先に大量に作るのではなく、秘密情報と危険な操作を拒否し、必要な処理だけを個別に許可する構成が適切です。権限設定の公式リファレンスでは、読み取り、Shell、ファイル変更、MCPを個別に管理できます。
例として、プロジェクト設定では次のような考え方を取ります。
{
"permissions": {
"deny": [
"Read(~/.ssh/**)",
"Read(~/.aws/**)",
"Read(.env*)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(ssh *)"
],
"ask": [
"Bash(npm install *)",
"Bash(pip install *)",
"Bash(git push *)",
"WebFetch"
]
}
}
この例をそのまま全環境へ配布するのではなく、使用する言語、パッケージ管理ツール、MCP構成に合わせて調整します。特にBash(curl *)のような単純なパターンだけでは、別のツール経由の通信やスクリプト内の接続まで完全には表現できないため、後述するOSレベルのサンドボックスと組み合わせます。
3. macOS Seatbeltで実行範囲を限定する
Claude Codeのサンドボックスは、macOSではSeatbelt、Linuxではbubblewrapを利用して、Bashとその子プロセスへOSレベルの制限を適用します。つまり、Claude Codeが直接呼び出すShellだけでなく、そこから起動されたnpm、terraform、kubectlなどにも境界が引き継がれます。サンドボックス公式ドキュメントでは、作業ディレクトリへの書き込み、読み取り拒否、許可ドメインを設定できます。
Claude Code内で/sandboxを実行して有効化した後、少なくとも次を確認します。
{
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false,
"filesystem": {
"denyRead": [
"~/.ssh",
"~/.aws",
"~/.config/gcloud",
"~/.docker"
],
"denyWrite": [
"~/.ssh",
"~/.aws",
"~/.config/gcloud",
"/usr/local/bin"
]
},
"network": {
"allowedDomains": [
"github.com",
"registry.npmjs.org"
]
}
}
}
failIfUnavailableを有効にする理由は、サンドボックスが起動できないときに警告だけを表示して、非サンドボックス状態で処理を継続する構成を避けるためです。さらにallowUnsandboxedCommandsをfalseにすると、互換性問題を理由にdangerouslyDisableSandboxで抜ける経路を閉じられます。
ただし、サンドボックスのネットワーク制御は許可ドメインを基準にする仕組みであり、TLS通信の内容そのものを検査するものではありません。信頼できるドメインを許可しても、そのドメイン上の悪意あるレスポンスや取得した依存関係まで安全になるわけではない点に注意が必要です。
実行中の監視
Anthropicのエンジニアリング記事では、従来の承認プロンプトについて、利用者が約93%のプロンプトを承認していたと説明されています。そのため、承認回数を減らすこと自体を安全性とみなすのではなく、承認を減らしても被害範囲が広がらない境界を先に作る必要があります。公式のサンドボックス導入後は、内部利用で権限プロンプトが84%減少したと報告されていますが、これは特定環境でのAnthropic側の利用結果であり、すべての構成の安全効果を保証する数値ではありません。AnthropicのContainment解説で前提を確認してください。
実行中は、次の3種類の操作を分けて監視します。
- 想定内の操作:テスト、ビルド、ローカルファイルの読み書き
- 要確認の操作:依存関係のインストール、外部APIへの通信、GitへのPush
- 即時停止の操作:秘密情報の探索、SSH接続、ホームディレクトリへの広い書き込み、サンドボックス無効化の要求
ネットワーク要求が出た場合、ドメイン名だけでなく、なぜその接続が必要なのか、取得物がどこへ保存されるのかを確認します。MCPサーバーを使う場合は、ツール名、入力値、認証方式、書き込み権限を別枠で確認してください。MCPの許可は、ローカルファイルとShellの制限を自動的に引き継ぐとは限りません。
実行後の検証と破棄
作業終了後にGitの差分だけを見る方法では、外部副作用を確認しきれません。コードの変更と、環境側で起きた変更を分けて確認します。
終了時チェックリスト
- [ ]
git diffと未追跡ファイルを確認した - [ ] Shell設定、Hooks、
~/.claude周辺に予期しない変更がない - [ ]
~/.ssh/authorized_keysやSSH設定に追加がない - [ ] 新しい環境変数、資格情報ファイル、実行ファイルが作られていない
- [ ] 許可していないドメインへの通信がない
- [ ] GitHub、クラウド、外部APIの操作履歴を確認した
- [ ] 使い捨て環境なら、個別の削除ではなく環境全体を破棄した
コードを元へ戻しても、外部サービスへ送信したデータ、作成したクラウドリソース、追加したSSH鍵、発行済みトークンまでは戻りません。秘密情報へ接触した可能性がある場合は、コードのロールバックより先にトークンの失効と再発行を行います。
一度でも未知のスクリプトを実行した専用環境は、継続利用よりもスナップショットからの再構築、または環境全体の破棄を優先します。再利用する場合は、差分がないことではなく、実行前の信頼できる状態へ戻ったことを確認できる仕組みが必要です。
FAQ
Claude Codeで未知のGitHubリポジトリを開いても安全ですか?
安全とは限りません。プロジェクト設定、Hooks、依存関係、シンボリックリンク、外部ツールの出力が、Claude Codeの判断や実行内容に影響する可能性があります。出所と設定を確認できない場合は、SSH鍵やクラウド資格情報を持たない専用環境で最初に調査してください。
Claude CodeのサンドボックスだけでSSH秘密鍵を守れますか?
サンドボックスを有効にするだけでは不十分です。ファイルシステムの読み取り拒否、通信先の許可リスト、サンドボックス停止時の失敗設定を組み合わせ、SSH鍵を実行環境へ持ち込まないことが重要です。確認ダイアログだけではOSレベルの境界になりません。
Claude Codeは主力Macと仮想マシンのどちらで実行すべきですか?
信頼できる自社リポジトリを読み書きするだけなら、権限を絞った主力Macでも運用できます。出所不明のコード、依存関係の導入、広い通信、長時間の自動実行が必要なら、仮想マシンや専用クラウドMacへ移してください。判断基準は便利さではなく、失敗時の影響範囲です。
Dev ContainerでClaude Codeを完全に隔離できますか?
完全な隔離ではありません。ワークスペースのバインドマウント、コンテナ内のClaude Code認証情報、許可した通信先、権限回避モードの設定が残るためです。ホストのSSH鍵やクラウド資格情報をマウントせず、ネットワーク出口を制限し、信頼できるリポジトリに限定して使用してください。
Claude Codeで通信先とファイルアクセスを制限する方法は?
設定ファイルでsandboxの読み取り・書き込み範囲と許可ドメインを指定し、permissionsではdeny、ask、allowの順序を利用します。さらにallowUnsandboxedCommandsをfalse、failIfUnavailableをtrueにして、サンドボックスが利用できない場合の静かな無効化を防ぎます。
本機Macから専用環境へ移す判断
本機Macでそのまま実行する方法は、環境確認の手間が少ない一方、SSH鍵、クラウド資格情報、個人用設定、既存の開発ツールが同じ境界内に残りやすく、依存関係のインストールや長時間の自動実行では影響範囲を狭めにくいという欠点があります。Dev Containerも、ホストのワークスペースやコンテナ内認証情報を共有する構成では、完全な分離にはなりません。
そのため、未知のリポジトリを継続的に処理する場合は、専用の仮想マシンまたは独立したクラウドMacを用意し、ファイル、通信、資格情報を別々に設計する方が現実的です。RUVCLOUDは専有の物理MacをSSH・VNCで利用でき、Mac専用ツールチェーンや長時間ジョブを本機環境から切り離す選択肢になります。構成や利用期間はRUVCLOUDの料金案内で確認し、必要な条件が決まった段階で専用Macの注文画面へ進んでください。
価格や接続拠点だけで決めるのではなく、環境を破棄できるか、資格情報を持ち込まずに作業できるか、許可ドメインを説明できるかを確認してから、一時的な実行ノードとして使うのが安全な進め方です。