secret-scan
プロジェクト内のシークレットファイルをスキャンし、.gitignore の保護状況を監査する。
Instructions
Step 1: シークレットファイル候補の検出
以下のパターンに該当するファイルをプロジェクト内から検索する。
ファイル名パターン:
.env, .env.*, .env.local, .env.production, .env.staging
credentials.json, credentials.yml, credentials.yaml
secrets.json, secrets.yml, secrets.yaml, secrets.toml
service-account*.json, serviceAccountKey*.json
.netrc, .npmrc
.docker/config.json
token.json, tokens.json, auth.json, oauth*.json
.htpasswd, .htaccess, wp-config.php, database.yml
拡張子パターン:
*.pem, *.key, *.p12, *.pfx, *.jks, *.keystore
*.p8, *.gpg, *.asc
ディレクトリパターン:
.ssh/, .gnupg/, .aws/, .gcloud/ 配下
検索には Glob と Bash (find 相当) を使用する。
node_modules, .git, vendor, dist, build は除外する。
Step 2: .gitignore との突合せ
検出した各ファイルについて:
.gitignore を読み取る(存在しない場合は警告)
- 各シークレットファイルが .gitignore でカバーされているか判定
- 結果を以下のカテゴリに分類:
- 保護済み: .gitignore に登録されている
- 未保護: .gitignore に登録されていない(要対応)
- git追跡済み: 既に git tracking されている(危険)
git tracking 状態の確認:
git ls-files --error-unmatch <filepath> 2>/dev/null
Step 3: レポート出力
スキャン結果をユーザーに提示する。
フォーマット:
## secret-guard スキャン結果
### 検出されたシークレットファイル: N 件
#### 保護済み (gitignore 登録済み)
- .env (パターン: .env)
- credentials.json (パターン: credentials.json)
#### 未保護 (要対応)
- .env.local (gitignore に未登録)
- secrets.yaml (gitignore に未登録)
#### 警告: git 追跡済み (危険)
- config/database.yml (既にコミット済み)
### 推奨アクション
1. 未保護ファイルを .gitignore に追加
2. git 追跡済みファイルを git rm --cached で除外
Step 4: .gitignore の修正提案
未保護のファイルが見つかった場合:
- AskUserQuestion で .gitignore への追加をユーザーに確認
- 承認された場合、.gitignore にパターンを追加
- 追加時はコメント付きで、secret-guard セクションとしてまとめる:
# === secret-guard: シークレットファイル保護 ===
.env
.env.*
credentials.json
*.pem
*.key
# === /secret-guard ===
Step 5: git 追跡済みファイルへの対処
git で既に追跡されているシークレットファイルが見つかった場合:
- ユーザーに警告と対処法を提示
git rm --cached <file> の実行をユーザーに提案(AI は直接実行しない)
- コミット履歴からの削除が必要な場合は
git filter-branch や BFG Repo-Cleaner を案内
--fix モード
引数に --fix が含まれる場合:
- Step 4 のユーザー確認をスキップし、自動的に .gitignore を更新
- ただし git 追跡済みファイルの操作は常にユーザー確認必須
Examples
標準スキャン(対話モード)
ユーザー: 「このリポジトリのシークレット保護状態をチェックして」
- Step 1 で
.env*, *.pem, credentials.* 等を検出
- Step 2 で
.gitignore と突合し 保護済み / 未保護 / git 追跡済み に分類
- Step 3 のレポートを提示
- 未保護があれば Step 4 の AskUserQuestion で追加可否を確認
- git 追跡済みが見つかれば
git rm --cached の手順を警告付きで案内
--fix モードで自動修正
ユーザー: /secret-guard:scan --fix
- Step 1〜3 を通常通り実行
- Step 4 の確認をスキップし、未保護ファイルのパターンを
.gitignore の
# === secret-guard === セクションへ追記
- git 追跡済みファイルは自動処理せず、ユーザーへ
git rm --cached を提示
- 完了後に変更件数と残課題をレポート
既に漏洩しているファイルの検出
ユーザー: 「誤って commit してしまったかも」
- Step 1 で候補ファイルを列挙
git ls-files --error-unmatch で追跡済みを識別
- Step 5 に従い警告と履歴削除の選択肢(
git filter-branch / BFG)を提示
- キーのローテーション必要性をユーザーに念押し
1---2name: secret-scan3description: Use when user wants to check secret protection, audit gitignore, scan for exposed secrets, or check security status. プロジェクトのシークレット保護状況をスキャン・監査し、.gitignore の漏れを検出し保護が必要なファイルを特定してレポートする。4---56# secret-scan78プロジェクト内のシークレットファイルをスキャンし、.gitignore の保護状況を監査する。910## Instructions1112### Step 1: シークレットファイル候補の検出1314以下のパターンに該当するファイルをプロジェクト内から検索する。1516**ファイル名パターン:**17- `.env`, `.env.*`, `.env.local`, `.env.production`, `.env.staging`18- `credentials.json`, `credentials.yml`, `credentials.yaml`19- `secrets.json`, `secrets.yml`, `secrets.yaml`, `secrets.toml`20- `service-account*.json`, `serviceAccountKey*.json`21- `.netrc`, `.npmrc`22- `.docker/config.json`23- `token.json`, `tokens.json`, `auth.json`, `oauth*.json`24- `.htpasswd`, `.htaccess`, `wp-config.php`, `database.yml`2526**拡張子パターン:**27- `*.pem`, `*.key`, `*.p12`, `*.pfx`, `*.jks`, `*.keystore`28- `*.p8`, `*.gpg`, `*.asc`2930**ディレクトリパターン:**31- `.ssh/`, `.gnupg/`, `.aws/`, `.gcloud/` 配下3233検索には Glob と Bash (`find` 相当) を使用する。34`node_modules`, `.git`, `vendor`, `dist`, `build` は除外する。3536### Step 2: .gitignore との突合せ3738検出した各ファイルについて:39401. `.gitignore` を読み取る(存在しない場合は警告)412. 各シークレットファイルが .gitignore でカバーされているか判定423. 結果を以下のカテゴリに分類:43 - **保護済み**: .gitignore に登録されている44 - **未保護**: .gitignore に登録されていない(要対応)45 - **git追跡済み**: 既に git tracking されている(危険)4647git tracking 状態の確認:48```bash49git ls-files --error-unmatch <filepath> 2>/dev/null50```5152### Step 3: レポート出力5354スキャン結果をユーザーに提示する。5556フォーマット:57```58## secret-guard スキャン結果5960### 検出されたシークレットファイル: N 件6162#### 保護済み (gitignore 登録済み)63- .env (パターン: .env)64- credentials.json (パターン: credentials.json)6566#### 未保護 (要対応)67- .env.local (gitignore に未登録)68- secrets.yaml (gitignore に未登録)6970#### 警告: git 追跡済み (危険)71- config/database.yml (既にコミット済み)7273### 推奨アクション741. 未保護ファイルを .gitignore に追加752. git 追跡済みファイルを git rm --cached で除外76```7778### Step 4: .gitignore の修正提案7980未保護のファイルが見つかった場合:81821. AskUserQuestion で .gitignore への追加をユーザーに確認832. 承認された場合、.gitignore にパターンを追加843. 追加時はコメント付きで、secret-guard セクションとしてまとめる:8586```gitignore87# === secret-guard: シークレットファイル保護 ===88.env89.env.*90credentials.json91*.pem92*.key93# === /secret-guard ===94```9596### Step 5: git 追跡済みファイルへの対処9798git で既に追跡されているシークレットファイルが見つかった場合:991001. ユーザーに警告と対処法を提示1012. `git rm --cached <file>` の実行をユーザーに提案(AI は直接実行しない)1023. コミット履歴からの削除が必要な場合は `git filter-branch` や `BFG Repo-Cleaner` を案内103104## --fix モード105106引数に `--fix` が含まれる場合:107- Step 4 のユーザー確認をスキップし、自動的に .gitignore を更新108- ただし git 追跡済みファイルの操作は常にユーザー確認必須109110## Examples111112### 標準スキャン(対話モード)113114ユーザー: 「このリポジトリのシークレット保護状態をチェックして」1151161. Step 1 で `.env*`, `*.pem`, `credentials.*` 等を検出1172. Step 2 で `.gitignore` と突合し 保護済み / 未保護 / git 追跡済み に分類1183. Step 3 のレポートを提示1194. 未保護があれば Step 4 の AskUserQuestion で追加可否を確認1205. git 追跡済みが見つかれば `git rm --cached` の手順を警告付きで案内121122### --fix モードで自動修正123124ユーザー: `/secret-guard:scan --fix`1251261. Step 1〜3 を通常通り実行1272. Step 4 の確認をスキップし、未保護ファイルのパターンを `.gitignore` の128 `# === secret-guard ===` セクションへ追記1293. git 追跡済みファイルは自動処理せず、ユーザーへ `git rm --cached` を提示1304. 完了後に変更件数と残課題をレポート131132### 既に漏洩しているファイルの検出133134ユーザー: 「誤って commit してしまったかも」1351361. Step 1 で候補ファイルを列挙1372. `git ls-files --error-unmatch` で追跡済みを識別1383. Step 5 に従い警告と履歴削除の選択肢(`git filter-branch` / BFG)を提示1394. キーのローテーション必要性をユーザーに念押し