Integrar a validação de IaC ao Cloud Build

É possível escrever uma configuração de build que instrua o Cloud Build a validar a infraestrutura como código (IaC, na sigla em inglês) que faz parte do build. A validação da IaC permite determinar se as definições de recursos do Terraform violam as políticas da organização e os detectores da Análise de integridade da segurança aplicados aos recursos Google Cloud .

Para mais informações sobre a validação de IaC, consulte Validar sua IaC com base nas políticas da Google Cloud organização.

Antes de começar

Conclua estas tarefas para começar a usar a validação de IaC com o Cloud Build.

Ative o nível Enterprise ou Premium do Security Command Center

Verifique se o nível Premium ou Enterprise do Security Command Center está ativado no nível da organização.

Ativar o Security Command Center ativa as APIs securityposture.googleapis.com e securitycentermanagement.googleapis.com.

Configurar permissões

  1. Make sure that you have the following role or roles on the organization:

    • Security Posture Shift-Left Validator
    • Log Writer
    • Storage Writer
    • Storage Reader

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the organization.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Acessar o IAM
    2. Selecionar uma organização.
    3. Clique em CONCEDER ACESSO.
    4. No campo Novos principais, insira seu identificador de usuário. Normalmente, é o endereço de e-mail de uma Conta do Google.

    5. Na lista Selecionar um papel, escolha um.
    6. Para conceder outros papéis, clique em Adicionar outro papel e adicione cada papel adicional.

Para mais informações sobre as permissões de validação do IaC, consulte IAM para ativações no nível da organização.

Ativar a API Cloud Build

  1. Enable the Cloud Build API.

    Enable the API

Definir suas políticas

Defina as políticas da organização e os detectores da Análise de integridade da segurança. Para definir essas políticas usando uma postura de segurança, conclua as tarefas em Criar e implantar uma postura.

Criar seu código do Terraform

Para instruções, consulte Criar seu código do Terraform.

Validar seu IAC no Cloud Build

Adicione as seguintes tarefas ao arquivo cloudbuild.yaml:

  1. Inicialize o Terraform:

    - name: hashicorp/terraform
      args:
        - '-c'
        - |
          terraform init \
            -backend-config="bucket=STATE_BUCKET" \
            -backend-config="prefix=REPOSITORY_NAME" \
      dir: FOLDER
      id: Terraform Init
      entrypoint: sh
    

    Substitua:

    • STATE_BUCKET pelo nome do bucket do Cloud Storage para armazenar o estado do Terraform em
    • REPOSITORY_NAME com o repositório que hospeda seu código do Terraform.
    • FOLDER pelo nome da pasta em que os artefatos do Terraform serão salvos.
  2. Crie um arquivo de plano:

    - name: hashicorp/terraform
      args:
        - '-c'
        - |
          terraform plan -out tf.plan
      dir: FOLDER
      id: Terraform Plan
      entrypoint: sh
    
  3. Converta o arquivo de plano para o formato JSON:

    - name: hashicorp/terraform
      args:
        - '-c'
        - |
          terraform show -json tf.plan > plan.json
      dir: FOLDER
      id: Terraform Show
      entrypoint: sh
    
  4. Crie o relatório de validação de IaC:

    - name: gcr.io/cloud-builders/gcloud
      args:
        - '-c'
        - |
          gcloud scc iac-validation-reports create \
          organizations/ORGANIZATION_ID/locations/global --tf-plan-file=plan.json \
          --format="json(response.iacValidationReport)" > IaCScanReport_$BUILD_ID.json
      dir: FOLDER
      id: Run IaC scan
      entrypoint: /bin/bash
    

    Substitua ORGANIZATION_ID pelo ID da organização.

  5. Se você estiver usando o Cloud Storage, faça upload do arquivo de resultados JSON para o Cloud Storage:

    - name: gcr.io/cloud-builders/gsutil
      args:
        - cp
        - IaCScanReport_$BUILD_ID.json
        - SCAN_RESULT_FILE_BUCKET
      dir: FOLDER
      id: Upload report file
    

    Substitua SCAN_RESULT_FILE_BUCKET pelo bucket do Cloud Storage para fazer upload do arquivo de resultados.

  6. Para conferir os resultados no formato SARIF, faça o seguinte:

    1. Converta o arquivo:

      - name: golang
        args:
          - '-c'
          - |
            go run github.com/google/gcp-scc-iac-validation-utils/SARIFConverter@latest \
              --inputFilePath=IaCScanReport_$BUILD_ID.json
              --outputFilePath=IaCScanReport_$BUILD_ID.sarif.json
        dir: FOLDER
        id: Convert to SARIF format
        entrypoint: /bin/bash
      
    2. Opcional: faça upload do arquivo no Cloud Storage:

      - name: gcr.io/cloud-builders/gsutil
        args:
          - cp
          - IaCScanReport_$BUILD_ID.sarif.json
          - SCAN_RESULT_FILE_BUCKET
        dir: FOLDER
        id: Upload report file
      
  7. Valide os resultados. Conclua esta etapa no arquivo JSON de resultados que você não converteu para o formato SARIF:

    - name: golang
      args:
        - '-c'
        - |
          go run github.com/google/gcp-scc-iac-validation-utils/ReportValidator@latest \
            --inputFilePath=IaCScanReport_$BUILD_ID.json --failure_expression=FAILURE_CRITERIA
      dir: FOLDER
      id: Validate results
      entrypoint: /bin/bash
    

    Substitua FAILURE_CRITERIA pelos critérios de limite de falha que determinam quando o build falha. Os critérios de limite são baseados no número de problemas de gravidade crítica, alta, média e baixa que o recurso de verificação de IaC encontra. FAILURE_CRITERIA especifica quantos problemas de cada gravidade são permitidos e também como os problemas são agregados (AND ou OR). Por exemplo, se você quer que o build falhe se encontrar um problema crítico ou um problema de gravidade alta, defina FAILURE_CRITERIA como Critical:1,High:1,Operator:OR. O padrão é Critical:1,High:1,Medium:1,Low:1,Operator:OR, o que significa que, se a verificação de validação do IaC encontrar uma violação de qualquer gravidade, o build vai falhar.

  8. Se o build falhar, resolva todas as violações no código do Terraform.

A seguir