Integrare la convalida IaC con Cloud Build

Puoi scrivere una configurazione di compilazione che indica a Cloud Build di convalidare l'infrastruttura come codice (IaC) che fa parte della build. La convalida dell'infrastruttura come codice ti consente di determinare se le definizioni delle risorse Terraform violano le policy dell'organizzazione esistenti e i rilevatori di Security Health Analytics applicati alle tue risorse Google Cloud .

Per saperne di più sulla convalida dell'IaC, consulta Convalidare l'IaC in base ai criteri della tua Google Cloud organizzazione.

Prima di iniziare

Completa queste attività per iniziare a utilizzare la convalida dell'IaC con Cloud Build.

Attiva il livello Security Command Center Premium o Enterprise

Verifica che il livello Security Command Center Premium o Enterprise sia attivato a livello di organizzazione.

L'attivazione di Security Command Center abilita le API securityposture.googleapis.com e securitycentermanagement.googleapis.com.

Configurare le autorizzazioni

  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.

      Vai a IAM
    2. Seleziona l'organizzazione.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo identificatore utente. In genere si tratta dell'indirizzo email di un Account Google.

    5. Nell'elenco Seleziona un ruolo, seleziona un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
    7. Fai clic su Salva.

    Per maggiori informazioni sulle autorizzazioni di convalida dell'IaC, consulta IAM per le attivazioni a livello di organizzazione.

    Abilita l'API Cloud Build

    1. Enable the Cloud Build API.

      Enable the API

    Definisci le tue policy

    Definisci i criteri dell'organizzazione e i detector di Security Health Analytics. Per definire queste policy utilizzando una postura di sicurezza, completa le attività descritte in Creare e implementare una postura.

    Crea il codice Terraform

    Per le istruzioni, vedi Creare il codice Terraform.

    Convalidare l'infrastruttura come codice in Cloud Build

    Aggiungi le seguenti attività al file cloudbuild.yaml:

    1. Inizializza 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
      

      Sostituisci quanto segue:

      • STATE_BUCKET con il nome del bucket Cloud Storage in cui archiviare lo stato di Terraform
      • REPOSITORY_NAME con il repository che ospita il tuo codice Terraform.
      • FOLDER con il nome della cartella in cui salvare gli artefatti di Terraform.
    2. Crea un file di piano:

      - name: hashicorp/terraform
        args:
          - '-c'
          - |
            terraform plan -out tf.plan
        dir: FOLDER
        id: Terraform Plan
        entrypoint: sh
      
    3. Converti il file del piano in formato JSON:

      - name: hashicorp/terraform
        args:
          - '-c'
          - |
            terraform show -json tf.plan > plan.json
        dir: FOLDER
        id: Terraform Show
        entrypoint: sh
      
    4. Crea il report di convalida 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
      

      Sostituisci ORGANIZATION_ID con l'ID della tua organizzazione.

    5. Se utilizzi Cloud Storage, carica il file JSON dei risultati in Cloud Storage:

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

      Sostituisci SCAN_RESULT_FILE_BUCKET con il bucket Cloud Storage in cui caricare il file dei risultati.

    6. Per visualizzare i risultati in formato SARIF:

      1. Converti il file:

        - 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. (Facoltativo) Carica il file su 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. Convalida i risultati. Completa questo passaggio nel file JSON dei risultati che non hai convertito in 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
      

      Sostituisci FAILURE_CRITERIA con i criteri per la soglia di errore che determina quando la build non va a buon fine. I criteri di soglia si basano sul numero di problemi di gravità critica, elevata, media e bassa rilevati dalla scansione di convalida dell'infrastruttura come codice. FAILURE_CRITERIA specifica il numero di problemi di ogni gravità consentiti e anche come vengono aggregati i problemi (AND o OR). Ad esempio, se vuoi che la build non vada a buon fine se rileva un problema critico o un problema di gravità elevata, imposta FAILURE_CRITERIA su Critical:1,High:1,Operator:OR. Il valore predefinito è Critical:1,High:1,Medium:1,Low:1,Operator:OR, il che significa che se la scansione di convalida IaC rileva una violazione di qualsiasi gravità, la build deve non riuscire.

    8. Se la build non va a buon fine, risolvi eventuali violazioni nel codice Terraform.

    Passaggi successivi