Claude Codeのサンドボックスは権限プロンプト・allowedTools・OSサンドボックス・コンテナ隔離・managed-settingsの5層防御で構成され、ファイルアクセスとネットワーク通信を安全に制限できます。企業導入では各レイヤーを役割に応じて組み合わせることで、開発生産性を維持しながら情報漏洩リスクをゼロに近づけられます。
Claude Codeのサンドボックスは権限プロンプト・allowedTools・OSサンドボックス・コンテナ隔離・managed-settingsの5層防御で構成され、ファイルアクセスとネットワーク通信を安全に制限できます。企業導入では各レイヤーを役割に応じて組み合わせることで、開発生産性を維持しながら情報漏洩リスクをゼロに近づけられます。
ブログ目次
HubSpot導入、AI活用、CRM整備、業務効率化までをまとめて支援しています。記事で気になったテーマを、そのまま相談ベースで整理できます。
Claude Codeのサンドボックスは権限プロンプト・allowedTools・OSサンドボックス・コンテナ隔離・managed-settingsの5層防御で構成され、ファイルアクセスとネットワーク通信を安全に制限できます。企業導入では各レイヤーを役割に応じて組み合わせることで、開発生産性を維持しながら情報漏洩リスクをゼロに近づけられます。
「Claude Codeを全社に展開したいが、セキュリティ担当から『どこまでファイルを読めるのか』『ネットワークに勝手にアクセスしないか』と質問攻めにあっている」「開発者に自由に使わせつつ、本番設定ファイルや機密データには絶対に触らせたくない」——企業導入を検討しているテックリードやセキュリティ担当者が必ず直面する問いです。
Claude Codeは、ファイルの読み書き・Bashコマンド実行・Git操作など広範な操作を行える強力なツールですが、その強さはそのままリスクでもあります。だからこそ、権限プロンプト・allowedTools/disallowedTools・OSサンドボックス・コンテナ隔離・managed-settingsという複数のレイヤーを組み合わせた多層防御の設計が重要です。「一つの防御が突破されても次のレイヤーで食い止める」という発想で、段階的に制限を積み上げていきます。
本記事では、Claude Codeのサンドボックスアーキテクチャの全体像、macOS Seatbeltの仕組みと自動適用条件、Dockerコンテナによるネットワーク・ファイルシステム隔離、allowedTools設定によるツールレベルの制御、そして企業導入時のサンドボックス設計パターンを解説します。
Claude Codeをチームや企業で安全に運用するには、サンドボックスによる多層防御の設計が重要です。この記事では、OS・コンテナ・アプリケーションの各レイヤーでの制限設定を、導入規模別に具体的に解説します。
対象読者: Claude Codeの企業導入を検討しているセキュリティ担当者・インフラエンジニア、チーム開発でのセキュリティポリシーを設計するテックリード
Claude Codeのサンドボックスは、AIエージェントの操作範囲を技術的に制限する安全機構です。Claude Codeはローカル環境でファイルの読み書き、Bashコマンドの実行、Git操作など広範な操作を行えます。その強力さは生産性の源泉ですが、同時にリスクでもあります。
サンドボックスは「AIができること」に技術的な上限を設け、万が一の誤操作や意図しない動作が本番環境やプライベートデータに影響しないようにする役割を担います。
出典: Anthropic公式ドキュメント: Security
Claude Codeのセキュリティは、単一の仕組みではなく、複数のレイヤーで構成されています。
| レイヤー | 仕組み | 制御対象 |
|---|---|---|
| 権限プロンプト | ツール使用時の承認/拒否 | ユーザーの意図確認 |
| allowedTools/disallowedTools | ツール単位の許可・拒否リスト | 実行可能なツールの種類 |
| OSサンドボックス | macOS Seatbelt / Linux名前空間 | ファイルシステム・ネットワーク |
| コンテナ隔離 | Docker / Dev Container | 実行環境全体 |
| managed-settings | 管理者によるポリシー強制 | 組織全体の設定 |
これらのレイヤーを組み合わせることで、「一つの防御が突破されても、次のレイヤーで食い止める」多層防御を実現します。
macOSでClaude Codeを実行すると、Bashコマンドの実行時にSeatbeltサンドボックスが自動的に適用されます。Seatbeltは、macOSに組み込まれたサンドボックス機構で、プロセスごとにファイルシステムやネットワークへのアクセスを制限できます。
Claude Codeは、Bash実行時に以下のような制限をSeatbeltプロファイルで適用します。
/etc、/usr、/System等のシステムディレクトリへのアクセスを制限Seatbeltサンドボックスは、macOS環境でClaude Codeを通常起動した場合に自動的に有効になります。特別な設定は必要ありません。
ただし、以下のケースではサンドボックスが適用されない場合があります。
--dangerously-skip-permissionsフラグを使用した場合Linux環境では、macOSのSeatbeltの代わりにLinuxカーネルの名前空間(namespace)機能を使ったサンドボックスが適用されます。ファイルシステムのマウント名前空間やネットワーク名前空間を分離することで、類似のアクセス制限を実現します。
| OS | サンドボックス方式 | 設定の必要性 |
|---|---|---|
| macOS | Seatbelt(sandbox-exec) | 自動適用 |
| Linux | カーネル名前空間 | 自動適用 |
| Docker | コンテナ隔離 | 手動設定 |
OSレベルのサンドボックスは基本的な保護を提供しますが、より厳密な隔離が必要な場合にはDockerコンテナが有効です。特に以下のシナリオで推奨されます。
Claude CodeをDockerコンテナ内で実行するためのDockerfileの例です。
FROM node:20-slim
# Claude Codeのインストール
**RUN npm install -g @anthropic-ai/claude-code**
RUN npm install -g @anthropic-ai/claude-code
# 作業ディレクトリの設定
WORKDIR /workspace
# 非rootユーザーで実行
RUN useradd -m developer
USER developer
# Claude Codeの起動
ENTRYPOINT ["claude"]
docker-compose.ymlでネットワークやファイルシステムの制限を詳細に設定できます。
version: '3.8'
services:
claude-code:
build: .
volumes:
# プロジェクトディレクトリのみマウント(読み書き可能)
- ./src:/workspace/src
- ./tests:/workspace/tests
# 設定ファイルは読み取り専用
- ./package.json:/workspace/package.json:ro
- ./tsconfig.json:/workspace/tsconfig.json:ro
networks:
- restricted
# メモリ・CPU制限
deploy:
resources:
limits:
memory: 4G
cpus: '2.0'
# セキュリティオプション
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
networks:
restricted:
driver: bridge
internal: true # 外部ネットワークへのアクセスを遮断
ポイントは以下の通りです。
.env、credentials/等)はマウントしないinternal: trueで外部ネットワークへの接続を完全に遮断/tmpのみ書き込み可能にするClaude CodeはAnthropicのAPIと通信する必要があるため、完全にネットワークを遮断するとClaude Code自体が動作しなくなります。APIへの通信のみを許可する場合は、ネットワークポリシーで特定のドメインへの通信を許可します。
networks:
api-only:
driver: bridge
# 外部通信を制限しつつ、特定のエンドポイントのみ許可
実運用ではプロキシサーバーを介して通信先を制御する方法や、iptablesルールでAnthropicのAPIエンドポイントのみを許可リストに入れる方法が採られます。
Claude Codeの設定ファイル(.claude/settings.json)で、使用可能なツールを明示的に制御できます。サンドボックスがOS・コンテナレベルの制限であるのに対し、allowedTools/disallowedToolsはClaude Codeのアプリケーションレベルの制限です。
{
"permissions": {
"allowedTools": [
"Read",
"Edit",
"Write",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npm run lint)"
],
"disallowedTools": [
"Bash(rm -rf *)",
"Bash(curl *)",
"Bash(wget *)"
]
}
}
| パターン | allowedTools例 | 用途 |
|---|---|---|
| 読み取り専用 | Read, Glob, Grep |
コードレビュー・分析のみ |
| 編集限定 | Read, Edit, Write, Glob, Grep |
コード編集はOK、Bash実行は禁止 |
| テスト実行可 | 上記 + Bash(npm test), Bash(npm run lint) |
テスト・lint実行はOK |
| フルアクセス | 制限なし | 信頼されたプロジェクト |
Bash実行は、コマンドパターンで許可範囲を細かく制御できます。
{
"permissions": {
"allowedTools": [
"Bash(npm *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
]
}
}
この設定では、npm系のコマンドとGitの読み取り系コマンドのみが許可され、rm、curl、docker等の危険なコマンドは実行できません。
チーム・企業でClaude Codeを導入する場合、個々の開発者が設定を変更できてしまうとセキュリティポリシーが形骸化します。managed-settingsを使うと、管理者が設定を一元管理し、個人の設定ファイルで上書きできないようにポリシーを強制適用できます。なお、Claude Codeを活用した経営データの可視化やコンテンツマーケティングの支援についても、具体的な取り組みをご紹介しています。
詳しくは「Claude Codeの企業導入セキュリティガイド」で解説しています。
# macOS
/Library/Application Support/claude-code/managed-settings.json
# Linux
/etc/claude-code/managed-settings.json
{
"permissions": {
"disallowedTools": [
"Bash(curl *)",
"Bash(wget *)",
"Bash(ssh *)",
"Bash(scp *)"
]
},
"env": {
"CLAUDE_CODE_DISABLE_NONINTERACTIVE": "1"
}
}
managed-settingsで定義された制限は、ユーザーの.claude/settings.jsonや--dangerously-skip-permissionsフラグでは上書きできません。これにより、組織のセキュリティポリシーを技術的に強制できます。
Before: Claude Codeを全開発者が制限なしで使用しており、誰かが誤って本番用の.envファイルを読み取る可能性がありました。サンドボックスの概念は知っていても、具体的な設定手順がわからず放置していました。
After: プロジェクトの.claude/settings.jsonにallowedToolsを設定し、.envやcredentials/ディレクトリへのアクセスを制限します。macOSのSeatbeltサンドボックスが自動適用されることを確認し、追加のDocker設定は行わないシンプルな構成にします。
{
"permissions": {
"allowedTools": [
"Read",
"Edit",
"Write",
"Glob",
"Grep",
"Bash(npm *)",
"Bash(git *)",
"Bash(node *)"
]
}
}
少人数チームでは、過度に厳格な設定は生産性を損なう可能性があるため、「明らかに危険な操作だけをブロックする」アプローチが適切です。
Before: AIツールの導入自体がセキュリティ部門に承認されず、開発者はClaude Codeを使えない状態でした。「AIが顧客データにアクセスするリスク」が懸念されていました。
After: Dockerコンテナで完全に隔離された環境を構築し、ネットワークはAnthropicのAPIエンドポイントのみ許可、ファイルシステムはソースコードディレクトリのみマウントする構成を提案します。managed-settingsでツール制限を強制し、個人が設定を変更できないことをセキュリティ部門に説明します。
多層防御の各レイヤーがどのリスクを軽減するかを一覧表で示し、セキュリティ監査の材料として提出できる形にします。
| リスク | 軽減手段 | 設定場所 |
|---|---|---|
| 機密ファイルへのアクセス | Dockerのvolumeマウント制限 | docker-compose.yml |
| 外部への情報送信 | ネットワークのinternal設定 | docker-compose.yml |
| 禁止コマンドの実行 | disallowedTools | managed-settings.json |
| 設定の無断変更 | managed-settingsの強制適用 | OSレベルの配置 |
| 権限昇格 | no-new-privileges | docker-compose.yml |
Before: CI/CDでClaude Codeを自動実行する際、ランナー環境のファイルシステム全体にアクセスできてしまい、他のジョブのアーティファクトや環境変数を読み取れる状態でした。
After: CI/CDのジョブをDockerコンテナ内で実行し、Claude Codeに渡すワークスペースを最小限に限定します。GitHub Actionsの場合、以下のような構成が推奨されます。
jobs:
claude-review:
runs-on: ubuntu-latest
container:
image: ghcr.io/your-org/claude-code-sandbox:latest
options: --read-only --tmpfs /tmp --network=none
steps:
- uses: actions/checkout@v4
- name: Run Claude Code
run: claude -p "コードレビューを実行してください"
env:
ANTHROPIC_API_KEY: $
--network=noneでネットワークを完全遮断する場合、API通信もできなくなるため、事前にプロンプトとコンテキストを渡してオフラインで実行する方法を検討するか、API通信のみを許可するネットワーク設定を個別に構成します。詳しくは「Claude Code × CI/CD自動化」で解説しています。
Hooksのマッチャーで特定のコマンドパターンを検出し、サンドボックス外のリソースにアクセスしようとした場合にブロックする設定が可能です。詳しくは「Claude Code Hooksで開発を自動化する方法」で解説しています。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "echo $CLAUDE_TOOL_INPUT | jq -r '.command' | grep -qE '(sudo|chmod 777|rm -rf /)' && exit 1 || exit 0"
}
]
}
}
CLAUDE.mdにサンドボックスのルールを明記しておくことで、Claude Codeがそのルールを理解した上で動作します。技術的な制限とAIへの指示の両面から安全性を確保するアプローチです。詳しくは「Claude Codeの.claude/ディレクトリ」で解説しています。
# セキュリティルール
- /workspace/ 以外のディレクトリにファイルを作成・編集しないでください
- curl, wget等の外部通信コマンドは使用しないでください
- .env ファイルの内容を表示・読み取りしないでください
サンドボックス設定自体の妥当性を検証することも重要です。Claude Codeに「この設定ファイルの制限に抜け漏れがないか確認して」と指示することで、設定ファイルをレビュー対象に含め、制限の抜け漏れがないかをAIにチェックさせられます。
属人化を防ぎ、チーム全体で再現可能な仕組みとして標準化することが成功の鍵です。
自社の業務フローや要件に応じて、段階的にカスタマイズしていくことをおすすめします。
macOSのSeatbeltサンドボックスによるパフォーマンスへの影響はごくわずかです。ファイルアクセス時にカーネルレベルでポリシーチェックが入りますが、体感できるほどの遅延は発生しません。Dockerコンテナの場合は、コンテナの起動時間(数秒程度)が追加されますが、起動後のパフォーマンスはホスト環境とほぼ同等です。ネットワーク制限によりnpmパッケージのダウンロード等が遅くなる場合がありますが、事前にキャッシュを含めたイメージを作成しておくことで回避できます。
サンドボックスの制限に引っかかると、Claude Codeは該当の操作が失敗した旨を報告します。対処方法は2つあります。一つは、allowedToolsに必要なコマンドパターンを追加する方法です。もう一つは、Claude Codeに対して「この操作はサンドボックスの制限で実行できないため、別のアプローチを提案してください」と指示する方法です。制限に対してClaude Codeが代替案を提案してくれる場合も多いため、まずは代替案を確認するのがおすすめです。
はい、分けるべきです。開発環境ではデバッグやテストのために比較的広い権限が必要ですが、CI/CD環境や本番に近い環境では厳格な制限を適用します。.claude/settings.json(プロジェクト共通)と.claude/settings.local.json(個人環境)を使い分けるか、Docker環境ごとに異なるmanaged-settingsを配置する構成が実用的です。チーム全体のベースラインは.claude/settings.jsonで統一し、個人の開発環境では.claude/settings.local.jsonで微調整を行うパターンが推奨されます。
株式会社StartLinkは、事業推進に関わる「販売促進」「DXによる業務効率化(ERP/CRM/SFA/MAの導入)」などのご相談を受け付けております。 サービスのプランについてのご相談/お見積もり依頼や、ノウハウのお問い合わせについては、無料のお問い合わせページより、お気軽にご連絡くださいませ。
株式会社StartLink 代表取締役。累計150社以上のHubSpotプロジェクト支援実績を持ち、Claude CodeやHubSpotを軸にしたAI活用支援・経営基盤AXのコンサルティング事業を展開。
HubSpotのトップパートナー企業や大手人材グループにて、エンタープライズCRM戦略策定・AI戦略ディレクションを経験した後、StartLinkを創業。現在はCRM×AIエージェントによる経営管理支援を専門とする。