Github Actions で見る tfsec と Trivy の今 ~ Terraform 静的解析
Github Actionsでtfsecを実装する際に、以下を発見して良いなと思ったので試してみた
# https://aquasecurity.github.io/tfsec/v1.0.11/getting-started/configuration/github-actions/pr-commenter/
name: Run tfsec PR commenter
run-name: tfsec PR commenter
on:
pull_request:
types: [synchronize, opened]
jobs:
tfsec:
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@master
- name: Terraform security scan
uses: tfsec/tfsec-pr-commenter-action@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
しかし、最後のリリースは Nov 3, 2022 とあまり最近はメンテされてない様子だった
あれ、tfsec って Aqua に統合されてなかったけ?
そいういえば、tfsec ってAqua に買収されていなかったっけ?と思って調べてみると確かに買収されており、trivy ファミリーに加わっていた
release history 等をみるとtfsec 自体は最近もメンテはされている様子だがどこまでterraformのupdateに追従しているのかは正直わからない🧐
(どなたか知ってる方いたら教えていただきたいです...🙇♂️)
リポジトリ内のREADME.mdの冒頭に「tfsec to Trivy Migration」という移行を促すアナウンスが追加されている模様(2023年8月31日)
ということで tfsec から trivy に移行
migrate ガイドも出ている模様
Trivy for terraform
もともとものモチベーションであったterraformの静的解析をtrivyで実施してみる
今回は、tfsec-pr-commenter-actionを使っていたこともあり、Github Actionsで実行する前提とする
terraform でのtrivy 利用に関する内容で、宇宙から配信したような音質で使い方の動画があった👽
以下のような感じで、純粋な trivy でのコマンドをワークフローに組み込んでも良いが、公式が出しているActionsがあるのでそちらを推奨する
name: trivy-scan
run-name: trivy scan for terraform
on:
pull_request:
types: [synchronize, opened]
jobs:
trivy_scan:
steps: test
- name: trivy
uses: aquasec/trivy:latest
run: |
trivy config --exit-code 1 --severity HIGH,CRITICAL .
ワークフローは公式が出しているこちらを使用する
ということで実装
trivy でのスキャン結果は、sticky-pull-request-commentを使用して、PRにコメントを追加する
name: trivy-scan
run-name: trivy scan for terraform
on:
pull_request:
types: [synchronize, opened]
jobs:
trivy_scan:
name: Run Trivy Scan
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
pull-requests: write
steps:
- name: Clone repo
uses: actions/checkout@v4
- name: Trivy Scan
uses: aquasecurity/trivy-action@master
with:
scan-type: "config"
severity: "HIGH,CRITICAL"
scan-ref: "." # デフォルトのスキャン対象はカレントディレクトリ.ゆくゆくは変更のあったファイルのみを対象にする
output: trivy-scan-result.txt
- name: Format Trivy Scan Result
run: |
if [ -s trivy-scan-result.txt ]; then
# ファイルに内容がある場合
echo -e "## 脆弱性スキャン結果\n<details><summary>詳細</summary>\n\n\`\`\`\n$(cat trivy-scan-result.txt)\n\`\`\`\n</details>" > formatted-trivy-result.md
else
# ファイルが空の場合
echo -e "## 脆弱性スキャン結果\n脆弱性が検知されませんでした。" > formatted-trivy-result.md
fi
# PR にコメントを追加
- name: Comment PR with Trivy scan results
uses: marocchino/sticky-pull-request-comment@v2
with:
recreate: true
GITHUB_TOKEN: ${{ secrets.github_token }}
path: formatted-trivy-result.md
脆弱性が検知されない場合は、以下のようなコメントがPRに追加される
Misconfiguration Scanning を実現するには、以下を試してみると良さそう
Misconfiguration Scanning とは、設定ミス(セキュリティ課題やベストプラクティス乖離など)を検出できる。
Trivy の Misconfiguration Scanning は Terraform, AWS CloudFormation など複数のスキャンをサポートしている。
Google Cloud , AWS それぞれでの Misconfiguration Scanning に設定されているルールは以下から確認できる
参考
https://qiita.com/kohei_infra_eng/items/d19e8ec3d82265b6c009
https://zenn.dev/cloud_ace/articles/494d4c8ae8a0e8#iac-を用いたインフラストラクチャのセキュリティに関する課題
Discussion