JenkinsパイプラインにTruffleHogを統合してビルド前のシークレット検出を実現する方法

TruffleHogは、Gitリポジトリ内に埋め込まれたAPIキー、パスワード、トークンなどの機密情報を検出するためのオープンソースツールです。これをJenkinsのCI/CDパイプラインに組み込むことで、コードが本番環境にデプロイされる前にセキュリティリスクを早期に発見・防止できます。

なぜJenkinsとTruffleHogを統合すべきか

開発者が誤って機密情報をソースコードにコミットしてしまうケースは珍しくありません。このような情報が公開リポジトリに含まれると、重大なセキュリティインシデントにつながる可能性があります。TruffleHogをビルドプロセスの前段に配置することで、機密情報がコードベースに残るのを防ぎ、DevSecOpsの原則に沿った安全な開発フローを構築できます。

TruffleHogのセットアップ

Jenkinsエージェント上でTruffleHogを実行可能にする必要があります。Go言語で書かれたこのツールは、以下のようにビルドしてインストールできます:

git clone https://gitcode.com/gh_mirrors/tru/truffleHog
cd truffleHog
go build -o trufflehog ./cmd/trufflehog
sudo install trufflehog /usr/local/bin/

Jenkinsfileでの統合例

以下は、TruffleHogをステージとして組み込んだDeclarative Pipelineの例です:

pipeline {
    agent any
    stages {
        stage('Clone Repository') {
            steps {
                checkout scm
            }
        }
        stage('Secrets Scan') {
            steps {
                script {
                    sh 'trufflehog git file://$(pwd) --since-commit HEAD~1 || true'
                }
            }
        }
        stage('Build Application') {
            steps {
                // 実際のビルドコマンド
                sh './build.sh'
            }
        }
    }
    post {
        always {
            // スキャン結果のアーカイブや通知処理をここに記述可能
        }
    }
}

上記の例では、ローカルクローンに対して直近のコミットのみを対象にスキャンしています(--since-commit HEAD~1)。これにより、フルヒストリースキャンによる遅延を回避しつつ、最新の変更に焦点を当てた効率的な検出が可能です。

カスタムルールの適用

TruffleHogはSemgrepルールを活用してパターンマッチングを行います。独自の検出ルールを追加するには、hack/semgrep-rules/detectors.yaml を編集し、Jenkinsジョブ内でそのファイルを参照するよう設定します:

sh 'trufflehog git file://$(pwd) --config custom-detectors.yaml'

スキャン結果のハンドリング

デフォルトでは、TruffleHogが機密情報を検出した場合に非ゼロの終了コードを返します。これによりJenkinsのステージが失敗し、後続のビルドが中止されます。必要に応じて、|| true を使ってステージの失敗を抑制し、ログを記録した上で継続することも可能です。また、Post Actions内でスキャン結果を解析し、Slack通知やメールアラートを送信するといった高度なワークフローも実装できます。

タグ: Jenkins TruffleHog CI/CD セキュリティスキャン シークレット検出

7月26日 03:04 投稿