はじめに
Claude Codeはターミナルで動作するエージェント型AIコーディングアシスタントとして強力な機能を提供しますが、その自律性ゆえにセキュリティへの配慮が不可欠です。ファイルの作成・編集、コマンドの実行、外部サービスとの連携といった能力は、適切なセキュリティ設定なしに使用すると潜在的なリスクを招く可能性があります。
本記事では、Claude Codeを安全に活用するためのセキュリティ知識を体系的に解説します。パーミッションシステムの仕組み、プロンプトインジェクション攻撃への対策、サンドボックスモードの活用方法、機密情報の保護、そして信頼できるMCPサーバーの選定基準を理解することで、セキュリティリスクを最小化しながらAI駆動開発のメリットを最大限に享受できるようになります。
この記事を読むことで、以下のことができるようになります。
- Claude Codeのパーミッションシステムを適切に設定する
- プロンプトインジェクション攻撃のリスクを理解し対策を講じる
- サンドボックスモードでファイルシステムとネットワークを隔離する
- 機密情報をClaude Codeから保護する設定を行う
- 安全なMCPサーバーを選定・運用する
実行環境
- オペレーティングシステム: macOS 10.15以上、Ubuntu 20.04以上/Debian 10以上、Windows 10以上(WSL 1/2またはGit for Windows)
- ハードウェア: 4GB以上のRAM
- Node.js 18以上(npmインストールの場合のみ必要)
- インターネット接続(認証およびAI処理に必要)
- シェル環境: Bash、Zsh、またはFish推奨
前提条件
- コマンドライン操作の基礎知識
- Gitの基本操作(clone、commit、push等)
- プログラミングの基礎知識(言語は問わない)
- Claude.aiまたはAnthropic Consoleアカウント
- Claude Codeのインストールと認証が完了していること
Claude Codeのセキュリティ設計思想
Claude Codeは「透明性」と「ユーザーコントロール」を中核としたセキュリティ設計を採用しています。公式ドキュメントでは以下のように説明されています。
Claude Code uses strict read-only permissions by default. When additional actions are needed (editing files, running tests, executing commands), Claude Code requests explicit permission.
デフォルトでは読み取り専用の権限のみが付与され、ファイル編集やコマンド実行など追加のアクションが必要な場合は明示的な許可を求める設計となっています。
セキュリティの三原則
Claude Codeのセキュリティ設計は、以下の三つの原則に基づいています。
graph TB
A[Claude Code セキュリティ設計] --> B[パーミッションベース]
A --> C[サンドボックス隔離]
A --> D[透明性の確保]
B --> B1[読み取り専用がデフォルト]
B --> B2[アクションごとに承認要求]
B --> B3[永続的な許可設定も可能]
C --> C1[ファイルシステム隔離]
C --> C2[ネットワーク隔離]
C --> C3[OSレベルの強制]
D --> D1[実行前にコマンド内容表示]
D --> D2[変更差分の明示]
D --> D3[違反試行の通知]これらの原則を理解した上で、各セキュリティ機能を適切に設定することが重要です。
パーミッションシステムの理解
Claude Codeのパーミッションシステムは、ツールの種類に応じた階層的な権限管理を提供します。
ツール別権限レベル
Claude Codeで使用可能なツールは、以下のように権限レベルが分類されています。
| ツール種別 | 代表的な機能 | 承認要否 | 権限の永続性 |
|---|---|---|---|
| 読み取り専用 | ファイル読み取り、LS、Grep | 不要 | N/A |
| Bashコマンド | シェルコマンド実行 | 必要 | プロジェクトディレクトリとコマンド単位で永続可能 |
| ファイル編集 | Edit/Write操作 | 必要 | セッション終了まで |
パーミッションモードの選択
Claude Codeは用途に応じた複数のパーミッションモードを提供しています。
| モード | 説明 | 推奨シーン |
|---|---|---|
| default | 各ツールの初回使用時に許可を求める | 一般的な開発作業 |
| acceptEdits | ファイル編集の許可を自動承認 | 信頼できるプロジェクトでの集中作業 |
| plan | 分析のみ実行、編集・実行は不可 | コードレビュー、調査作業 |
| dontAsk | 事前許可されていないツールは自動拒否 | 厳格なセキュリティが必要な環境 |
| bypassPermissions | すべての許可確認をスキップ | 完全に隔離された環境のみ |
モードの切り替えはShift+Tabキーで行えます。また、settings.jsonでdefaultModeとして設定することも可能です。
|
|
パーミッション設定の管理
/permissionsコマンドを実行することで、現在のパーミッション設定を確認・管理できます。
|
|
このUIでは以下の設定を管理できます。
- Allow rules: 承認なしで使用を許可するツール
- Ask rules: 使用時に確認を求めるツール(Allow rulesより優先)
- Deny rules: 使用を禁止するツール(最優先)
- Additional directories: アクセスを許可する追加ディレクトリ
- Default mode: デフォルトのパーミッションモード
ツール固有のパーミッション設定
パーミッションルールはToolまたはTool(specifier)の形式で指定します。
Bashコマンドのパーミッション
Bashコマンドには接頭辞マッチング(:*)とワイルドカードマッチング(*)が使用できます。
|
|
重要な制限事項として、Claude Codeはシェル演算子(&&、|など)を認識するため、Bash(safe-cmd:*)のようなルールではsafe-cmd && other-cmdのようなコマンドは許可されません。
ファイルアクセスのパーミッション
ReadとEditのルールはgitignore仕様に従ったパターンマッチングをサポートします。
| パターン形式 | 説明 | 例 |
|---|---|---|
//path |
ファイルシステムルートからの絶対パス | Read(//Users/alice/secrets/**) |
~/path |
ホームディレクトリからのパス | Read(~/.ssh/**) |
/path |
設定ファイルからの相対パス | Edit(/src/**/*.ts) |
path |
カレントディレクトリからの相対パス | Read(*.env) |
WebFetch・MCPのパーミッション
|
|
設定の優先順位
Claude Codeの設定は複数のスコープで管理され、以下の優先順位で適用されます。
flowchart TD
A[1. Managed設定<br>managed-settings.json] --> B[2. コマンドライン引数]
B --> C[3. Local設定<br>.claude/settings.local.json]
C --> D[4. Project設定<br>.claude/settings.json]
D --> E[5. User設定<br>~/.claude/settings.json]
A -.- A1["最高優先度<br>(上書き不可)"]
E -.- E1["最低優先度<br>(他で指定がない場合に適用)"]例えば、User設定でBash(npm run:*)を許可していても、Project設定で拒否されていれば、Project設定が優先されてコマンドはブロックされます。
プロンプトインジェクション対策
プロンプトインジェクションとは、攻撃者がAIアシスタントの指示を悪意あるテキストで上書きまたは操作しようとする技法です。Claude Codeはこの攻撃に対する複数の防御層を備えています。
プロンプトインジェクションの脅威
以下のようなシナリオでプロンプトインジェクション攻撃が発生する可能性があります。
- 悪意あるコードコメント: リポジトリ内のコードコメントに隠された悪意ある指示
- 外部コンテンツの取り込み: Webフェッチやファイル読み込みで取得した内容に含まれる攻撃コード
- ユーザー入力の悪用: 信頼できないソースからの入力をそのままClaudeに渡すケース
Claude Codeの防御機構
コアプロテクション
Claude Codeは以下のコアプロテクションを実装しています。
| 防御機構 | 説明 |
|---|---|
| パーミッションシステム | 機密性の高い操作には明示的な承認が必要 |
| コンテキスト認識分析 | リクエスト全体を分析し、潜在的に有害な指示を検出 |
| 入力サニタイズ | ユーザー入力を処理してコマンドインジェクションを防止 |
| コマンドブロックリスト | curlやwgetなどWebからコンテンツを取得する危険なコマンドをデフォルトでブロック |
追加のセーフガード
- ネットワークリクエスト承認: ネットワークリクエストを行うツールはデフォルトでユーザー承認が必要
- 分離されたコンテキストウィンドウ: Webフェッチは別のコンテキストウィンドウを使用し、悪意あるプロンプトの注入を防止
- 信頼検証: 初回のコードベース実行と新規MCPサーバーは信頼検証が必要
- コマンドインジェクション検出: 不審なBashコマンドは許可リストに登録されていても手動承認が必要
- フェイルクローズドマッチング: マッチしないコマンドはデフォルトで手動承認が必要
ベストプラクティス
プロンプトインジェクション攻撃から身を守るためのベストプラクティスを紹介します。
- 提案されたコマンドを承認前にレビュー: 特に外部コンテンツを扱った後は注意深く確認
- 信頼できないコンテンツを直接パイプしない:
cat untrusted.txt | claudeのような操作は避ける - 重要なファイルへの変更を検証: 設定ファイルやシークレットファイルへの変更は特に慎重に
- 仮想マシン(VM)の活用: 外部Webサービスとやり取りする場合はVMでスクリプトを実行
- 不審な動作の報告:
/bugコマンドで報告
Windows環境での注意事項
Windows環境でClaude Codeを使用する場合、WebDAVに関する特別な注意が必要です。
When running Claude Code on Windows, we recommend against enabling WebDAV or allowing Claude Code to access paths such as
\\*that may contain WebDAV subdirectories.
WebDAVはMicrosoftによってセキュリティリスクのため非推奨とされています。WebDAVを有効にすると、Claude Codeがパーミッションシステムをバイパスしてリモートホストへのネットワークリクエストをトリガーする可能性があります。
サンドボックスモードの活用
サンドボックスモードは、Claude Codeの実行環境をファイルシステムとネットワークの両面から隔離する強力なセキュリティ機能です。
サンドボックスの必要性
従来のパーミッションベースのセキュリティでは、Bashコマンドごとにユーザーの承認が必要でした。これには以下の課題があります。
- 承認疲れ: 繰り返し「承認」をクリックすることで注意力が低下
- 生産性の低下: 頻繁な中断がワークフローを妨げる
- 自律性の制限: 承認待ちでClaude Codeの効率が低下
サンドボックスモードはこれらの課題に対処しながら、セキュリティを維持します。
サンドボックスの仕組み
ファイルシステム隔離
サンドボックスはファイルシステムアクセスを以下のように制限します。
- デフォルト書き込み: カレントディレクトリとそのサブディレクトリへの読み書きアクセス
- デフォルト読み取り: 特定の拒否されたディレクトリを除き、コンピュータ全体への読み取りアクセス
- ブロック: 明示的な許可なしにカレントディレクトリ外のファイルを変更不可
ネットワーク隔離
ネットワークアクセスはサンドボックス外で動作するプロキシサーバーを通じて制御されます。
- ドメイン制限: 承認されたドメインのみアクセス可能
- ユーザー確認: 新しいドメインへのリクエストは許可プロンプトをトリガー
- 包括的カバレッジ: 制限はコマンドによって生成されたすべてのスクリプト、プログラム、サブプロセスに適用
OSレベルの強制
サンドボックスはオペレーティングシステムのセキュリティプリミティブを活用します。
- Linux: bubblewrapを使用した隔離
- macOS: Seatbeltによるサンドボックス強制
これらのOSレベルの制限により、Claude Codeのコマンドによって生成されたすべての子プロセスが同じセキュリティ境界を継承します。
サンドボックスの有効化
サンドボックスを有効にするには、/sandboxスラッシュコマンドを実行します。
|
|
これにより、サンドボックスモードを選択するメニューが開きます。
サンドボックスモードの種類
Claude Codeは2つのサンドボックスモードを提供しています。
| モード | 説明 | 使用シーン |
|---|---|---|
| Auto-allowモード | サンドボックス内のBashコマンドを自動承認 | 信頼できるプロジェクトでの高速作業 |
| 通常パーミッションモード | サンドボックス内でも標準のパーミッションフローを使用 | 厳格なコントロールが必要な場合 |
両モードとも同じファイルシステムおよびネットワーク制限を強制しますが、サンドボックス内のコマンドが自動承認されるか明示的な許可が必要かが異なります。
サンドボックス設定のカスタマイズ
settings.jsonでサンドボックスの動作をカスタマイズできます。
|
|
| 設定項目 | 説明 | デフォルト値 |
|---|---|---|
enabled |
サンドボックスの有効化 | false |
autoAllowBashIfSandboxed |
サンドボックス内のコマンドを自動承認 | true |
excludedCommands |
サンドボックス外で実行するコマンド | [] |
allowUnsandboxedCommands |
エスケープハッチの許可 | true |
network.allowUnixSockets |
アクセス可能なUnixソケット | [] |
network.allowLocalBinding |
localhostポートへのバインド許可 | false |
サンドボックスのセキュリティ上の利点
サンドボックスは以下の攻撃からの保護を提供します。
プロンプトインジェクションからの保護
攻撃者がプロンプトインジェクションによってClaude Codeの動作を操作できたとしても、サンドボックスがシステムを保護します。
ファイルシステム保護:
~/.bashrcなどの重要な設定ファイルを変更不可/bin/などのシステムレベルファイルを変更不可- パーミッション設定で拒否されたファイルの読み取り不可
ネットワーク保護:
- 攻撃者が制御するサーバーへのデータ流出不可
- 未承認ドメインからの悪意あるスクリプトのダウンロード不可
- 未承認サービスへの予期しないAPI呼び出し不可
攻撃面の縮小
サンドボックスは以下からの潜在的な損害を制限します。
- 悪意ある依存関係: 有害なコードを含むnpmパッケージなど
- 侵害されたスクリプト: セキュリティ脆弱性のあるビルドスクリプトやツール
- ソーシャルエンジニアリング: ユーザーを騙して危険なコマンドを実行させる攻撃
サンドボックスの制限事項
サンドボックスには以下の制限事項があることを理解しておく必要があります。
- ネットワークフィルタリングの限界: ドメインベースの制限であり、トラフィックの内容は検査しない。ドメインフロンティングによるバイパスの可能性がある
- Unixソケットによる権限昇格:
allowUnixSockets設定で/var/run/docker.sockを許可するとホストシステムへのアクセスが可能になる場合がある - ファイルシステム権限昇格:
$PATH内の実行ファイルやシェル設定ファイルへの書き込み許可は権限昇格につながる可能性がある - Linuxサンドボックス強度:
enableWeakerNestedSandboxオプションは非特権Docker環境で機能するが、セキュリティが大幅に低下する
機密情報の取り扱い
Claude Codeから機密情報を保護することは、セキュリティ運用の重要な要素です。
機密ファイルの除外設定
APIキー、シークレット、環境ファイルなどの機密情報を含むファイルへのClaude Codeのアクセスを防止するには、permissions.deny設定を使用します。
|
|
これらのパターンにマッチするファイルはClaude Codeから完全に不可視となり、機密データの偶発的な露出を防止します。
推奨される機密ファイルの保護パターン
以下は一般的に保護すべきファイルのパターンです。
| 保護対象 | パターン例 | 説明 |
|---|---|---|
| 環境変数ファイル | .env, .env.* |
APIキー、データベース接続文字列など |
| AWSクレデンシャル | ~/.aws/** |
AWSアクセスキー、シークレットキー |
| SSHキー | ~/.ssh/** |
SSH秘密鍵、known_hosts |
| GPGキー | ~/.gnupg/** |
GPG秘密鍵 |
| クラウド設定 | ~/.config/gcloud/** |
Google Cloudの認証情報 |
| Kubernetesコンフィグ | ~/.kube/** |
Kubernetesクラスタ認証情報 |
| プロジェクトシークレット | ./secrets/** |
プロジェクト固有の機密ファイル |
クレデンシャル管理
Claude Codeは認証クレデンシャルを安全に管理する機能を提供しています。
- 保存場所: macOSでは暗号化されたmacOS Keychainに保存
- 対応する認証タイプ: Claude.ai、Claude API、Azure Auth、Bedrock Auth、Vertex Auth
- カスタムクレデンシャルスクリプト:
apiKeyHelper設定でAPIキーを返すシェルスクリプトを設定可能 - リフレッシュ間隔: デフォルトで5分ごとまたはHTTP 401レスポンス時に更新
|
|
チーム環境でのセキュリティ設定共有
プロジェクトレベルの設定(.claude/settings.json)をGitで管理することで、チーム全体で統一されたセキュリティ設定を共有できます。
|
|
一方、個人固有の設定は.claude/settings.local.json(自動的にgitignoreされる)に保存します。
信頼できるMCPサーバーの選定基準
MCPサーバーはClaude Codeの機能を拡張する強力な手段ですが、適切な選定と管理が必要です。
MCPサーバーのセキュリティ原則
公式ドキュメントでは以下のように述べられています。
We encourage either writing your own MCP servers or using MCP servers from providers that you trust. You are able to configure Claude Code permissions for MCP servers. Anthropic does not manage or audit any MCP servers.
つまり、AnthropicはMCPサーバーの管理や監査を行っていないため、ユーザー自身が信頼性を評価する責任があります。
MCPサーバー選定の評価基準
信頼できるMCPサーバーを選定するための評価基準を示します。
graph TB
A[MCPサーバー選定基準] --> B[ソース信頼性]
A --> C[セキュリティ実装]
A --> D[メンテナンス状況]
A --> E[コミュニティ評価]
B --> B1[公式・検証済みパブリッシャー]
B --> B2[オープンソースでコード監査可能]
B --> B3[明確な組織による運営]
C --> C1[最小権限の原則に準拠]
C --> C2[認証・認可の適切な実装]
C --> C3[データの暗号化対応]
D --> D1[定期的なアップデート]
D --> D2[脆弱性への迅速な対応]
D --> D3[ドキュメントの充実]
E --> E1[GitHubスター数・フォーク数]
E --> E2[Issue対応の品質]
E --> E3[セキュリティ監査の有無]推奨されるMCPサーバーのカテゴリ
| カテゴリ | 信頼度 | 例 |
|---|---|---|
| 公式MCPサーバー | 高 | Anthropic公式のMCPサーバー |
| 主要サービス提供元 | 高 | GitHub、Slack、Sentryなどが公式に提供するMCPサーバー |
| 検証済みOSS | 中〜高 | セキュリティ監査を受けたオープンソースMCPサーバー |
| コミュニティ作成 | 要評価 | 個人開発者によるMCPサーバー(コードレビュー必須) |
| 自社開発 | 高 | 自社で開発・管理するMCPサーバー |
MCPサーバーのパーミッション設定
MCPサーバーごとにきめ細かいパーミッション設定が可能です。
|
|
MCPサーバーの管理ポリシー(エンタープライズ向け)
組織でMCPサーバーを一元管理する場合、managed-settings.jsonで許可・拒否リストを定義できます。
|
|
allowedMcpServers: ユーザーが設定できるMCPサーバーのホワイトリスト(未定義=制限なし、空配列=完全ロックダウン)deniedMcpServers: 明示的にブロックされるMCPサーバーのブラックリスト(allowedMcpServersより優先)
新規MCPサーバー導入時のセキュリティチェックリスト
新しいMCPサーバーを導入する前に、以下の項目を確認してください。
- ソースコードの確認: オープンソースの場合、コードを確認して不審な動作がないか検証
- 権限要求の確認: 必要以上の権限を要求していないか確認
- 認証フローの確認: OAuth等の認証がセキュアに実装されているか確認
- データ取り扱いの確認: 送信されるデータと保存されるデータを把握
- 更新頻度の確認: 定期的にメンテナンスされているか確認
- セキュリティポリシーの確認: 脆弱性報告プロセスが整備されているか確認
セキュリティベストプラクティス
Claude Codeを安全に運用するためのベストプラクティスをまとめます。
機密コードを扱う場合
- すべての提案された変更を承認前にレビューする
- 機密性の高いリポジトリにはプロジェクト固有のパーミッション設定を使用する
- 追加の隔離が必要な場合はdevcontainersの使用を検討する
/permissionsコマンドで定期的にパーミッション設定を監査する
チームセキュリティ
- managed settingsを使用して組織標準を強制する
- 承認済みのパーミッション設定をバージョン管理で共有する
- チームメンバーにセキュリティベストプラクティスをトレーニングする
- OpenTelemetryメトリクスでClaude Codeの使用状況を監視する
セキュリティ問題の報告
Claude Codeでセキュリティ脆弱性を発見した場合は、以下の手順に従ってください。
- 公開で開示しない
- AnthropicのHackerOneプログラムを通じて報告する(https://hackerone.com/anthropic-vdp)
- 詳細な再現手順を含める
- 公開前に対処されるまで時間を与える
まとめ
Claude Codeのセキュリティは、ユーザーが適切に設定を行い、運用することで初めて効果を発揮します。本記事で解説した内容を振り返ります。
| セキュリティ領域 | 重要ポイント |
|---|---|
| パーミッションシステム | デフォルトは読み取り専用、階層的な権限管理、設定の優先順位を理解 |
| プロンプトインジェクション | 複数の防御層、コマンドブロックリスト、信頼検証の活用 |
| サンドボックス | ファイルシステム・ネットワーク隔離、OSレベルの強制、制限事項の理解 |
| 機密情報保護 | deny設定による除外、クレデンシャル管理、チーム設定の共有 |
| MCPサーバー | 信頼性評価、きめ細かいパーミッション、エンタープライズポリシー |
これらのセキュリティ機能を適切に活用することで、Claude Codeのパワフルな機能を安全に享受しながら、AI駆動開発を推進できます。