secret-scanner について
コードベース内の秘密情報や認証情報の露出を検出する、開発者向けのセキュリティスキルです。各種認証情報を検査し、機密ファイルが .gitignore に含まれているかも確認します。
主な機能
- 01API キーとトークンの検出
- 02データベース認証情報と URI の識別
- 03秘密鍵と認証用シークレットの検出
- 04シークレット検出時のコミット阻止
- 05機密ファイルの除外ルール確認
活用シーン
- 01コミット前のステージ済みファイル検査
- 02.env や設定ファイルの編集後のスキャン
- 03コード内のハードコードされた認証情報の発見
- 04機密ファイルが Git の除外対象か確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ ovachiever/ droid-tings --skill secret-scannerインストール後、Claude Code で/secret-scannerを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
シークレットスキャナー スキル
コードベースでのシークレットの誤公開を防ぎます。
有効になるタイミング
- ✅ git のコミット前
- ✅ ファイルの変更・保存時
- ✅ ユーザーがシークレット、キー、認証情報に言及したとき
- ✅ .env ファイルの変更時
- ✅ 設定ファイルの変更時
検出対象
API キーとトークン
- AWS アクセスキー(AKIA...)
- Stripe API キー(sk_live_...、pk_live_...)
- GitHub トークン(ghp_...)
- Google API キー
- OAuth トークン
- JWT シークレット
データベース認証情報
- データベース接続文字列
- MySQL/PostgreSQL のパスワード
- MongoDB 接続 URI
- Redis のパスワード
秘密鍵
- SSH 秘密鍵
- RSA/DSA キー
- PGP/GPG キー
- SSL 証明書
認証シークレット
- パスワード変数
- 認証トークン
- セッションシークレット
- 暗号化キー
アラートの例
API キーの検出
// You type:
const apiKey = 'sk_live_1234567890abcdef';
// I immediately alert:
🚨 CRITICAL: Exposed Stripe API key detected!
📍 File: config.js, Line 3
🔧 Fix: Use environment variables
const apiKey = process.env.STRIPE_API_KEY;
📖 Add to .gitignore: .env
AWS 認証情報
# You type:
aws_access_key = "AKIAIOSFODNN7EXAMPLE"
# I alert:
🚨 CRITICAL: AWS access key exposed!
📍 File: aws_config.py, Line 1
🔧 Fix: Use AWS credentials file or environment variables
aws_access_key = os.getenv("AWS_ACCESS_KEY_ID")
📖 Never commit AWS credentials
データベースのパスワード
# You type in docker-compose.yml:
environment:
DB_PASSWORD: "mySecretPassword123"
# I alert:
🚨 CRITICAL: Database password in configuration file!
📍 File: docker-compose.yml, Line 5
🔧 Fix: Use .env file
DB_PASSWORD: ${DB_PASSWORD}
📖 Add .env to .gitignore
検出パターン
パターンの種類
信頼度:高
- 既知の API キー形式(Stripe、AWS など)
- 秘密鍵のヘッダー
- JWT トークン
- 認証情報を含む接続文字列
信頼度:中
- 「password」「secret」「key」という名前の変数
- 機密性の高い文脈にある Base64 エンコード文字列
- 代入された長いランダム文字列
信頼度:低(要確認)
- 汎用的なシークレットパターン
- コメント内にある可能性のある認証情報
Git との統合
コミット前の保護
# Before commit, I scan:
git add .
git commit
# I block if secrets found:
🚨 CRITICAL: Cannot commit - secrets detected!
📍 3 secrets found:
- config.js:12 - API key
- .env:5 - Database password (in gitignore - OK)
- auth.js:45 - JWT secret
❌ Commit blocked - remove secrets first
.gitignore の検証
機密ファイルが .gitignore に含まれているか確認します。
✅ .env - In .gitignore (good)
⚠️ config/secrets.json - NOT in .gitignore (add it!)
✅ .aws/credentials - In .gitignore (good)
誤検出への対応
サンプルファイル
// I understand these are examples:
// Example: const apiKey = 'your_api_key_here';
// TODO: Add your API key from environment
テストファイル
// Test fixtures are OK (but flagged for review):
const mockApiKey = 'sk_test_1234567890abcdef'; // ✅ Test key
ドキュメント
Set your API key: `export API_KEY=your_key_here`
security-auditor との関係
secret-scanner(私): 公開されたシークレットと認証情報 security-auditor: コードの脆弱性パターン
併用する場合
secret-scanner: Finds hardcoded API key
security-auditor: Finds how the key is used insecurely
Combined: Complete security picture
簡単な修正方法
環境変数に移す
// Before:
const apiKey = 'sk_live_abc123';
// After:
const apiKey = process.env.API_KEY;
// .env file (add to .gitignore):
API_KEY=sk_live_abc123
シークレット管理を使用する
// AWS Secrets Manager
const AWS = require('aws-sdk');
const secrets = new AWS.SecretsManager();
const secret = await secrets.getSecretValue({ SecretId: 'myApiKey' }).promise();
設定ファイル
# docker-compose.yml
services:
app:
environment:
- API_KEY=${API_KEY} # From .env file
# .env (gitignored)
API_KEY=sk_live_abc123
サンドボックスとの互換性
サンドボックスなしで動作: ✅ はい(推奨) サンドボックスありで動作: ✅ はい
- ファイルシステム:読み取り専用アクセス
- ネットワーク:不要
- 設定:不要
カスタマイズ
会社固有のシークレットパターンを追加します。
cp -r ~/.claude/skills/security/secret-scanner \
~/.claude/skills/security/company-secret-scanner
# Edit SKILL.md to add:
# - Internal API key formats
# - Company-specific secret patterns
# - Custom detection rules
ベストプラクティス
- シークレットを絶対にコミットしない - 環境変数を使用する
- .gitignore を使用する - .env、secrets.json などを追加する
- 公開されたシークレットをローテーションする - コミットした場合は、すぐにローテーションする
- シークレット管理を使用する - AWS Secrets Manager、HashiCorp Vault
- 定期的に監査する - コードに公開されたシークレットがないか確認する
緊急対応
シークレットをコミットした場合
- シークレットをすぐにローテーションする
- git の履歴から削除する
git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch config/secrets.json" \ --prune-empty --tag-name-filter cat -- --all - 強制プッシュする(チームと調整する)
- 新しいシークレットですべてのデプロイを更新する
関連ツール
- security-auditor スキル:脆弱性の検出
- @code-reviewer サブエージェント:セキュリティレビュー
- /review コマンド:包括的なセキュリティチェック
コメント
Markdown 対応