使用tfcmt和tfsec进行设置,增强terraform的CI工具

首先

如果引入tfcmt,您可以在拉取请求中显示terraform plan的结果。
另外,通过引入tfsec,它可以检测您所创建的资源在安全性和最佳实践方面是否存在安全问题。
通过将这两个工具作为CI引入,让我们过上舒适的Terraform生活吧。

欲找到目标读者

    • Planの結果をActionsの中から確認するのが手間な方

 

    Terraformのコードの品質とセキュリティを向上させたい方

上一篇文章

    https://qiita.com/bkend_2/items/b651614576a239004c3f

工具的说明

很抱歉,我不明白”tfcmt”的含义,无法提供你所需的中文翻译。请提供更多上下文或详细说明。

    • terraform planやapplyの結果をプルリクにコメントするツール

 

    Actionsのページへ移動する手間を解消する

“tfsec”可以用中文解释为:”tfsec”

    • Terraformコード向けの静的解析ツール

 

    セキュリティ上の問題を検出する

Terraform的代码

认证将使用OIDC进行。
使用Terraform创建OIDC。

引入TFCMT

为了使用tfcmt,需要添加两个步骤。

    1. 安装tfcmt

 

    使用tfcmt执行terraform plan

※ TOKEN是将生成的访问令牌存储在secrets中。生成方法在此。

.github/workflows/dev_plan.yml -> .github工作流程/开发计划.yml

name: tfcmtを導入

on:
  push:
    branches:
      - feature/*
      - hotfix/*
  pull_request:
    branches:
      - feature/*
      - hotfix/*

permissions:
  id-token: write
  contents: read

jobs:
  terraform_dev_plan:
    name: terraform - dev - plan
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: 1.5.4

      - name: AWS OIDC credential
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT }}:role/${{ secrets.OIDC_ROLE }}
          aws-region: ap-northeast-1

      - name: setup tfcmt # 1. tfcmtをインストール
        env:
          TFCMT_VERSION: v3.4.1
        run: |
          wget "https://github.com/suzuki-shunsuke/tfcmt/releases/download/${TFCMT_VERSION}/tfcmt_linux_amd64.tar.gz" -O /tmp/tfcmt.tar.gz
          tar xzf /tmp/tfcmt.tar.gz -C /tmp
          mv /tmp/tfcmt /usr/local/bin
          tfcmt --version

      - name: Terraform Init
        run: terraform init -upgrade
        working-directory: ./envs/dev

      - name: Terraform fmt
        run: terraform fmt -check

      - name: Terraform Validate
        run: terraform validate -no-color

      - name: terraform refresh
        run: terraform refresh -no-color -lock=false -var="env=dev"
        working-directory: ./envs/dev

      - name: Terraform Plan
        run: |
          terraform plan \
          -no-color \
          -lock=false \
          -var="env=dev"
        working-directory: ./envs/dev

      - name: Terraform Plan cmt # 2. tfcmtを使用して、terraform planを実行
        run: tfcmt plan -patch -- terraform plan -no-color -input=false -lock=false -var="env=dev"
        working-directory: ./envs/dev
        env:
          GITHUB_TOKEN: ${{ secrets.TOKEN }}

安装tfsec

    • tfsecでチェックし、危険性が「critial」と「high」があった場合はCIが失敗させます。

 

    危険性が「medium」と「low」があってもCIが失敗しないようにしています。

.github/workflows/dev_tfsec.yml 的中文表达如下:

name: dev環境にtfsec

on:
  push:
    branches:
      - feature/*
      - hotfix/*
  pull_request:
    branches:
      - feature/*
      - hotfix/*

jobs:
  tfsec:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Setup Go # Golangをインストール
      uses: actions/setup-go@v4
      with:
        go-version: 1.20.8

    - name: Install tfsec # tfsecをインストール
      run: go install github.com/aquasecurity/tfsec/cmd/tfsec@v1.28.1

    - name: Install jq # jqをインストール
      run: sudo apt-get install jq

    - name: Show Result tfsec # ./envs/devに対してtfsecを実行
      run: tfsec ./envs/dev || true

    - name: Run tfsec # ./envs/devに対してtfsecを実行し、結果をjson形式で出力
      run: tfsec ./envs/dev --format json > tfsec_output.json || true

    - name: Check tfsec results # tfsecの結果を確認し、critical/highの結果があればCIが失敗
      run: |
        critical_count=$(jq '[.results[] | select(.severity == "CRITICAL")] | length' tfsec_output.json)
        high_count=$(jq '[.results[] | select(.severity == "HIGH")] | length' tfsec_output.json)
        if [ $critical_count -eq 0 ] && [ $high_count -eq 0 ]; then
          echo "No critical or high findings, CI passes."
          exit 0
        else
          echo "Critical or high findings detected, CI fails."
          exit 1
        fi

确认行动

スクリーンショット 2023-09-23 15.03.03.png

最后

通过引入TFCMT和TFSEC,可以更轻松地进行代码审查并进行安全检查,强烈推荐。请尝试将其中一种引入到CI中。非常感谢您阅读到最后。

这是我们最近创建的 GitHub 仓库:https://github.com/hikobend/terraform-qiita。

文献资料

    • suzuki-shunsuke/tfcmt

 

    • tfcmt で Terraform の CI/CD を改善する

 

    • tfcmt

 

    • aquasecurity/tfsec

 

    • 【tfsec】Terraformの静的セキュリティスキャンを行ってみよう!

 

    tfsecの基本的な使い方を説明します
广告
将在 10 秒后关闭
bannerAds