Trivyとは

コンテナイメージ用のオープンソースの脆弱性スキャナーです。
https://trivy.dev/

エラー内容

2024-10-31T01:44:22Z    ERROR   [vulndb] Failed to download artifact    repo="ghcr.io/aquasecurity/trivy-db:2" err="oci download error: failed to fetch the layer: GET https://ghcr.io/v2/aquasecurity/trivy-db/blobs/sha256:XXXXXXXXXXXX: TOOMANYREQUESTS: retry-after: 488.251µs, allowed: 44000/minute"
2024-10-31T01:44:22Z    FATAL   Fatal error     init error: DB error: failed to download vulnerability DB: OCI artif

原因

Trivyが脆弱性スキャンに必要なtrivy-dbをダウンロードするときにTOOMANYREQUESTSエラーが発生しています。
GitHub Container Registryからのダウンロードする際にGitHubのレート制限にひっかかってしまっているようです。

解決策

デフォルトだと GitHub Container Registry がDBのpull元となっているため、
--db-repository を使用してpull元となる別のコンテナレジストリをこちらで指定してあげます。

config.ymlのtrivy imageを以下のように修正します。
今回は、Amazon ECR をpull元のリポジトリとして指定しました。​

trivy image --exit-code 0 --no-progress nginx:${WORKFLOW_ID} --db-repository public.ecr.aws/aquasecurity/trivy-db

無事レート制限を回避し、trivy-dbをダウンロードすることができました。

2024-10-31T08:23:53Z    INFO    [vulndb] Downloading vulnerability DB...
2024-10-31T08:23:53Z    INFO    [vulndb] Downloading artifact...        repo="public.ecr.aws/aquasecurity/trivy-db:2"
2024-10-31T08:23:55Z    INFO    [vulndb] Artifact successfully downloaded       repo="public.ecr.aws/aquasecurity/trivy-db:2"

参考

​https://aquasecurity.github.io/trivy/v0.56/docs/references/configuration/config-file/#db-options
https://github.com/aquasecurity/trivy/discussions/7668#discussion-7287552