| name | secret-detector |
| description | 機密情報検出スキル。APIキー、パスワード、トークン等の機密情報をコードから検出。git-secrets/truffleHog/gitleaks等のツールを統合。漏洩防止と早期発見に使用。 |
Secret Detector
コードベースに含まれる機密情報を検出するスキル。APIキー、パスワード、シークレットトークン等の漏洩を防ぐ。
検出パターン
よくある漏洩パターン
| 種類 | パターン例 |
|---|
| API Key | sk-xxxx, AKIAxxxx, api_key = "xxx" |
| AWS | aws_access_key_id, aws_secret_access_key |
| DB | password = "xxx", DB_PASSWORD |
| JWT | eyJ で始まる長い文字列 |
| Private Key | -----BEGIN RSA PRIVATE KEY----- |
gitleaks
インストール
brew install gitleaks
wget https://github.com/gitleaks/gitleaks/releases/download/v8.18.0/gitleaks_8.18.0_linux_x64.tar.gz
tar -xzf gitleaks_8.18.0_linux_x64.tar.gz
使用方法
gitleaks detect --source . -v
gitleaks detect --source . --log-opts="--all"
gitleaks detect --source . --report-path findings.json --report-format=json
gitleaks detect --source . --log-opts="HEAD~10..HEAD"
設定ファイル (.gitleaks.toml)
title = "gitleaks config"
[[rules]]
id = "aws-access-key"
description = "AWS Access Key"
regex = '''AKIA[0-9A-Z]{16}'''
tags = ["aws", "key"]
[[rules]]
id = "github-token"
description = "GitHub Personal Access Token"
regex = '''ghp_[0-9a-zA-Z]{36}'''
tags = ["github", "token"]
[allowlist]
paths = [
'''tests/.*''',
'''\.env\.example''',
]
truffleHog
インストール
pip install trufflehog
使用方法
trufflehog git https://github.com/user/repo
trufflehog filesystem .
trufflehog filesystem . --json
trufflehog filesystem . --exclude-paths="tests/,docs/"
git-secrets
セットアップ
git clone https://github.com/awslabs/git-secrets
cd git-secrets
make install
cd /path/to/repo
git secrets --install
git secrets --register-aws
パターン追加
git secrets --add 'api_key\s*=\s*["\'][^"\']+["\']'
git secrets --add 'password\s*=\s*["\'][^"\']+["\']'
# 除外パターン
git secrets --add --allowed 'placeholder'
スキャン実行
git secrets --scan
git secrets --scan --staged
git secrets --scan-history
detect-secrets (Python)
インストール
pip install detect-secrets
使用方法
detect-secrets scan > .secrets.baseline
detect-secrets scan --baseline .secrets.baseline .
detect-secrets audit .secrets.baseline
正規表現パターン集
rg "AKIA[0-9A-Z]{16}" .
rg "(?i)aws(.{0,20})?['\"][0-9a-zA-Z/+=]{40}['\"]" .
rg "ghp_[0-9a-zA-Z]{36}" .
rg "github_pat_[0-9a-zA-Z_]{82}" .
rg "(?i)(api[_-]?key|apikey)['\"]?\s*[:=]\s*['\"][0-9a-zA-Z_-]{20,}['\"]" .
rg "(?i)(password|passwd|pwd)['\"]?\s*[:=]\s*['\"][^'\"]+['\"]" .
rg "-----BEGIN (?:RSA |DSA |EC |OPENSSH )?PRIVATE KEY-----" .
rg "eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*" .
除外設定
.gitleaks.toml
[allowlist]
paths = [
'''\.env\.example''',
'''tests/fixtures/.*''',
'''docs/examples/.*''',
]
regexes = [
"EXAMPLE_API_KEY",
"your-api-key-here",
]
.trufflehog.yaml
skip_paths:
- "tests/"
- "docs/"
skip_detectors:
- "PrivateKey"
検出時の対応
1. 即座の対応
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch path/to/file-with-secret' \
--prune-empty --tag-name-filter cat -- --all
2. 安全な移行
API_KEY=real-api-key-here
process.env.API_KEY
3. pre-commitフック
#!/bin/bash
git secrets --scan --staged
if [ $? -ne 0 ]; then
echo "Secrets detected! Commit blocked."
exit 1
fi
CI統合
- name: Check for secrets
run: |
gitleaks detect --source . --verbose --exit-code 1
定期スキャン
#!/bin/bash
cd /path/to/project
gitleaks detect --source . --report-path /var/log/secrets-$(date +%Y%m%d).json
if [ $? -ne 0 ]; then
curl -X POST $SLACK_WEBHOOK -d '{"text": "Secrets detected!"}'
fi