Claude コードのセキュリティとベストプラクティスガイド
Claude Code セキュリティ&ベストプラクティスガイド
コマンドを実行したりファイルを変更したりできるAIツールを扱う上で、セキュリティは最も重要な要素です。この包括的なガイドでは、Claude Codeのセキュリティ機能、ベストプラクティス、そして様々な環境で安全に利用する方法について説明します。
Claude Codeのセキュリティモデルを理解する
Claude Codeは多層的なセキュリティアプローチを採用しています。
- 権限システム: ツールアクセスに対するきめ細かい制御
- 環境分離: 設定可能なワークスペースの境界
- 監査証跡: 包括的なロギングと監視
- セキュアな通信: 暗号化されたAPI通信
- 構成管理: 安全な認証情報の取り扱い
権限システムの詳細
権限レベル
Claude Codeは、主に3つの権限レベルで動作します。
レベル | 説明 | リスク | ユースケース |
---|---|---|---|
インタラクティブ | 操作ごとにプロンプト表示 | 低 | 開発作業 |
許可リスト | 事前承認済みツールのみ | 中 | 自動化スクリプト |
危険 | 全ての権限をスキップ | 最重要 | コンテナのみ |
インタラクティブモード(推奨)
インタラクティブモードでは、潜在적으로危険な各操作の前にClaudeが許可を求めます。
# 安全なデフォルト - 権限を求められます
claude "このアプリケーションのデバッグを手伝ってください"
Claudeがプロンプトを表示した場合: - 権限リクエストを注意深く読む - どのツールが使用されるかを理解する - 潜在的な影響を考慮する - 必要な権限のみを許可する
許可リストモード
自動化されたワークフローのために特定のツールを事前承認します。
# 安全なツールのみを許可する
claude --allowedTools "Edit,View" "セキュリティ問題のためにコードをレビューしてください"
# 特定のコマンドスコープを許可する
claude --allowedTools "Bash(git:*)" "Gitリポジトリを分析してください"
# 組み合わせた権限
claude --allowedTools "Edit,View,mcp__git__status,mcp__git__log" "コードレビューセッション"
危険モード ⚠️
本番システムや重要なデータのあるシステムで危険モードを使用しないでください!
# 危険 - 分離されたコンテナでのみ使用してください
claude --dangerously-skip-permissions
危険モードの安全なユースケース: - ✅ 分離されたDockerコンテナ - ✅ 使い捨ての仮想マシン - ✅ サンドボックス環境 - ✅ 重要なデータがないテストシステム
決して危険モードを使用しないでください: - ❌ 本番システム - ❌ 共有開発マシン - ❌ 機密データを含むシステム - ❌ あなたの個人コンピュータ
認証情報とシークレットの管理
APIキーのセキュリティ
Anthropic APIキーは、保護すべき最も重要な認証情報です。
# ✅ 良い例: 環境変数
export ANTHROPIC_API_KEY="sk-your-key-here"
# ❌ 悪い例: コマンドにハードコード
# claude --api-key "sk-your-key-here" "query"
# ✅ 良い例: 安全なファイルパーミッション
chmod 600 ~/.bashrc # あなただけが環境ファイルを読み取れるようにする
設定ファイルのセキュリティ
Claude Codeの設定を保護してください。
# 適切なファイルパーミッションを設定する
chmod 600 ~/.claude.json
# 現在のパーミッションを確認する
ls -la ~/.claude.json
# 出力例: -rw------- (所有者のみ読み書き可能)
環境変数のベストプラクティス
# ✅ 全てのシークレットに環境変数を使用する
export GITHUB_TOKEN="your-token"
export DATABASE_URL="postgresql://user:pass@host/db"
export API_SECRET="your-secret"
# ✅ 異なるコンテキストに別の環境を使用する
# 開発環境
export ANTHROPIC_API_KEY="sk-dev-key"
# 本番環境
export ANTHROPIC_API_KEY="sk-prod-key"
# ❌ 設定ファイルにシークレットをハードコードしない
安全な設定の実施
階層的な設定
セキュリティのためにClaude Codeの階層的な設定を使用します。
# 1. グローバル設定(最も一般的でない)
cat ~/.claude.json
{
"allowedTools": ["View"],
"disallowedTools": ["Bash"]
}
# 2. プロジェクト設定(より具体的)
cat ./settings.json
{
"allowedTools": ["Edit", "View", "Bash(git:*)"],
"systemPrompt": "あなたはセキュアなアプリケーションに取り組んでいます"
}
# 3. コマンドラインフラグ(最も具体的)
claude --allowedTools "View" "脆弱性のためにコードを分析してください"
セキュアなMCP設定
MCPサーバーを設定する際は、以下のセキュリティプラクティスに従ってください。
{
"mcpServers": {
"database": {
"command": "postgres-mcp-server",
"env": {
"POSTGRES_URL": "${DATABASE_URL}", // ✅ 環境変数
"POSTGRES_SSL": "require" // ✅ SSL強制
}
},
"github": {
"command": "github-mcp-server",
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}", // ✅ 環境変数
"GITHUB_ORG": "your-secure-org" // ✅ スコープを制限
}
}
}
}
ネットワークセキュリティ
セキュアなネットワークアクセス用にClaude Codeを設定します。
# 企業プロキシ設定
export HTTP_PROXY="http://proxy.company.com:8080"
export HTTPS_PROXY="https://proxy.company.com:8443"
export NO_PROXY="localhost,127.0.0.1,*.company.com"
# カスタムAPIエンドポイント(プライベートデプロイを使用する場合)
export ANTHROPIC_BASE_URL="https://your-private-endpoint.com"
# SSL検証(企業環境の場合)
export NODE_TLS_REJECT_UNAUTHORIZED=1 # SSL検証を有効に保つ
ワークスペースセキュリティ
ディレクトリの分離
Claude Codeがアクセスできるディレクトリを制御します。
# ✅ 特定のディレクトリに制限する
claude --add-dir ./src ./tests "アプリケーションコードをレビューしてください"
# ✅ プロジェクト固有のワークスペース
cd /path/to/project
claude "このプロジェクトのみで作業してください"
# ❌ 機密性の高いディレクトリからの作業を避ける
# cd /etc && claude "システム設定を手伝ってください" # これを行わないでください
ファイルパーミッションパターン
# ✅ 良い例: 特定のツールパーミッション
claude --allowedTools "Edit(*.py),View(*.py)" "Pythonファイルに取り組んでください"
# ✅ 良い例: スコープ制限されたbashアクセス
claude --allowedTools "Bash(git:*),Bash(npm:test)" "開発ワークフロー"
# ❌ 避けるべき例: 広範なbashアクセス
# claude --allowedTools "Bash" "開発を手伝ってください"
監視と監査
ロギングのベストプラクティス
セキュリティ監視のために包括的なロギングを有効にします。
# 詳細なロギングを有効にする
claude --verbose "開発セッションを開始してください"
# 監査目的のためにファイルにログを記録する
claude --verbose "開発セッション" 2>&1 | tee claude-session.log
# API呼び出しを監視する
export ANTHROPIC_LOG_LEVEL=debug
claude "アプリケーションのセキュリティを分析してください"
セッショントラッキング
Claude Codeセッションを追跡し、管理します。
# 全てのセッションをリスト表示する
claude sessions list
# セッション履歴を確認する
claude sessions export session-id > session-audit.json
# 古いセッションをクリーンアップする
claude sessions clear --before "30 days ago"
コスト監視
異常なアクティビティを検出するためにAPI使用量を監視します。
# 現在のセッション費用を確認する
claude /cost
# トークン使用量を監視する
claude /status
# コストアラートを設定する(本番環境の場合)
export MAX_SESSION_COST=10.00 # 例: コスト制限
安全な開発ワークフロー
コードレビューワークフロー
コードレビューへの安全なアプローチ:
# ✅ 安全: レビューのみ、変更なし
claude --allowedTools "View,mcp__git__*" "セキュリティ問題のために最新のコミットをレビューしてください"
# ✅ 安全: 編集権限を制限する
claude --allowedTools "Edit(*.md),View" "ドキュメントを更新してください"
# ⚠️ 注意: 完全な編集アクセス
claude --allowedTools "Edit,View" "セキュリティ修正を実装してください"
データベース操作
安全なデータベース操作:
# ✅ 安全: 読み取り専用データベースアクセス
claude --allowedTools "mcp__postgres__query" "ユーザーデータトレンドを分析してください"
# ⚠️ 注意: 制限された書き込みアクセス
claude --allowedTools "mcp__postgres__query,mcp__postgres__insert" "テストデータを追加してください"
# ❌ 危険: 完全なデータベースアクセス
# claude --allowedTools "mcp__postgres__*" "データベースの問題を修正してください"
インフラ管理
安全なインフラ操作:
# ✅ 安全: ステータスチェックのみ
claude --allowedTools "View,Bash(kubectl:get)" "クラスターのステータスを確認してください"
# ⚠️ 注意: デプロイアクセスを制限する
claude --allowedTools "Bash(kubectl:apply),Bash(kubectl:rollout)" "アプリケーションをデプロイしてください"
# ❌ 決して: 完全なインフラアクセス
# claude --allowedTools "Bash" "本番環境の問題を修正してください"
環境固有のセキュリティ
開発環境
# 開発用の緩い権限
claude --allowedTools "Edit,View,Bash(git:*),Bash(npm:*)" \
--add-dir ./src ./test ./docs \
"開発セッション"
# コンテキストのためのプロジェクトメモリ
claude /memory set "開発環境 - 役立つが慎重にする"
ステージング環境
# ステージング用のより厳格な権限
claude --allowedTools "View,Bash(git:status),Bash(git:log)" \
"ステージングデプロイを分析してください"
# 読み取り専用データベースアクセス
claude --allowedTools "mcp__postgres__query" \
"ステージングデータの整合性を確認してください"
本番環境
# 本番用の最小限の権限
claude --allowedTools "View" \
"本番ログのエラーを分析してください"
# 本番環境でのファイル編集は禁止
claude --disallowedTools "Edit,Bash" \
"本番分析セッション"
セキュリティインシデント対応
侵害されたAPIキー
APIキーが侵害された場合:
- Anthropic Consoleですぐにキーを取り消します
- 新しいAPIキーを生成します
- 環境変数を更新します
- 不正なアクティビティがないか最近のAPI使用状況を確認します
- 不審なアクティビティがないかClaude Codeセッションを監査します
# 最近のセッションを確認する
claude sessions list
# 分析のためにセッションをエクスポートする
claude sessions export suspicious-session-id > incident-analysis.json
# 全てのセッションをクリアする
claude sessions clear --all
不正なファイルアクセス
Claude Codeが機密ファイルにアクセスした場合:
- 直ちに現在のセッションを停止します
- 何がアクセスされたか理解するためにセッションログを確認します
- 公開された認証情報を変更します
- ファイルパーミッションを監査します
- より厳格なallowedToolsポリシーを実装します
# 現在のセッションを停止する
claude /exit
# 何が起こったか確認する
tail -100 claude-session.log
# より厳格なパーミッションを実装する
claude config set allowedTools '["View"]'
MCPサーバーの侵害
MCPサーバーが侵害された場合:
- 影響を受けたMCPサーバーを無効にします
- サーバーログを確認します
- サーバーを最新バージョンに更新します
- サーバーで使用されている認証情報をローテーションします
- 最小限の権限で再有効化します
# MCPサーバーを無効にする
claude mcp remove compromised-server
# サーバーのステータスを確認する
claude mcp status
# 設定を確認する
claude config get mcpServers
セキュリティチェックリスト
デイリー使用チェックリスト
- 各タスクに特定の最小限の権限を使用する
- 重要なシステムで危険モードを避ける
- APIキーを環境変数で安全に保つ
- 権限を付与する前に、権限プロンプトを確認する
- セッションのコストと使用量を監視する
- プロジェクト固有の設定を使用する
週次セキュリティレビュー
- セッション履歴を監査する
- 古いセッションを確認し、クリーンアップする
- Claude Codeの更新を確認する
- MCPサーバーの設定をレビューする
- 設定ファイルのファイルパーミッションを確認する
- APIキーの使用パターンを監視する
月次セキュリティメンテナンス
- APIキーをローテーションする
- MCPサーバーを最新バージョンに更新する
- allowedTools設定をレビューし、更新する
- プロジェクトメモリファイルを監査する
- 未使用のMCPサーバーをクリーンアップする
- 企業セキュリティポリシーの遵守をレビューする
よくあるセキュリティの落とし穴
やってはいけないこと
# ❌ 本番環境で危険モードを絶対に使わない
claude --dangerously-skip-permissions "本番環境のバグを修正してください"
# ❌ シークレットをハードコードしない
claude --env "API_KEY=secret123" "アプリケーションをデプロイしてください"
# ❌ 広すぎる権限を絶対に与えない
claude --allowedTools "Bash" "何でも手伝ってください"
# ❌ 権限プロンプトを無視しない
# Claudeが何をしようとしているのか、常に読んで理解してください
# ❌ 不要に高い権限でClaude Codeを使用しない
sudo claude "システム設定を修正してください" # 通常は不要で危険
セキュリティのアンチパターン
- 包括的な権限: 考慮せずに全てのツールアクセスを許可すること
- 認証情報の暴露: シークレットをコマンドライン引数に含めること
- 特権昇格: 不要なsudoでClaude Codeを実行すること
- 本番実験: 本番環境でテストすること
- 警告無視: セキュリティプロンプトを読まずに無視すること
高度なセキュリティ設定
エンタープライズセキュリティ
エンタープライズ環境向け:
# 一元化された設定管理
export CLAUDE_CONFIG_URL="https://internal.company.com/claude-config"
# 監査ログ
export CLAUDE_AUDIT_LOG="/var/log/claude/audit.log"
# ネットワーク制限
export ANTHROPIC_BASE_URL="https://proxy.company.com/anthropic"
# コンプライアンスモード
export CLAUDE_COMPLIANCE_MODE="SOC2"
コンテナセキュリティ
コンテナ化されたClaude Codeの場合:
# セキュアなClaude Codeコンテナ用のDockerfile
FROM node:18-alpine
# 非ルートユーザーを作成
RUN addgroup -g 1001 claude && adduser -D -u 1001 -G claude claude
# Claude Codeをインストール
RUN npm install -g @anthropic-ai/claude-code
# 非ルートユーザーに切り替える
USER claude
# セキュアな作業ディレクトリを設定
WORKDIR /workspace
# デフォルトでセーフモードにする
CMD ["claude", "--allowedTools", "View"]
結論
Claude Codeにおけるセキュリティは、機能性と安全性のバランスを取ることです。最小限の権限から始め、必要に応じて徐々にアクセスを広げていきましょう。権限を付与する際の潜在的な影響を常に考慮し、重要なデータのあるシステムでは決して危険モードを使用しないでください。
覚えておいてください: - デフォルトでは制限的な権限にする - シークレットには環境変数を使用する - 定期的に監視と監査を行う - 設定を最新に保つ - 最小権限の原則に従う
これらのセキュリティプラクティスに従うことで、Claude Codeの力を安全に活用し、システムとデータを潜在的なリスクから保護することができます。
セキュリティリソース
常にセキュリティを意識することで、Claude Codeはあなたの開発ツールキットに強力で安全な追加となるでしょう。