From development-toolkit
Claude Codeで秘密情報を安全に管理するための多層防御アプローチガイド。APIトークン、DB認証情報、SSH鍵などを保護する3層防御戦略(物理的分離 + deny設定 + PreToolUse Hook)。
How this skill is triggered — by the user, by Claude, or both
Slash command
/development-toolkit:skills/secrets-guardThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Claude Codeで秘密情報を安全に管理するための多層防御アプローチガイド。
Claude Codeで秘密情報を安全に管理するための多層防御アプローチガイド。
Claude Codeは強力な開発支援ツールですが、秘密情報(APIトークン、データベース認証情報、SSH鍵など)の取り扱いには注意が必要です。本スキルでは、**3層の防御層(L1-L3)**を組み合わせた包括的なアプローチで秘密情報を保護します。
| 問題 | 詳細 |
|---|---|
| 自動読み込み | Claude Codeは.env, .env.localなどを自動的にメモリに読み込む可能性がある |
| deny設定のバグ | settings.jsonのdeny設定が完全に機能しないバグ(Issue #6631, #6699) |
| 間接的な漏洩 | system reminderなど間接的な方法で内容が漏洩する可能性がある |
原則: 秘密情報はClaude Codeがアクセスできない場所に置く
# 1. ~/.secrets/ ディレクトリを作成
mkdir -p ~/.secrets
chmod 700 ~/.secrets
# 2. プロジェクト用ディレクトリを作成
mkdir -p ~/.secrets/my-project
# 3. .envファイルを移動(シンボリックリンクは作成しない)
mv .env ~/.secrets/my-project/.env
# 4. テンプレートから作成する場合
cp global/templates/secrets/.env.example ~/.secrets/my-project/.env
vi ~/.secrets/my-project/.env
方法A: sourceコマンド
# プロジェクトディレクトリで実行
set -a
source ~/.secrets/my-project/.env
set +a
npm run dev
方法B: シェル関数(推奨)
~/.bashrc または ~/.zshrc に追加:
load_project_env() {
local project_name="${1:-$(basename $(pwd))}"
local env_file="$HOME/.secrets/${project_name}/.env"
if [[ -f "$env_file" ]]; then
set -a
source "$env_file"
set +a
echo "✅ Loaded: $env_file"
else
echo "⚠️ Not found: $env_file"
fi
}
alias lenv='load_project_env'
使用例:
cd ~/projects/my-project
lenv # ~/.secrets/my-project/.env を読み込み
~/.claude/settings.json のdenied配列に秘密情報パターンを追加。
# テンプレートを確認
cat global/templates/secrets/settings-deny-secrets.json
# 手動で ~/.claude/settings.json の "permissions.denied" に追加
{
"permissions": {
"denied": [
"Read(~/.secrets/*)",
"Read(**/.env)",
"Read(**/.env.*)",
"Read(**/credentials.json)",
"Bash(cat:*/.env*)",
"Bash(cat:*credentials*)"
]
}
}
deny設定のバグを補完するため、protect-secrets.shを設置。
protect-secrets.shを実行install-global.sh 実行時に以下が自動的に設定されます:
~/.claude/hooks/protect-secrets.sh (実行スクリプト)~/.claude/hooks/protect-secrets.conf (設定ファイル)~/.claude/settings.json にHook設定追加~/.claude/hooks/protect-secrets.conf を編集:
# 独自の秘密情報パターンを追加
SECRETS_PATTERNS=".env|\.secrets|credentials|my_custom_pattern"
# デバッグモード有効化
DEBUG=1
# ログを確認
tail -f ~/.claude/hooks/protect-secrets.log
# 手動テスト
CLAUDE_TOOL_INPUT='{"file_path":".env"}' ~/.claude/hooks/protect-secrets.sh
# 期待: exit 1, BLOCKメッセージ表示
$HOME/
├── .secrets/ # 秘密情報(Claude Codeアクセス外)
│ ├── project-a/
│ │ └── .env
│ ├── project-b/
│ │ └── .env
│ └── shared/
│ └── common.env
│
├── .claude/
│ ├── settings.json # deny設定
│ └── hooks/
│ ├── protect-secrets.sh # PreToolUse Hook
│ └── protect-secrets.conf
│
└── projects/ # 開発プロジェクト
├── project-a/
│ ├── .claude/
│ └── src/
└── project-b/
# Homebrew (macOS)
brew install gitleaks
# または
go install github.com/gitleaks/gitleaks/v8@latest
# テンプレートをコピー
cp global/templates/secrets/gitleaks.toml .
# スキャン実行
gitleaks detect --config gitleaks.toml
# pre-commitフックに統合
cat <<'EOF' > .git/hooks/pre-commit
#!/bin/bash
gitleaks protect --staged --config gitleaks.toml
EOF
chmod +x .git/hooks/pre-commit
秘密情報ファイルをGitから除外:
# 秘密情報
.env
.env.*
!.env.example
!.env.template
.secrets/
secrets/
credentials/
*.pem
*.key
*.p12
*.pfx
id_rsa*
id_ed25519*
service-account.json
.netrc
.npmrc
.pypirc
~/.secrets/ ディレクトリを作成(chmod 700).envファイルをプロジェクト外に移動install-global.shを実行(Hookとdenied設定を自動適用)load_project_envを追加.gitignoreに秘密情報パターンを追加mkdir -p ~/.secrets/<project-name>.env.exampleをコピーして~/.secrets/<project-name>/.envを作成A: PreToolUse Hook(L3)が動作しているか確認:
# Hookのログを確認
DEBUG=1
tail -f ~/.claude/hooks/protect-secrets.log
A: 実行権限と所有者を確認:
ls -la ~/.claude/hooks/protect-secrets.sh
# -rwxr-xr-x (実行権限が必要)
# 修正
chmod +x ~/.claude/hooks/protect-secrets.sh
A: 以下の対策を追加:
多層防御の原則:
~/.secrets/に配置この3層を組み合わせることで、Claude Codeで安全に開発できます。
npx claudepluginhub sk8metalme/ai-agent-setup --plugin development-toolkitExtracts hardcoded secrets from CLAUDE.md, .mcp.json, and project config into gitignored .env file, wires SessionStart hook for auto-loading. Use for 'separate secrets' or 'extract API keys'.
Secures Claude Code sessions with nopeek CLI: loads .env secrets without exposing values, stores keys, redacts cloud CLI outputs to prevent API key leaks. Useful for secret and credential safety.
Initializes Claude Code security settings by detecting project tech stack via Glob (Node.js, Python, Go, Rust, Docker, etc.) and configuring file denial patterns in .claude/settings.json.