Claude Codeで秘密情報を安全に管理するための多層防御アプローチガイド。APIトークン、DB認証情報、SSH鍵などを保護する3層防御戦略(物理的分離 + deny設定 + PreToolUse Hook)。
View on GitHubsk8metalme/ai-agent-setup
development-toolkit
January 25, 2026
Select agents to install to:
npx add-skill https://github.com/sk8metalme/ai-agent-setup/blob/main/plugins/development-toolkit/skills/secrets-guard/SKILL.md -a claude-code --skill secrets-guardInstallation paths:
.claude/skills/secrets-guard/# 秘密情報管理(Secrets Guard)
Claude Codeで秘密情報を安全に管理するための多層防御アプローチガイド。
---
## 概要
Claude Codeは強力な開発支援ツールですが、秘密情報(APIトークン、データベース認証情報、SSH鍵など)の取り扱いには注意が必要です。本スキルでは、**3層の防御層(L1-L3)**を組み合わせた包括的なアプローチで秘密情報を保護します。
### 既知の問題点
| 問題 | 詳細 |
|------|------|
| **自動読み込み** | Claude Codeは`.env`, `.env.local`などを自動的にメモリに読み込む可能性がある |
| **deny設定のバグ** | `settings.json`の`deny`設定が完全に機能しないバグ([Issue #6631](https://github.com/anthropics/claude-code/issues/6631), [#6699](https://github.com/anthropics/claude-code/issues/6699)) |
| **間接的な漏洩** | system reminderなど間接的な方法で内容が漏洩する可能性がある |
---
## 多層防御アプローチ
### レベル1: 物理的な分離(最も確実)
**原則**: 秘密情報はClaude Codeがアクセスできない場所に置く
#### セットアップ手順
```bash
# 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コマンド**
```bash
# プロジェクトディレクトリで実行
set -a
source ~/.secrets/my-project/.env
set +a
npm run dev
```
**方法B: シェル関数(推奨)**
`~/.bashrc` または `~/.zshrc` に追加:
```bash
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'
```
使用例:
```bash
cd ~/projects/my-project
lenv # ~/.secrets/my-project/.env を読み込み
```
---
### レベル2: deny設定(追加の防御層)
`~/.claude/settings.json` のdenied配列に秘密情報パターンを追加。
#### テンプレート使用
```bash
# テンプレートを確認
cat global/templates/secrets/settings-deny-secrets.json
# 手動で ~/.claude/settings.json の "permissions.denied" に追加
```
#### 設定例
```json
{
"permissions": {
"denied": [
"Read(~/.secrets/*)",
"Read(**/.env)",
"Read(**/.env.*)",
"Read(**/credentials.js