Header image

クラッソーネの開発者がエンジニアリングに関することもそうでないことも綴っています!

tfsec-pr-commenter-actionを導入して、terraformのセキュリティスキャンの実行時間を大幅に短縮した話

tfsec-pr-commenter-actionを導入して、terraformのセキュリティスキャンの実行時間を大幅に短縮した話

こんにちは、大胸筋の育成に励んでいる、SREチームの宮原(@TakashiMiyahara)です🙋
今日は、GitHub Actionsによるtfsecの実行時間を大幅に改善できたTipsを紹介したいと思います。

tfsecとは?

tfsecは、Terraform向けの静的解析ツールです。
実装内容がセキュリティ的にベストプラクティスに沿っているかなどを指摘してくれるため、Terraformでコードを書く方には強く導入をおすすめします。

tfsecに関しては、@reireiasさんが詳しく紹介してくれていますので、下記の記事も併せて確認いただければと思います✨
https://qiita.com/reireias/items/71671cc516424421f7f3

CIで実行するには

tfsecを実行してくれるGitHub Actionsはいくつか公開されております。

tfsec-actions

クラッソーネでは、terraform-security-scanを利用して、Pull Request作成時にtfsecを実行していました🙋

現在は、tfsec-pr-commenter-actionを利用しています。

terraform-security-scanを利用したワークフローの課題

terraform-security-scanの実行に90~150秒ほど要していることが、ワークフローの課題になっていました。

tfsec-slow

ワークフローの速度が改善できれば、Pull Requestのコードレビューまでに時間も短縮でき、より早く新しい機能などを開発チームやユーザー様に提供できます。
このために、高速化する手がかりがないかActionの実装を調べていました。

tfsec-pr-commenter-actionとの出会い

ふとterraform-security-scanREADMEを確認すると、以下のようなインフォメーションを発見し、tfsec-pr-commenter-actionの存在を知りました。

terraform-security-scan-readme-warning

tfsec-pr-commenter-actionは、tfsecを開発・メンテナンスしている Aqua Security社が開発しているActionのようです。
tfsecの開発元がリリースしているActionなら、もしかして高速に動作するかも?と淡い期待を胸に、それぞれActionを利用するワークフローを実装し、実行時間や使用感などを比較してみました🙋

ワークフローの実装例

terraform-security-scantfsec-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を実行した場合です。

tfsec_before

After

tfsec-pr-commenter-actionを利用してtfsecを実行した場合です。

tfsec_after

警告があった場合のコメント例

どちらのワークフローでも重要度やリファレンスのURLなどの情報が、Pull Requestにコメントされることがわかりました🙋

Before

terraform-security-scan-commentを利用してtfsecを実行した場合です。

terraform-security-scan-comment

After

tfsec-pr-commenter-actionを利用してtfsecを実行した場合です。

tfsec-pr-commenter-action-comment
(reviewedとしてコメントされるため、指摘された行などが分かりやすいと感じました✨)

まとめ

tfsec-pr-commenter-actionは、terraform-security-scanよりも高速にtfsecを実行できるため、「ワークフローの実行時間を改善したい」という課題を解決できることが分かりました🙌
GitHub Actionsでtfsecを実行する際には、tfsec-pr-commenter-actionを利用すると、より心地よく開発できるようになると思います!
ぜひ、活用してみてください🙋

おわりに

クラッソーネでは、プロダクトとチームの双方をより良く改善していけるエンジニアを募集中です!

https://www.crassone.co.jp/recruit/engineer/


RubyやTerraformが好きで、メンバーが楽になる仕組みを考えるのが好きなエンジニア