2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

github actionでDocker imageに対してtrivyで脆弱性スキャンを行う

Last updated at Posted at 2024-09-25

最終ゴール

github actionでtrivyにより脆弱性診断を行い、脆弱性への対応を恒常化させる。
(脆弱性診断をCIに組み込むのは最悪リリースブロッキングになる可能性もあるので、チームの状況によって適宜アレンジして取り込んでください。)

trivyとは

脆弱性の検知をしてくれるOSS

Docker imageに対しても診断可能でOS/libレベルのチェックを行ってくれる

CIへの組み込み

こちらのライブラリでgithub actionが提供いただいているのでこちらを活用する

Docker imageのbuildにはこちらを利用

↓ミニマムのサンプル

name: Scan with Trivity

on: push

jobs:
  trivy:
    runs-on: ubuntu-latest
    env:
      ACTIONS_RUNTIME_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v3
      - uses: docker/build-push-action@v6
        with:
          push: false
          load: true
          tags: test-${{ github.sha }}
          cache-from: type=gha
          cache-to: type=gha,mode=max
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: "test-${{ github.sha }}"
          exit-code: "1"
          ignore-unfixed: true
          severity: "CRITICAL,HIGH"

各ステップの説明

docker/setup-buildx-action

docker buildxを利用することでキャッシュを使えるようにする

docker/build-push-action

  • push: false
    • Docker registryへのpushは不要(ローカルスキャンのため)なのでfalseを指定
  • load: true
    • ローカルのDockerにimageをロードする(ローカルでDocker imageを参照できるようにする)
  • tags
    • 一意の名前を付与する(後述のtrivityで指定するimageと合わせる)
  • cache-from / cache-to
    • キャッシュを行うための設定

aquasecurity/trivy-action

  • image-ref
    • docker/build-push-actionのtagsと名前を合わせる
  • exit-code: 1
    • 脆弱性が発生した場合はエラーにする(Securityとして登録するだけなどの場合はなしでOK)
    • デフォルト0で脆弱性が出てもCIが通ってしまうので注意(用途に合わせる)
  • ignore-unfixed: true
    • 修正が出ていないものはスキップする
  • severity: "CRITICAL,HIGH"
    • 好みに合わせてエラーにする脆弱性レベルを指定

つまづきポイント

ライブラリで修正パッチがまだ出ていないがCIがずっと落ちてしまう

ignore-unfixed を指定することで修正パッチが出ていない問題はスキップできる(根本的な解決ではないのでCIとして継続チェックを入れるのであれば必須になりそう)

RATELIMIT問題への対応

FATAL Fatal error init error: DB error: failed to download vulnerability DB: database download error: oci download error: failed to fetch the layer: GET https://ghcr.io/v2/aquasecurity/trivy-db/blobs/sha256:11c57f2012b2ac112256f94aa404e1feb7e1b7a5787598946b87149115cdb43d: TOOMANYREQUESTS: retry-after:

脆弱性のマスターデータ取得の時にratelimitに引っかかる問題が発生する
↓こちらのissueに回避方が書いてあり

envで ACTIONS_RUNTIME_TOKEN にGITHUB TOKENを入れると回避できるらしい(今の所発生していない)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?