Integra la validación de IaC en Cloud Build

Puedes escribir una configuración de compilación que le indique a Cloud Build que valide la infraestructura como código (IaC) que forma parte de tu compilación. La validación de la IaC te permite determinar si las definiciones de recursos de Terraform infringen las políticas de la organización y los detectores de Security Health Analytics que se aplican a tus recursos de Google Cloud.

Para obtener más información sobre la validación de IaC, consulta Valida tu IaC según las políticas de la organización de Google Cloud.

Antes de comenzar

Completa estas tareas para comenzar a usar la validación de IaC con Cloud Build.

Activa el nivel Premium o Enterprise de Security Command Center

Verifica que el nivel Premium o Enterprise de Security Command Center esté activado a nivel de la organización.

La activación de Security Command Center habilita las APIs de securityposture.googleapis.com y securitycentermanagement.googleapis.com.

Configurar los permisos

  1. Asegúrate de tener los siguientes roles en la organización:

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

    Verifica los roles

    1. En la consola de Google Cloud, ve a la página IAM.

      Ir a IAM
    2. Selecciona la organización.
    3. En la columna Principal, busca la fila que tiene tu dirección de correo electrónico.

      Si tu dirección de correo electrónico no está en esa columna, no tienes ningún rol.

    4. En la columna Función de la fila con la dirección de correo electrónico, verifica si la lista de roles incluye los roles necesarios.

    Otorga los roles

    1. En la consola de Google Cloud, ve a la página IAM.

      Ir a IAM
    2. Selecciona la organización.
    3. Haz clic en Grant access.
    4. En el campo Principales nuevas, ingresa tu dirección de correo electrónico.
    5. En la lista Seleccionar un rol, elige un rol.
    6. Para otorgar funciones adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.
    7. Haz clic en Guardar.

Si quieres obtener más información sobre los permisos de validación de IaC, consulta IAM para activaciones a nivel de la organización.

Habilita la API de Cloud Build

  1. Habilita la API de Cloud Build.

    Habilita la API

Define tus políticas

Define las políticas de la organización y los detectores de Security Health Analytics. Para definir estas políticas con una postura de seguridad, completa las tareas que se encuentran en Crea e implementa una postura.

Crea tu código de Terraform

Para obtener instrucciones, consulta Crea tu código de Terraform.

Valida tu IAC en Cloud Build

Agrega las siguientes tareas a tu archivo cloudbuild.yaml:

  1. Inicializa Terraform mediante este comando:

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

    Reemplaza lo siguiente:

    • STATE_BUCKET por el nombre del bucket de Cloud Storage para almacenar el estado de Terraform
    • REPOSITORY_NAME por el repositorio que aloja el código de Terraform
    • FOLDER por el nombre de la carpeta en la que se guardarán los artefactos de Terraform
  2. Crea un archivo del plan:

    - name: hashicorp/terraform
      args:
        - '-c'
        - |
          terraform plan -out tf.plan
      dir: FOLDER
      id: Terraform Plan
      entrypoint: sh
    
  3. Convierte el archivo del plan al formato JSON:

    - name: hashicorp/terraform
      args:
        - '-c'
        - |
          terraform show -json tf.plan > plan.json
      dir: FOLDER
      id: Terraform Show
      entrypoint: sh
    
  4. Crea el informe de validación 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
    

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

  5. Si usas Cloud Storage, sube el archivo de resultados JSON a Cloud Storage:

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

    Reemplaza SCAN_RESULT_FILE_BUCKET por el bucket de Cloud Storage al que deseas subir el archivo de resultados.

  6. Para ver los resultados en formato SARIF, completa lo siguiente:

    1. Convierte el archivo:

      - 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. Sube el archivo a Cloud Storage (opcional):

      - name: gcr.io/cloud-builders/gsutil
        args:
          - cp
          - IaCScanReport_$BUILD_ID.sarif.json
          - SCAN_RESULT_FILE_BUCKET
        dir: FOLDER
        id: Upload report file
      
  7. Valida los resultados. Completa este paso en el archivo JSON de resultados que no convertiste al 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
    

    Reemplaza FAILURE_CRITERIA por los criterios del umbral de fallas que determinan cuándo falla la compilación. El criterio de umbral se basa en la cantidad de problemas críticos, de gravedad alta, media y baja que encuentra el análisis de validación de la IaC. FAILURE_CRITERIA especifica cuántos problemas de cada gravedad se permiten y también especifica cómo se agrupan los problemas (AND o OR). Por ejemplo, si deseas que la compilación falle si encuentra un problema crítico o uno de gravedad alta, establece FAILURE_CRITERIA en Critical:1,High:1,Operator:OR. El valor predeterminado es Critical:1,High:1,Medium:1,Low:1,Operator:OR, lo que significa que si el análisis de validación de la IaC encuentra una violación de alguna gravedad, la compilación debe fallar.

  8. Si la compilación falla, resuelve cualquier incumplimiento en tu código de Terraform.

¿Qué sigue?