これは何
コンテナイメージの脆弱性チェックで 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 には、こんな感じで出力される
残課題
- 設定ファイルチェックのマークダウン化は力尽きた。。
→ デフォルトの出力形式が一番良さそう。