🐧

tfaction が Trivy をサポート

2023/09/05に公開

Trivy による test 結果

image

--

image

tfaction という、 GitHub Actions で Terraform Workflow を構築するための Action を開発しています。

https://github.com/suzuki-shunsuke/tfaction

https://zenn.dev/topics/tfaction

tfaction が Trivy をサポートしたので紹介します。

背景

tfaction は working directory と Terraform Module を test するために testtest-module という 2 つの action を提供しています。
これらの action では tfsectflint などを実行していました。

しかし、今年の 2 月になって tfsec が Trivy に統合されるというアナウンスがされ、 tfsec のユーザーは Trivy に移行することが推奨されるようになりました。

https://github.com/aquasecurity/tfsec/discussions/1994

tfsec から Trivy への公式のマイグレーションガイドはこちらです。

ただし、アナウンス後も tfsec がまだ使えること、当時は tfsec から trivy へのマイグレーションパスがあまりクリアではなかったことから tfaction では直ぐには対応しませんでした。

しかし Terraform v1.5.0 から導入された import block に tfsec が対応しておらず、しかもその Issue が Trivy に移行してください ということで tfsec のメンテナによって close されてしまいました。

https://github.com/aquasecurity/tfsec/issues/2070#issuecomment-1673920879

workaround として tfsec の --ignore-hcl-errors を使う手もありますが、これはあくまで workaround であり完全な解決策ではありません。

https://github.com/aquasecurity/tfsec/issues/2070#issuecomment-1669056215

自分が軽く検証した限り、 import block が使われているファイルで import block より後に tfsec の rule に違反するコードが合ったとしても、 --ignore-hcl-errors を使うとその違反が無視されてしまうように見えました。

tfaction による Trivy サポート

そこで tfaction でも Trivy を使えるようにしました。

ただし、今回の update では互換性を維持するため、デフォルトでは従来どおり tfsec が実行され、 Trivy は実行されません。

tfsec の代わりに Trivy を実行するには以下のことをする必要があります。

  1. aqua.yaml から tfsec を削除し、 trivy を追加する
aqua g -i aquasecurity/trivy
  1. tfaction-root.yaml で tfsec を無効化し、 trivy を有効化する
tfaction-root.yaml
tfsec:
  enabled: false # デフォルトで true
trivy:
  enabled: true # デフォルトで false

Trivy を有効にすると tfsec のときと同様に、 trivy config command が実行され、結果が github-commentreviewdog によって通知されます。

これのために Action を作りました。 tfaction ではこの Action を実行しています。中身は suzuki-shunsuke/github-action-tfsec と大体同じです。

https://github.com/suzuki-shunsuke/trivy-config-action

Linter の有効・無効化

上記では tfsec を無効化し trivy を有効化していますが、
tfsec, tflint, trivy に関して有効・無効を切り替えられるようになっています。
なので全ての linter を無効にしたり、あるいは全て有効にしたりも出来ます(まぁ tfsec と trivy を両方実行する意味はあまり無い気がしますが)。

今までは tfsec や tflint を実行したくない場合はこの action を使うのをやめて独自に test を実装してくださいというスタンスでしたが、特定の linter だけ無効化しつつ action は使うということが出来るようになりました。

ただし、管理者としては linter を強制したく、 working directory ごとに勝手に無効化されては困るという事もあるでしょう。
そのため現状では tfaction-root.yaml の root だけでのみ設定できるようにしています。
ただ、 working directory ごとに段階的に tfsec から trivy に移行したいというニーズもある気はするので、難しいですね。
両方のニーズを叶える方法はあるといえばありますが、そこまでする必要があるのか現状では良くわからないので、一旦様子を見たいと思います。

さいごに

以上、 tfactionTrivy をサポートした話を紹介しました。

なにかしら要望があれば、 Discussions までお願いします。

Discussion