つくねの手帳

C++およびAndroidアプリ開発メインで何か書きたい

AWS CodeBuild上でTrivyを実行して結果をhtmlで出力する

この記事は「弥生 Advent Calendar 2021」20日目の記事です。

qiita.com

はじめに

この記事ではタイトルの通り、AWS上でTrivyを使用し脆弱性スキャンを行った結果をhtmlとして出力し、GitHubPagesなどでホストするためのファイルを作成することを目的とした記事です。

動機としては、AWS Security BlogでTrivyをCI/CDに組み込む
How to build a CI/CD pipeline for container vulnerability scanning with Trivy and AWS Security Hub | AWS Security Blog
という記事がありますが、もう少し簡易的にTrivyを試したかったのと、Trivyにhtml出力の機能があるので、GitHubPagesなどでホストすればチーム内での共有もしやすいと考えたためでした。

Trivyについて

Trivyはコンテナの脆弱性チェックツールでAquaSecurityが提供しています。
詳細な使用方法などのドキュメントこちらです。
aquasecurity.github.io

AWS CodeBuildでの実行

前提

CodeBuildのオペレーティングシステムUbuntuを想定して記載します。
ソースコードGitHubと連携やCodePipelineから渡すなどしてCodeBuild上で使用できるようにします。
Dockerイメージを作成するので、環境で特権付与のチェックをONにしてください。
その他環境変数などは各自の環境に合わせて設定してください。

インストール

CodeBuild上でもTrivyをインストールして動作させることができます。
Buildspecのinstallフェーズで以下コマンドを使用してインストールします。

install:
  - apt-get install wget apt-transport-https gnupg
  - wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | apt-key add -
  - echo deb https://aquasecurity.github.io/trivy-repo/deb bionic main | tee -a /etc/apt/sources.list.d/trivy.list
  - apt-get update
  - apt-get install -y trivy
スキャン対象イメージの作成

スキャン対象のイメージを作成するため、Buildspecのbuildフェーズでdocker buildを行います。

build:
  commands:
    - docker build -t <imagename>:<tagname>
Trivyのスキャン実行

Trivyでスキャンを行い、結果をhtmlで出力します。
リファレンスには詳細な説明はなく以下のコマンドだけ書かれています。

$ trivy image --format template --template "@contrib/html.tpl" -o report.html golang:1.12-alpine

Report Formats - Trivy

html.tplというファイルはテンプレートファイルで、Trivyをインストールしていれば組み込まれています。
formatオプションに"template"を指定して、template オプションにパス指定することで、任意のテンプレートを使用して結果出力することができます。

CodeBuild上の環境で、サンプルのままだとテンプレートをうまく読み込んでくれません。
CodeBuild実行環境のどこにhtml.tplが展開されているか探して、そのパスを指定してあげる必要があります。
ちゃんとしたパス指定をしたBuildspecは以下のようになります。
スキャン対象を作成した後に実行するのでpost_buildフェーズに記載します。

post_build:
  commands:
    - trivy image --format template --template '@/user/local/share/trivy/templates/html.tpl' -o report.html <imagename>:<tagname>

結果ファイルの出力先はoオプションで指定できるので、できたファイルをs3に格納するなどして使用してください。

おわりに

テンプレートファイルの指定の仕方、CodeBuild上のテンプレートファイルの場所を探すのにやや苦戦しました。
Trivyはデフォルトのコンソール結果出力でもちゃんと成形されているので見やすいですが、htmlだと色分けなどもされていて視認性がよりよくなりますし、ファイル出力しておくことで管理もできるのでおススメです。


「弥生 Advent Calendar 2021」も残すところ1週間を切りました。
明日以降の記事もお楽しみに!
qiita.com