implementing-secrets-scanning-in-ci-cd について
gitleaksとtrufflehogを使い、CI/CDに自動シークレットスキャンを組み込むセキュリティスキルです。レポート、重大度別のCIゲート、コミット前チェック、検出した認証情報のトリアージを扱います。
主な機能
- 01リポジトリとディレクトリのスキャン
- 02Git履歴内のシークレット確認
- 03JSONスキャンレポートの生成
- 04重大度に応じたパイプライン制御
- 05コミット前スキャンフックの追加
- 06検出結果のトリアージと認証情報のローテーション
活用シーン
- 01重大なシークレット検出時のデプロイ停止
- 02コミット前の認証情報検出
- 03スキャン結果の確認と優先順位付け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill implementing-secrets-scanning-in-ci-cdインストール後、Claude Code で/implementing-secrets-scanning-in-ci-cdを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
CI/CD でのシークレットスキャンの実装
概要
このスキルでは、gitleaks と trufflehog を使用して、CI/CD パイプラインに自動シークレットスキャンを実装する方法を説明します。セキュリティチームは、ソースコードリポジトリに誤ってコミットされた API キー、トークン、パスワード、その他の認証情報を検出できます。また、高重大度の検出結果を含むデプロイをブロックする CI ゲートを設けられます。
Gitleaks は、正規表現パターンとエントロピー分析を使用して、Git リポジトリとディレクトリ内のハードコードされたシークレットをスキャンします。TruffleHog は、ファイルシステムと Git の履歴をスキャンし、オプションで稼働中のサービスに対するシークレットの検証も行います。両方を組み合わせることで、シークレット検出を包括的にカバーできます。
使用する場面
- 環境でシークレットスキャン機能を導入、設定、または実装するとき
- コンプライアンス要件に沿ったセキュリティ制御を確立するとき
- この分野のセキュリティアーキテクチャを構築、または改善するとき
- この実装を必要とするセキュリティ評価を実施するとき
前提条件
- Python 3.9 以降
- gitleaks v8.x がインストールされ、PATH から利用可能であること
- trufflehog v3.x がインストールされ、PATH から利用可能であること
- スキャンする Git リポジトリまたはディレクトリ
- CI/CD プラットフォーム(GitHub Actions、GitLab CI、Jenkins)へのアクセス
手順
-
スキャンツールをインストールする:パッケージマネージャーまたはバイナリのダウンロードで gitleaks をインストールします。
brew install trufflehogを実行するか、GitHub のリリースからダウンロードして trufflehog をインストールします。 -
gitleaks を設定する:カスタムルール、許可リスト、パスの除外を定義する
.gitleaks.toml設定ファイルをリポジトリのルートに作成します。カスタム設定ファイルを指定するには--configフラグを使用します。 -
gitleaks でディレクトリをスキャンする:
gitleaks dir --source . --report-format json --report-path gitleaks-report.jsonを実行して、作業ディレクトリをスキャンし、JSON レポートを生成します。 -
trufflehog でファイルシステムをスキャンする:
trufflehog filesystem /path/to/repo --json > trufflehog-report.jsonを実行してファイルをスキャンし、検出結果を JSON 形式でレポートファイルに出力します。 -
検出結果を解析してフィルタリングする:エージェントスクリプトを使用して両方の JSON レポートを解析し、重大度(critical、high、medium、low)で検出結果をフィルタリングして、CI パイプラインを成功させるか失敗させるかを判定します。
-
CI パイプラインに統合する:スキャン手順を GitHub Actions のワークフロー、GitLab CI の設定、または Jenkins パイプラインに追加し、デプロイ前のゲートとして実行します。パイプラインの動作を制御するには、gitleaks の
--exit-codeフラグを使用します。 -
pre-commit フックを設定する:
gitleaks protect --stagedを使用して gitleaks を pre-commit フックとして設定し、シークレットがコミットされる前に検出します。 -
検出結果を確認してトリアージする:JSON 出力を調べて誤検知を確認し、正当な項目を
.gitleaksignoreに追加します。漏えいが確認された認証情報は、直ちにローテーションします。
期待される出力
エージェントスクリプトは、次の情報を含む JSON レポートを生成します。
- 各スキャナーの検出総数
- 重大度別に分類された検出結果
- ファイルパス、行番号、ルール ID、マスキングされたシークレットなど、個々の検出結果の詳細
- 設定された重大度のしきい値に基づく CI ゲートの判定(成功/失敗)
- スキャン所要時間やツールのバージョンなどの実行メタデータ
{
"scan_summary": {
"tool": "both",
"total_findings": 3,
"critical": 1,
"high": 1,
"medium": 1,
"low": 0,
"ci_gate": "FAIL",
"fail_reason": "Found 1 critical and 1 high severity findings"
},
"findings": [...]
}