2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラクスAdvent Calendar 2024

Day 23

GitHub ActionsでTrivyの脆弱性DBダウンロード制限に対応する

Last updated at Posted at 2024-12-22

この記事はラクス Advent Calendar 2024の23日目の記事です。

この記事はaquasecurity/trivy-actionのv0.28.0を使用することを前提としています。

こんにちは、Imamottyです。
年1回、Advent Calendarの時期だけQiitaに記事を投稿するという儀式も今年で4年目になりました。
今回はTrivyの脆弱性DBダウンロード制限を回避するために、GitHub Actionsを使って脆弱性DBを自前でホストするよう変更した話をします。

問題:Trivyの脆弱性DBダウンロード制限について

事象

ラクスではビルドしたコンテナイメージの脆弱性チェックをする際にOSSの脆弱性検知ツールであるTrivyを使用しています。
その際、trivy-action というAquaSecurityが提供するTrivyスキャン用Actionを使っているのですが、
2024年の夏頃から「TOOMANYREQUESTS」というエラーが頻発するようになりました。

原因

原因は、trivy-actionが実行される度にghcr.ioにホストされている以下の2つの脆弱性DBをダウンロードするため、レートリミット制限にかかっていることにありました。

解決策

上記の問題の解決策として、以下の2つの対応を実施しました。

  1. 脆弱性DBを自組織のGitHub Organization向けのパッケージとしてコピー
  2. trivy-actionで使用する脆弱性DBとして自組織のパッケージを指定

1. 脆弱性DBのコピー

trivy-actionで使用しているtrivy-db:2, trivy-java-db:1を自組織のghcrにコピーするため、以下のGitHubActionsのWorkflowを作成しました。

ポイントは以下になります。

  • 4時間ごとにスケジュール起動
    • このWorkflow実行時もダウンロード制限にかかる可能性があるため、ある程度短いスパンで実行する
  • 脆弱性DBのpull, pushをorasコマンドで実行
  • 脆弱性DBのバージョンは最新2世代のみ残して古いものは削除する
    • 最新のバージョンのみ残っていれば良いため
name: Clone Trivy DB
on:
  workflow_dispatch:
  schedule:
    - cron: "0 2,6,10,14,18,22 * * *"

env:
  CONTAINER_REGISTRY: ghcr.io/${{ github.repository_owner }}

jobs:
  # 脆弱性DBのコピー
  push-trivy-db:
    runs-on: ubuntu-latest
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3.2.0
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3.7.1
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v3.3.0
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Pull Official Trivy DB
        run: |
          oras pull ghcr.io/aquasecurity/trivy-db:2
      - name: Push Trivy DB
        run: |
          oras push --artifact-type application/vnd.aquasec.trivy.config.v1+json \
          ${{ env.CONTAINER_REGISTRY }}/trivy-db:latest \
          db.tar.gz:application/vnd.aquasec.trivy.db.layer.v1.tar+gzip
      - name: Pull Official Trivy Java DB
        run: |
          oras pull ghcr.io/aquasecurity/trivy-java-db:1
      - name: Push Trivy Java DB
        run: |
          oras push --artifact-type application/vnd.aquasec.trivy.config.v1+json \
          ${{ env.CONTAINER_REGISTRY }}/trivy-java-db:latest \
          javadb.tar.gz:application/vnd.aquasec.trivy.javadb.layer.v1.tar+gzip
  # 古いバージョンの削除
  delete-old-db:
    runs-on: ubuntu-latest
    needs: push-trivy-db
    steps:
      - name: Delete Old Trivy DB
        uses: actions/delete-package-versions@v5
        with:
          owner: ${{ github.repository_owner }}
          package-name: trivy-db
          package-type: container
          min-versions-to-keep: 1
          delete-only-untagged-versions: true
          token: ${{ secrets.GITHUB_TOKEN }}
      - name: Delete Old Trivy Java DB
        uses: actions/delete-package-versions@v5
        with:
          owner: ${{ github.repository_owner }}
          package-name: trivy-java-db
          package-type: container
          min-versions-to-keep: 1
          delete-only-untagged-versions: true
          token: ${{ secrets.GITHUB_TOKEN }}

2. trivy-actionで使用する脆弱性DBとして自組織のパッケージを指定

trivy-actionを実行する際に以下の対応を実施します。

  • trivy-action用の設定ファイルに使用する脆弱性DBを記載
    • 下記の"conf/trivy.yaml"の例を参照
  • trivy-actionの引数に以下を与える
    • trivy-config: 設定ファイルパス
    • cache: "false"
conf/trivy.yaml
db:
  # Same as '--java-db-repository'
  java-repository:
   - ghcr.io/{{org}}/trivy-java-db:latest

  # Same as '--db-repository'
  repository:
   - ghcr.io/{{org}}/trivy-db:latest

これらの対応を実施することで脆弱性DBのダウンロード制限を回避できるようになりました。

まとめ

今回はtrivy-actionの脆弱性DBのダウンロード制限を回避した方法を紹介しました。
明日は @chorei さんの記事になります!お楽しみに!
それでは、メリークリスマス!!

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?