最近話題になってる脆弱性検知ツールのtrivyを利用した.
流れてきには次のような感じである.

  1. docker imageのbuild
  2. trivyでのscan
  3. okだったらregistryにpush

trivyはそのままスキャンすると検出してもしなくても exit code として 0 を返す.
CircleCI上で検出したときに落とす時は 0 以外を返す必要がある.
なので --exit-code 1 を指定する.
好みの問題ではあるが重要度の低い脆弱性は一旦出さないようにしている.
--severity HIGH,CRITICAL のように指定すると HIGH , CRITICAL のみを検出できる.
OSに入ってるlibraryに脆弱性が存在しているがまだ対応しているバージョンがないというときがある.
そういうものを出されても対応ができないので検出しないようにしている.
--ignore-unfixed と指定することで対応バージョンが存在しないものを検出結果から除外できる.

実際に利用しているオプションはこうである.

$ trivy --exit-code 1 --quiet --severity HIGH,CRITICAL --auto-refresh --ignore-unfixed -c --auto-refresh $DOCKER_IMAGE_REPO:$CIRCLE_BRANCH