2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Trivy アクションの結果をマークダウン形式にフォーマットする

Last updated at Posted at 2023-06-23

これは何

コンテナイメージの脆弱性チェックで trivy のお世話になってます。
github workflow の STEP_SUMMARY が便利なので、trivy の結果をそこに出力したい。

trivy アクションの template を指定すれば、マークダウン形式にも対応しそう → テンプレートが見つからない。

仕方ないので、自力でテンプレートを書く。

なお、trivy にはこんな感じで指定すれば良い

  format: template
  template: "@.github/workflows/github-markdown.tpl"
  output: trivy.md

Github workflow

trivy 部分を抜粋

  # trivy のためのキャッシュを準備する
  - uses: actions/cache@v3
    with:
      path: .trivy
      key: ${{ runner.os }}-trivy-${{ github.workflow }}-${{ github.run_id }}
      restore-keys: |
        ${{ runner.os }}-trivy-${{ github.workflow }}-
        ${{ runner.os }}-trivy-

  # trivy を使用してイメージの脆弱性を検査する
  - name: Run Trivy vulnerability scanner
    uses: aquasecurity/trivy-action@master
    with:
      scan-type: image
      image-ref: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:test
      vuln-type: os,library
      format: template
      template: "@.github/workflows/github-markdown.tpl"
      output: trivy.md
      ignore-unfixed: true
      severity: CRITICAL,HIGH
      cache-dir: .trivy

  # 検査結果のマークダウンをワークフローの STEP_SUMMARY に吐き出す
  - run: cat trivy.md >> $GITHUB_STEP_SUMMARY
    if: always()

  # trivy のキャッシュのオーナーを補正する
  - name: Correct Trivy cache permissions
    run: sudo chown -R $USER:$GROUP .trivy

マークダウン用 テンプレート

同じ PkgName なら記載しない、という小技を入れている

.github/workflows/github-markdown.tpl

{{$d := dict "CRITICAL" "🔴" "HIGH" "🟠" "MEDIUM" "🟡" "UNKNOWN" "🟤" }}

{{- range . -}}
## {{ .Target }}

### {{ .Type }}

{{- $prev := "" }}
{{- range $i, $v := .Vulnerabilities }}
{{- if eq 0 $i }}
| Library | Vulnerability | Fixed Version | Title |
|---------|---------------|---------------|-------|
{{- end }}
{{- with $v }}
{{- $new := ne .PkgName $prev }}
| {{ if $new }}{{ .PkgName }}<br/>{{ .InstalledVersion }}{{ end -}}
| {{ get $d .Vulnerability.Severity }} {{ .VulnerabilityID -}}
| {{ .FixedVersion -}}
| {{ escapeXML .Title -}}
|
{{- $prev = .PkgName }}
{{- end }}
{{- end }}

{{ range $i, $v := .Misconfigurations }}
{{- if eq 0 $i }}
| Type | Vulnerability | Title |
|------|---------------|-------|
{{- end }}
{{- with $v }}
| {{ .Type -}}
| {{ get $d .Severity }} {{ .ID -}}
| {{ escapeXML .Title -}}
|
{{- end }}
{{- end }}

{{- end }}

結果

STEP_SUMMARY には、こんな感じで出力される

スクリーンショット_2023-06-23_16_06_56.png

残課題

  • 設定ファイルチェックのマークダウン化は力尽きた。。
    → デフォルトの出力形式が一番良さそう。
2
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?