🎃

GitHub ActionsでGrypeを使ったコンテナイメージスキャンを実施し、結果をGitHubにアップロードする

に公開

概要

DockerコンテナのイメージスキャンをGitHub Actionsで実施しています。
スキャン結果の確認にはGitHub Actionsのログを使用していました。
脆弱性スキャナーのGrypeはスキャン結果をSARIF形式で出力できるので、スキャン結果をGitHubにアップロードしてSecurityタブから確認できるようにします。

ファイルの修正

GitHubへの書き込み権限付与

GitHub ActionsからGitHubのセキュリティイベントに書き込むためにpermissionsに「security-events: write」を追加しました。

DockerImageScan.yml
@@ -21,6 +21,7 @@ jobs:
     timeout-minutes: 10
     permissions:
       contents: read
+      security-events: write
     steps:
       - name: Checkout
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2

Grypeの出力形式変更とGitHubへのアップデート追加

  • Grypeの出力形式変更

grypeコマンドを-oオプションを指定せずに実行すると、デフォルトでテーブル形式で出力されます。
「-o sarif=grype.sarif」を指定することで、カレントディレクトリにSARIF形式のgrype.sarifというファイルを出力します。

  • GitHubへのアップデート追加

github/codeql-action/upload-sarifを使用して、sarif_fileにgrypeコマンドで出力したgrype.sarifを指定することで、GitHubにアップロードされます。

DockerImageScan.yml
@@ -61,4 +62,10 @@ jobs:
 
       - name: Scan SBOM with Grype
         run: |
-          grype --only-fixed sbom:sbom.json
+          grype --only-fixed sbom:sbom.json -o sarif=grype.sarif
+
+      - name: Upload Grype report
+        if: always() && (hashFiles('grype.sarif') != '')
+        uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b  # v3.29.2
+        with:
+          sarif_file: grype.sarif

GitHubでの表示確認

Securityタブに移動します。
画面左側のCode scanningをクリックするとアップロードした脆弱性の一覧が表示されます。
脆弱性の一覧に「Detected by Grype」と表示されていることが確認できます。

Code scanning

脆弱性のタイトル部分をクリックすると詳細を確認できます。

CVE-2025-4517 critical vulnerability for python package

GitHub Actionsのログにテーブル形式で出力していた時は、以下のような出力でした。
これだと、どこで検出された脆弱性なのかもわかりませんでした。
GitHub上だと、どこで脆弱性が検出されたのかも見れて便利です。

GitHub Actionsのログ

参考

https://techblog.zozo.com/entry/github-advanced-security-operation

Discussion