🎃
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」と表示されていることが確認できます。

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

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

参考
Discussion