Claude Codeのサンドボックスは、権限プロンプト・allowedTools・OSサンドボックス・コンテナ隔離・managed-settingsの5層防御で構成され、ファイルアクセスとネットワーク通信を安全に制限できます。
Claude Codeのサンドボックスは、権限プロンプト・allowedTools・OSサンドボックス・コンテナ隔離・managed-settingsの5層防御で構成され、ファイルアクセスとネットワーク通信を安全に制限できます。
ブログ目次
HubSpotゴールドパートナーのStartLinkが、HubSpot導入・AI活用・CRM整備・業務効率化までをまとめて支援しています。記事で気になったテーマを、そのまま相談ベースで整理できます。
Claude Codeのサンドボックスは、権限プロンプト・allowedTools・OSサンドボックス・コンテナ隔離・managed-settingsの5層防御で構成され、ファイルアクセスとネットワーク通信を安全に制限できます。
「Claude Codeを全社に展開したいが、セキュリティ担当から『どこまでファイルを読めるのか』『ネットワークに勝手にアクセスしないか』と質問攻めにあっている」「開発者に自由に使わせつつ、本番設定ファイルや機密データにはできる限り触れさせたくない」「AIに任せる範囲と人間が確認すべき範囲の線引きがあいまいなまま導入してしまった」——企業導入を検討しているテックリードやセキュリティ担当者が共通して直面しやすい問いです。
Claude Codeのサンドボックスとは、AIエージェントが操作できる範囲を技術的に制限する安全機構のことです。ファイルの読み書き・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のようなエージェント型ツールを安全に運用するうえで重要なのは、開発者の注意力に頼らないという考え方です。人が毎回コマンドを目視でチェックする運用は、チームが大きくなるほど形骸化しやすくなります。だからこそ、権限プロンプトやOSサンドボックスといった技術的な仕組みで制限をかけ、担当者が変わっても同じ水準の安全性が保たれる状態を作ることが重要になってきます。これは人の注意力ではなく仕組みで防ぐという発想であり、サンドボックス設計全体を貫く軸だと考えています。
Claude Codeのセキュリティは、単一の仕組みではなく、複数のレイヤーで構成されています。
| レイヤー | 仕組み | 制御対象 |
|---|---|---|
| 権限プロンプト | ツール使用時の承認/拒否 | ユーザーの意図確認 |
| allowedTools/disallowedTools | ツール単位の許可・拒否リスト | 実行可能なツールの種類 |
| OSサンドボックス | macOS Seatbelt / Linux名前空間 | ファイルシステム・ネットワーク |
| コンテナ隔離 | Docker / Dev Container | 実行環境全体 |
| managed-settings | 管理者によるポリシー強制 | 組織全体の設定 |
これらのレイヤーを組み合わせることで、一つの防御が突破されても次のレイヤーで食い止める多層防御を実現します。どのレイヤーから着手すべきかは、扱うデータの機密性や開発体制によって変わってくるため、企業様によって最適な形は異なります。いきなり5層すべてを一度に整えようとすると設定変更の負荷が大きくなるため、まずは影響範囲の狭いレイヤーから試し、運用が安定してから次のレイヤーに広げていく進め方をおすすめしています。次章以降で、レイヤーごとの具体的な設定方法を見ていきます。
macOS上でClaude Codeを使う場合、最初に押さえておきたいのがSeatbeltサンドボックスです。特別な設定をしなくても自動で有効になるため、多くのチームにとって最初の防御ラインになります。
macOSでClaude Codeを実行すると、Bashコマンドの実行時にSeatbeltサンドボックスが自動的に適用されます。Seatbeltは、macOSに組み込まれたサンドボックス機構で、プロセスごとにファイルシステムやネットワークへのアクセスを制限できます。
Claude Codeは、Bash実行時に以下のような制限をSeatbeltプロファイルで適用します。
/etc、/usr、/System等のシステムディレクトリへのアクセスを制限します。Seatbeltサンドボックスは、macOS環境でClaude Codeを通常起動した場合に自動的に有効になります。特別な設定は必要ありません。
ただし、以下のケースではサンドボックスが適用されない場合があります。この点は正直にお伝えしておきたいところです。
--dangerously-skip-permissionsフラグを使用した場合つまりSeatbeltはデフォルトで安全側に倒れる仕組みですが、フラグ一つで無効化できてしまう以上、個人の判断に委ねきらず、後述するmanaged-settingsと組み合わせておくことをおすすめします。個人のPC設定に依存させず、組織側のポリシーとして強制する仕組みに乗せておくことが、担当者が変わっても安全性を保つポイントになります。
Linux環境では、macOSのSeatbeltの代わりにLinuxカーネルの名前空間(namespace)機能を使ったサンドボックスが適用されます。ファイルシステムのマウント名前空間やネットワーク名前空間を分離することで、Seatbeltと類似のアクセス制限を実現する仕組みです。
macOSのSeatbeltと同様に、Linuxの名前空間分離も特別な設定なしに自動的に有効になります。つまりOSレベルのサンドボックスは、macOSでもLinuxでも「まず自動で一定の保護がかかっている」状態を作ってくれるということです。ただし、この保護はあくまでOSプロセスレベルの制限であり、チーム全員が同じ制約のもとで作業することを技術的に保証するものではありません。個々の開発者のマシン環境や設定変更によって保護の強さにばらつきが出る可能性がある点は、押さえておく必要があります。
| OS | サンドボックス方式 | 設定の必要性 |
|---|---|---|
| macOS | Seatbelt(sandbox-exec) | 自動適用 |
| Linux | カーネル名前空間 | 自動適用 |
| Docker | コンテナ隔離 | 手動設定 |
OSレベルのサンドボックスはあくまで基本的な保護です。機密データを扱うプロジェクトやチーム全体で同じ制約を保証したい場合は、次章のDockerコンテナによる隔離を検討する段階に進みます。
OSレベルのサンドボックスは基本的な保護を提供しますが、より厳密な隔離が必要な場合にはDockerコンテナが有効です。特に以下のシナリオで推奨されます。
ただし、Dockerによる隔離はSeatbeltと違って手動での構成が必要です。いきなり全プロジェクトに適用するのではなく、まずは機密性の高い1〜2プロジェクトから設定を試し、運用が回ることを確認してから他のプロジェクトに広げていくスモールスタートが現実的だと考えています。
Claude CodeをDockerコンテナ内で実行するためのDockerfileの例です。
FROM node:20-slim
# 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自体は動かし続けたい」という一見矛盾する要件を満たす部分であり、ここが設定全体の中でもっとも構成が複雑になりやすいところです。プロキシやiptablesの設計は、コンテナ側の設定だけでなく社内のネットワーク構成全体の理解が必要になるため、社内にネットワーク設計の知見があるかどうかで、自社で構築するか外部の支援を受けるかを判断する必要があります。逆に言えば、ここさえ乗り越えればDockerによるほぼ完全な外部通信遮断が実現できるため、機密データを扱うプロジェクトほど投資する価値のある工程だと考えています。
Claude Codeの設定ファイル(.claude/settings.json)で、使用可能なツールを明示的に制御できます。サンドボックスがOS・コンテナレベルの制限であるのに対し、allowedTools/disallowedToolsはClaude Codeのアプリケーションレベルの制限です。OSサンドボックスやコンテナ隔離と重ねて設定することで、「そもそもアクセスできない領域」と「アクセスできても実行を許可しない操作」の両面から制御できるようになります。
{
"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 --versionの実行結果に続けて、git status・git diff・git log・claude -pといったコマンドを並べたターミナルの様子です。allowedToolsで許可したコマンドパターンが、実際の操作でどのように使われるかのイメージをつかんでいただけます。

なお、こうしたコマンド単位の許可リストは、Claude Codeがどこまでを自律的に実行してよいかという線引きでもあります。ファイル読み書きやテスト実行のような可逆的な操作はAIに任せやすい一方、削除や外部送信を伴う操作は人間の確認を挟んだほうが安全だと考えています。権限プロンプトはまさにこの「人間が最終確認する」ステップを担っており、自律モードで送信や削除まで一気に任せる設定は避けたほうがよいと考えています。
チーム・企業でClaude Codeを導入する場合、個々の開発者が設定を変更できてしまうとセキュリティポリシーが形骸化します。managed-settingsを使うと、管理者が設定を一元管理し、個人の設定ファイルで上書きできないようにポリシーを強制適用できます。これも個人の注意力に頼らず仕組みで担保するという考え方の延長線上にある設定です。誰が担当になってもベースラインの安全性が保たれる状態を作ることが、チームでClaude Codeを長く運用するうえでのポイントになってきます。
なお、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フラグでは上書きできません。これにより、組織のセキュリティポリシーを技術的に強制できます。
ここまでのレイヤーをどう組み合わせるかは、チームの規模や扱うデータの機密性によって変わってきます。ここでは3つのケースでBefore/Afterを整理します。いずれもいきなり全レイヤーを導入するのではなく、必要な範囲から段階的に広げていく前提で読んでいただければと思います。
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 *)"
]
}
}
少人数チームでは、過度に厳格な設定は生産性を損なう可能性があるため、明らかに危険な操作だけをブロックするアプローチが適切です。まずはallowedToolsの調整だけから始め、扱うデータの機密性が上がってきた段階でDockerやmanaged-settingsを追加していく流れが現実的だと考えています。
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 |
このパターンでは、大型の顧客データや個人情報を扱う操作ほど人間の確認プロセスを厚くし、AIには読み取り・分析・下書き作成といった可逆的な作業を任せる、という役割分担で運用することをおすすめします。承認自体が難しかった状態から一歩ずつ信頼を積み上げるという意味でも、最初から全社展開を目指すのではなく、リスクの低い一部の業務から適用範囲を広げていくスモールスタートの進め方が向いています。
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通信のみを許可するネットワーク設定を個別に構成します。ローカル開発でのサンドボックス設定と、CI/CDでの実行設定は別物として管理し、開発からレビュー・デプロイまでの一連の流れの中でそれぞれ適切な制限を割り当てる発想が重要です。詳しくは「Claude Code × CI/CD自動化」で解説しています。
サンドボックスは単体で完結する機能ではなく、Hooksやプロジェクト設定ファイルと組み合わせることで、より実践的な安全網になります。個々の機能を単独で見るのではなく、開発からレビューまでの流れの中でどう組み合わせるかを意識しておくと、設定の抜け漏れに気づきやすくなります。
Hooksのマッチャーで特定のコマンドパターンを検出し、サンドボックス外のリソースにアクセスしようとした場合にブロックする設定が可能です。allowedTools/disallowedToolsが「許可リストに載っているかどうか」で静的に判断するのに対し、Hooksはコマンドの内容そのものをスクリプトで検査できるため、危険なパターンをより柔軟に検出できます。これはallowedToolsの延長線上にある追加のチェックポイントであり、担当者ごとの判断に頼らず仕組みで検査するという考え方の一例です。詳しくは「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.mdの記述はあくまでAIへの指示であり、OSサンドボックスやallowedToolsのような技術的な強制力は持ちません。CLAUDE.mdだけに頼るのではなく、技術的な制限とセットで運用することが前提になります。詳しくは「Claude Codeの.claude/ディレクトリ」で解説しています。
# セキュリティルール
- /workspace/ 以外のディレクトリにファイルを作成・編集しないでください
- curl, wget等の外部通信コマンドは使用しないでください
- .env ファイルの内容を表示・読み取りしないでください
サンドボックス設定自体の妥当性を検証することも重要です。Claude Codeに「この設定ファイルの制限に抜け漏れがないか確認して」と指示することで、設定ファイルをレビュー対象に含め、制限の抜け漏れがないかをAIにチェックさせられます。技術的な制限を人間が設計し、その設計の妥当性チェックをAIに手伝わせる、という役割分担がここでも成り立ちます。とはいえ、最終的にどの制限を採用するかの判断は人間側に残しておくべきであり、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で微調整を行うパターンが推奨されます。
扱っているデータの機密性が低いプロジェクトであれば、まずはallowedTools/disallowedToolsの設定から始めるのが取り組みやすい入り口です。macOSであればSeatbeltは自動適用されているため、追加の作業なしに一定の保護が働いています。機密データを扱うプロジェクトや、複数人での運用ルールを技術的に強制したい場合は、Dockerコンテナとmanaged-settingsの導入を検討する段階だと考えています。企業様によって扱うデータの機密性や開発体制は異なるため、最適な組み合わせも変わってくる点は押さえておいてください。
Claude Codeのサンドボックス設定は、macOS Seatbelt(自動適用)、Dockerコンテナ(手動構成)、allowedTools(アプリケーション制限)、managed-settings(組織ポリシー強制)という4つのレイヤーを、権限プロンプトという人間の確認ステップとあわせて組み合わせることで成り立っています。
まずは自社で扱っているプロジェクトの中から、機密性が最も高いものを1つ選び、allowedTools/disallowedToolsの見直しから始めることをおすすめします。次の3ステップで進めると取り組みやすくなります。
.claude/settings.jsonを確認し、不要に広い権限が残っていないか洗い出します。Claude Codeの全コマンド一覧はClaude Codeチートシートをご覧ください。AI活用の全体像はAI活用完全ガイドで解説しています。
CRMを活用した業務効率化やAIとの連携に関するご相談は、CRM特化型コンサルティングのHubSpotゴールドパートナーのStartLinkまでお気軽にお問い合わせください。
株式会社StartLinkは、事業推進に関わる「販売促進」「DXによる業務効率化(ERP/CRM/SFA/MAの導入)」などのご相談を受け付けております。 サービスのプランについてのご相談/お見積もり依頼や、ノウハウのお問い合わせについては、無料のお問い合わせページより、お気軽にご連絡くださいませ。
株式会社StartLink 代表取締役。累計150社以上のHubSpotプロジェクト支援実績を持ち、Claude CodeやHubSpotを軸にしたAI活用支援・経営基盤AXのコンサルティング事業を展開。
HubSpotのトップパートナー企業や大手人材グループにて、エンタープライズCRM戦略策定・AI戦略ディレクションを経験した後、StartLinkを創業。現在はCRM×AIエージェントによる経営管理支援を専門とする。