以下の内容はhttps://yujiorama.hatenablog.com/entry/2020/08/26/074600より取得しました。


コンテナやサーバー、アプリケーションの依存ライブラリの脆弱性を Trivy でチェックする

情報

準備

基本的な使い方は README を読めばすべて解決する理想的なツールです。

いろいろあるけど、インストールスクリプトを使う方法が一番楽だと思います。

curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/install.sh | sh -s -- -b /usr/local/bin
command -v trivy
/usr/local/bin/trivy

Go 処理系が入っているなら go get でもいける。

go get -u github.com/aquasecurity/trivy/cmd/trivy
command -v trivy
/home/y.okazawa/.go/bin/trivy

今のところ Windows の Git Bash ではちゃんと動かないみたいなので、WSL で操作するといいでしょう。

使用例

コンテナイメージをスキャンする

コンテナイメージのファイルシステムをスキャンするだけで特別な違いはなさそうです。 実行中のコンテナをスキャンしたいときは docker save で保存した tar ファイルを指定する。

trivy image name:tag
trivy image --input image.tar

ファイルシステムをスキャンする

Docker コンテナをビルドするときはこちらの使い方をするといいみたい。

trivy fs path/to/source

共通するオプション

  • 発見したい脆弱性の種類を指定する
    • --vuln-type
    • os あるいは library をカンマ区切りで並べる
    • 初期値は os,library
  • 脆弱性の有無に関わらずスキャンしたパッケージを表示する
    • --list-all-pkgs
    • 前回の結果と比較すればパッケージの増減を検出できるな
  • 出力する深刻度(severity)を指定する
    • --severity
    • 初期値は UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL

スキャンした結果の出力形式

JSON 形式。jq とかで必要な情報を抽出する感じになりそう。

trivy image --format json name:tag

テンプレートで Go template 直書き。いい感じにログ出力するとかそういう用途にいいのかな。

trivy image --format template --template '{{ range . }} {{ .Target }} {{ end }}' name:tag

テンプレートで Go template で記述した外部ファイルを指定。これは JUnit XML 形式の場合。

Jenkins や Bamboo などの CI サーバーなら JUnit XML 形式をいい感じに処理できるのでお勧め ユニットテスト結合テストの結果と同じように扱える

curl -fsSL --remote-name https://raw.githubusercontent.com/aquasecurity/trivy/master/contrib/junit.tpl
trivy image --format template --template '@junit.tpl' name:tag

CI サービスでの使い方

  • 余計なログを出さないようにする
    • --no-progress を指定する
  • 脆弱性データベースのダウンロードは時間がかかるのでキャッシュを活用する

Docker Registry へのアクセス

trivy からそれぞれのサービスにアクセスするための認証情報は次のように制御できるそうです。

Docker Hub の場合は環境変数

export TRIVY_AUTH_URL=https://registry.hub.docker.com
export TRIVY_USERNAME={DOCKERHUB_USERNAME}
export TRIVY_PASSWORD={DOCKERHUB_PASSWORD}

Amazon ECR の場合は AWS CLI の認証情報。

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=us-west-2

## あるいは
export AWS_PROFILE=profile

GCR の場合は gcloud の認証情報。

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credential.json



以上の内容はhttps://yujiorama.hatenablog.com/entry/2020/08/26/074600より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14