Integrar a validação da IaC ao Cloud Build

É possível escrever uma configuração da versão que instrua o Cloud Build a validar a infraestrutura como código (IaC, na sigla em inglês) que faz parte da versão. 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 atuais da Análise de integridade da segurança aplicados aos recursos do Google Cloud.

Para mais informações sobre a validação da IaC, consulte Validar a IaC em relação às políticas da organização do Google Cloud.

Antes de começar

Conclua estas tarefas para começar a validar a IaC usando o Cloud Build.

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

Verifique se os níveis Premium ou Enterprise do Security Command Center estão ativados 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. Verifique se você tem os seguintes papéis na organização:

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

    Verificar os papéis

    1. No console do Google Cloud, abra a página IAM.

      Acessar IAM
    2. Selecionar uma organização.
    3. Na coluna Principal, encontre a linha que contém seu endereço de e-mail.

      Caso seu endereço de e-mail não esteja nessa coluna, isso significa que você não tem papéis.

    4. Na coluna Papel da linha com seu endereço de e-mail, verifique se a lista de papéis inclui os papéis necessários.

    Conceder os papéis

    1. No console do Google Cloud, abra a página IAM.

      Acesse o IAM
    2. Selecionar uma organização.
    3. Clique em CONCEDER ACESSO.
    4. No campo Novos participantes, digite seu endereço de e-mail.
    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 Save.

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

Ativar a API Cloud Build

  1. Ative a API Cloud Build.

    Ative a API

Defina 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.

crie seu código do Terraform

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

Validar sua IAC no Cloud Build

Adicione as seguintes tarefas ao seu 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
    • REPOSITORY_NAME pelo repositório que hospeda o 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 sua organização.

  5. Se você estiver usando o Cloud Storage, faça o 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 ver 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 o upload do arquivo para o 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 a verificação de validação da 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ê quiser que a versão falhe se encontrar um problema crítico ou um problema de alta gravidade, 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 de IaC encontrar uma violação de qualquer gravidade, o build falhará.

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

A seguir