security-secrets について
security-secretsは、コードベース内の認証情報露出を検出するセキュリティスキルです。一般的なシークレットの正規表現、重点ファイル、コマンドラインスキャン、マスキング規則を示します。
主な機能
- 01高精度なシークレット正規表現
- 02一般的な認証情報の検出
- 03重点ファイルのリスク指針
- 04コマンドラインスキャンコマンド
- 05シークレットのマスキング形式
- 06即時ローテーションの指示
活用シーン
- 01リポジトリ内の認証情報漏えい検索
- 02セキュリティレビューでのファイル優先順位付け
- 03監査報告での検出結果のマスキング
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ igorwarzocha/ opencode-workflows --skill security-secretsインストール後、Claude Code で/security-secretsを入力して読み込まれたか確認します。
同梱ファイルscripts/scan-all.shscripts/scan.sh
詳細
コードベース内のシークレット検出に有効な正規表現パターンです。
高精度な正規表現パターン
| シークレットの種類 | パターン | 備考 |
|---|---|---|
| AWS アクセスキー | AKIA[0-9A-Z]{16} | 常に20文字で、AKIAで始まります |
| AWS シークレット | (?i)aws(.{0,20})?['"][0-9a-zA-Z/+]{40}['"] | Base64風の40文字です |
| Google API キー | AIza[0-9A-Za-z\-_]{35} | 合計39文字です |
| Google OAuth | [0-9]+-[0-9A-Za-z_]{32}\.apps\.googleusercontent\.com | クライアント ID |
| Google サービスアカウント | "type":\s*"service_account" | JSON ファイル内 |
| GitHub トークン | gh[pousr]_[A-Za-z0-9_]{36,} | ghp_/gho_/ghu_/ghs_/ghr_ |
| GitHub PAT(きめ細かいアクセス制御) | github_pat_[A-Za-z0-9_]{22,} | 新しい形式 |
| GitLab トークン | glpat-[A-Za-z0-9\-]{20,} | パーソナルアクセストークン |
| Stripe シークレット | `sk_(live | test)_[0-9a-zA-Z]{24,}` |
| Stripe 制限付きキー | `rk_(live | test)_[0-9a-zA-Z]{24,}` |
| Stripe 公開可能キー | `pk_(live | test)_[0-9a-zA-Z]{24,}` |
| Slack ボットトークン | xoxb-[A-Za-z0-9-]+ | ボットトークン |
| Slack ユーザートークン | xoxp-[A-Za-z0-9-]+ | ユーザートークン |
| Slack ワークフロートークン | xwfp-[A-Za-z0-9-]+ | ワークフロートークン |
| Slack アプリトークン | xapp-[A-Za-z0-9-]+ | アプリレベルのトークン |
| Slack Webhook | https://hooks\.slack\.com/services/T[A-Z0-9]+/B[A-Z0-9]+/[a-zA-Z0-9]+ | |
| Discord トークン | [MN][A-Za-z\d]{23,}\.[\w-]{6}\.[\w-]{27} | ボットトークン |
| Discord Webhook | https://discord\.com/api/webhooks/[0-9]+/[A-Za-z0-9_-]+ | |
| OpenAI キー | sk-[A-Za-z0-9]{48} | API キー |
| Anthropic キー | sk-ant-[A-Za-z0-9\-]{32,} | API キー |
| Twilio | SK[a-z0-9]{32} | API キー SID |
| SendGrid | SG\.[a-zA-Z0-9]{22}\.[a-zA-Z0-9]{43} | API キー |
| Mailgun | key-[0-9a-zA-Z]{32} | API キー |
| Mailchimp | [a-f0-9]{32}-us[0-9]{1,2} | API キー |
| Firebase | (?i)firebase[a-z0-9\-]+\.firebaseio\.com | データベース URL |
| Supabase | eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*\.[A-Za-z0-9_-]* | JWT(コンテキストを確認) |
| Heroku | [hH]eroku.*[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12} | API キー |
| NPM トークン | npm_[A-Za-z0-9]{36} | 公開用トークン |
| PyPI トークン | pypi-[A-Za-z0-9_-]{50,} | アップロード用トークン |
| 秘密鍵 | `-----BEGIN (RSA | EC |
| データベース URL | `(?i)(postgres | mysql |
| URL 内のパスワード | [a-zA-Z]{3,15}://[^/\\:@]+:[^/\\:@]+@.{1,100} | Basic 認証 |
| JWT シークレット | `(?i)(jwt[_-]?secret | token[_-]?secret)['"]?\s*[:=]\s*['"][^'"]+['"]` |
| 汎用シークレット | `(?i)(password | passwd |
CLI スキャンコマンド
# Quick grep scan (fast, high signal)
rg -n "(AKIA[0-9A-Z]{16}|sk_(live|test)_|rk_(live|test)_|pk_(live|test)_|xox[baprs]-|xapp-|xwfp-|gh[pousr]_|github_pat_)" .
rg -n "BEGIN (RSA|EC|OPENSSH|DSA|PGP) PRIVATE KEY" .
rg -n "(?i)(api[_-]?key|secret|token|password)\s*[:=]\s*['\"][^'\"]{8,}" .
# Dedicated scanners (thorough)
gitleaks detect --source . --redact --no-git
semgrep scan --config p/secrets --error
trufflehog filesystem . --only-verified
<priority_files>
優先して確認するファイル
| ファイルパターン | リスクレベル | 理由 |
|---|---|---|
.env* | CRITICAL | 多くのシークレットが含まれていることがよくあります |
*config*.js/ts/json | HIGH | アプリの設定 |
*secret*, *credential* | HIGH | 不審な名前が付けられています |
docker-compose*.yml | HIGH | データベースのパスワードやサービスの認証情報 |
.github/workflows/*.yml | HIGH | CI/CD のシークレット |
*test*, *spec*, *fixture* | MEDIUM | 実際の認証情報を含むテストデータ |
*.pem, *.key, *.p12 | CRITICAL | 秘密鍵 |
</priority_files>
マスキング形式
シークレットを報告する場合は、必ず次のようにマスキングしてください:
Original: AKIAIOSFODNN7EXAMPLE
Redacted: AKIA****...****MPLE
Original: sk_test_XXXXYYYYZZZZ11112222
Redacted: sk_****...****2222
先頭4文字と末尾4文字のみを表示してください。直ちにローテーションするよう必ず指示してください。
コメント
Markdown 対応