Integrar a validação de IaC com o 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 do 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 que são aplicados aos seus recursos do Google Cloud.

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

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 colunn 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.
    7. Clique em Salvar.

    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