Integre a validação de IaC com o Cloud Build

Pode escrever uma configuração de compilação que instrui o Cloud Build a validar a infraestrutura como código (IaC) que faz parte da sua compilação. A validação da IaC permite-lhe determinar se as suas definições de recursos do Terraform violam as políticas organizacionais existentes e os detetores do Security Health Analytics que são aplicados aos seus Google Cloud recursos.

Para mais informações sobre a validação de IaC, consulte o artigo Valide a sua IaC em função das políticas da sua 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 Premium ou o nível Enterprise do Security Command Center

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

A ativação do Security Command Center ativa as APIs securityposture.googleapis.com e securitycentermanagement.googleapis.com.

Configure as autorizaçõ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.

      Aceder ao IAM
    2. Selecione a organização.
    3. Clique em Conceder acesso.
    4. No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email de uma Conta Google.

    5. Na lista Selecionar uma função, selecione uma função.
    6. Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
    7. Clique em Guardar.

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

    Ative a API Cloud Build

    1. Enable the Cloud Build API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    Defina as suas políticas

    Defina as suas políticas organizacionais e os detetores do Security Health Analytics. Para definir estas políticas através de uma postura de segurança, conclua as tarefas em Crie e implemente uma postura.

    Crie o seu código Terraform

    Para ver instruções, consulte o artigo Crie o seu código Terraform.

    Valide a IAC no Cloud Build

    Adicione as seguintes tarefas ao ficheiro 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 o seguinte:

      • STATE_BUCKET com o nome do contentor do Cloud Storage para armazenar o estado do Terraform
      • REPOSITORY_NAME com o repositório que aloja o seu código Terraform.
      • FOLDER com o nome da pasta onde guardar os artefactos do Terraform.
    2. Crie um ficheiro de plano:

      - name: hashicorp/terraform
        args:
          - '-c'
          - |
            terraform plan -out tf.plan
        dir: FOLDER
        id: Terraform Plan
        entrypoint: sh
      
    3. Converta o ficheiro 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 estiver a usar o Cloud Storage, carregue o ficheiro de resultados JSON para o Cloud Storage:

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

      Substitua SCAN_RESULT_FILE_BUCKET pelo contentor do Cloud Storage para carregar o ficheiro de resultados.

    6. Para ver os resultados no formato SARIF, conclua o seguinte:

      1. Converta o ficheiro:

        - 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: carregue o ficheiro para o Cloud Storage:

        - name: gcr.io/cloud-builders/gcloud
          args:
            - storage
            - cp
            - IaCScanReport_$BUILD_ID.sarif.json
            - SCAN_RESULT_FILE_BUCKET
          dir: FOLDER
          id: Upload report file
        
    7. Valide os resultados. Conclua este passo no ficheiro JSON de resultados que 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 falhas que determinam quando a compilação falha. Os critérios de limite baseiam-se no número de problemas de gravidade crítica, elevada, média e baixa que a análise de validação de IaC encontra. FAILURE_CRITERIA especifica quantos problemas de cada gravidade são permitidos e também especifica como os problemas são agregados (AND ou OR). Por exemplo, se quiser que a compilação falhe se encontrar um problema crítico ou um problema de gravidade alta, defina o FAILURE_CRITERIA como Critical:1,High:1,Operator:OR. A predefinição é Critical:1,High:1,Medium:1,Low:1,Operator:OR, o que significa que, se a análise de validação de IaC encontrar uma violação de qualquer gravidade, a compilação tem de falhar.

    8. Se a compilação falhar, resolva as violações no código do Terraform.

    O que se segue?