CircleCIでtfsecを実行する

2023/04/27に公開

背景目的

CircleCIのexecutorでtfsecを実行する記事が見当たらなかったので残す
CircleCIはv2.1を使っている

tfsecはAWSなどのクラウドリソースとの通信は行わないため秘匿情報の準備は必要ありません
tfsecで動作可能です

ツール紹介

tfsec

terraformのセキュリティ静的解析ツール
https://github.com/aquasecurity/tfsec

検知された内容についてはドキュメントを参考にすると良い
Insecure ExampleとSecure Exampleも書いてある
https://aquasecurity.github.io/tfsec/v1.28.1/checks/aws/api-gateway/enable-access-logging/

CircleCI

大手のCIツール、VMベースとDockerベースのパイプラインが作成できる
https://circleci.com

書き方

config.yml

気をつける点

  • tfsec-ci imageを使う
  • userはrootにする
version: 2.1

executors:
  my-executor:
    docker:
      - image: aquasec/tfsec-ci:latest
        user: root

jobs:
  my-job:
    executor: my-executor
    steps:
      - run: tfsec

executors

executorsで利用するdocker imageを定義している

executors:
  my-executor:
    docker:
      - image: aquasec/tfsec-ci:latest
        user: root

tfsec-ci imageを利用する
tfsec-ci とは

tfsec with no entrypoint - useful for CI builds where you want to override the command (tfsecのREADME.mdより)

tfsec imageを使うとentrypointがあるからか、上手くいかなかった
なのでtfsec-ci を利用している

コンテナ内部でCIが動く際に権限が不足してjobが失敗した
そのためuserをrootにして実行できるようにする

参考

executorの設定内容は以下を参考にすると良い
https://circleci.com/docs/configuration-reference/#executors

コンビニエンスイメージとはCircleCIが用意しているイメージ
CIが効果的に動作するように作られている
https://circleci.com/ja/blog/announcing-our-next-generation-convenience-images-smaller-faster-more-deterministic/

configファイルを作成することでRuleをignoreしたり、あるレベル以上に対してtfsecしたりできる
https://aquasecurity.github.io/tfsec/v1.28.1/guides/configuration/config/

メンテされていないがorbはある、個人的には利用を推奨しない
ただorbの実装部分(tfsecのinstallやexecutorの利用方法)は参考になる箇所があった
userにrootを使う考えに至れたのもこれのおかげ(感謝)
https://circleci.com/developer/ja/orbs/orb/mycodeself/tfsec

Discussion