tfsec-pr-commenter-actionを導入して、terraformのセキュリティスキャンの実行時間を大幅に短縮した話
こんにちは、大胸筋の育成に励んでいる、SREチームの宮原(@TakashiMiyahara)です🙋
今日は、GitHub Actionsによるtfsec
の実行時間を大幅に改善できたTipsを紹介したいと思います。
tfsecとは?
tfsecは、Terraform向けの静的解析ツールです。
実装内容がセキュリティ的にベストプラクティスに沿っているかなどを指摘してくれるため、Terraformでコードを書く方には強く導入をおすすめします。
tfsecに関しては、@reireiasさんが詳しく紹介してくれていますので、下記の記事も併せて確認いただければと思います✨
CIで実行するには
tfsecを実行してくれるGitHub Actionsはいくつか公開されております。
クラッソーネでは、terraform-security-scanを利用して、Pull Request作成時にtfsecを実行していました🙋
現在は、tfsec-pr-commenter-actionを利用しています。
terraform-security-scanを利用したワークフローの課題
terraform-security-scan
の実行に90~150秒ほど要していることが、ワークフローの課題になっていました。
ワークフローの速度が改善できれば、Pull Requestのコードレビューまでに時間も短縮でき、より早く新しい機能などを開発チームやユーザー様に提供できます。
このために、高速化する手がかりがないかActionの実装を調べていました。
tfsec-pr-commenter-actionとの出会い
ふとterraform-security-scan
のREADMEを確認すると、以下のようなインフォメーションを発見し、tfsec-pr-commenter-action
の存在を知りました。
tfsec-pr-commenter-action
は、tfsecを開発・メンテナンスしている Aqua Security社が開発しているActionのようです。
tfsec
の開発元がリリースしているActionなら、もしかして高速に動作するかも?と淡い期待を胸に、それぞれActionを利用するワークフローを実装し、実行時間や使用感などを比較してみました🙋
ワークフローの実装例
terraform-security-scan
とtfsec-pr-commenter-action
、それぞれのワークフローの実装例を以下の通りです。
terraform-security-scan
を利用する場合のワークフロー
name: tfsec
on:
pull_request:
types: [synchronize, opened]
paths:
- "dev/**"
jobs:
tfsec:
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@master
- name: Terraform security scan
uses: triat/terraform-security-scan@master
with:
tfsec_actions_working_dir: dev
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
tfsec-pr-commenter-action
を利用する場合のワークフロー
name: tfsec
on:
pull_request:
types: [synchronize, opened]
paths:
- "dev/**"
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:
working_directory: dev
github_token: ${{ secrets.GITHUB_TOKEN }}
ワークフローの実行時間
tfsec-pr-commenter-action
を利用するワークフローの方が高速であることがわかりました🙋
Before
terraform-security-scan-comment
を利用してtfsecを実行した場合です。
After
tfsec-pr-commenter-action
を利用してtfsecを実行した場合です。
警告があった場合のコメント例
どちらのワークフローでも重要度やリファレンスのURLなどの情報が、Pull Requestにコメントされることがわかりました🙋
Before
terraform-security-scan-comment
を利用してtfsecを実行した場合です。
After
tfsec-pr-commenter-action
を利用してtfsecを実行した場合です。
(reviewedとしてコメントされるため、指摘された行などが分かりやすいと感じました✨)
まとめ
tfsec-pr-commenter-action
は、terraform-security-scan
よりも高速にtfsecを実行できるため、「ワークフローの実行時間を改善したい」という課題を解決できることが分かりました🙌
GitHub Actionsでtfsec
を実行する際には、tfsec-pr-commenter-action
を利用すると、より心地よく開発できるようになると思います!
ぜひ、活用してみてください🙋
おわりに
クラッソーネでは、プロダクトとチームの双方をより良く改善していけるエンジニアを募集中です!