Integrar la validación de IaC con Cloud Build

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

Para obtener más información sobre la validación de IaC, consulta el artículo Validar tu IaC con las políticas de tu Google Cloud organización.

Antes de empezar

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

Activar el nivel Premium o Enterprise de Security Command Center

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

Al activar Security Command Center, se habilitan las APIs securityposture.googleapis.com y securitycentermanagement.googleapis.com.

Configurar permisos

  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.

      Ir a IAM
    2. Selecciona la organización.
    3. Haz clic en Conceder acceso.
    4. En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, se trata de la dirección de correo de una cuenta de Google.

    5. En la lista Selecciona un rol, elige un rol.
    6. Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
    7. Haz clic en Guardar.

    Para obtener más información sobre los permisos de validación de IaC, consulta Gestión de identidades y accesos para activaciones a nivel de organización.

    Habilitar la 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

    Definir tus políticas

    Define las políticas de tu organización y los detectores de Security Health Analytics. Para definir estas políticas mediante una postura de seguridad, completa las tareas que se indican en Crear e implementar una postura.

    Crea tu código de Terraform

    Para obtener instrucciones, consulta Crear código de Terraform.

    Validar tu IAC en Cloud Build

    Añade las siguientes tareas a tu archivo cloudbuild.yaml:

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

      Haz los cambios siguientes:

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

      - name: hashicorp/terraform
        args:
          - '-c'
          - |
            terraform plan -out tf.plan
        dir: FOLDER
        id: Terraform Plan
        entrypoint: sh
      
    3. Convierte el archivo de 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
      

      Sustituye ORGANIZATION_ID por el ID de tu organización.

    5. Si usas Cloud Storage, sube el archivo JSON de resultados a 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
      

      Sustituye SCAN_RESULT_FILE_BUCKET por el segmento de Cloud Storage al que quieras subir el archivo de resultados.

    6. Para ver los resultados en formato SARIF, haz 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. Opcional: Sube el archivo a 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. Valida los resultados. Completa este paso en el archivo JSON de resultados que no hayas convertido 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
      

      Sustituye FAILURE_CRITERIA por los criterios del umbral de fallos que determinan cuándo falla la compilación. Los criterios de umbral se basan en el número de problemas de gravedad crítica, alta, media y baja que encuentra el análisis de validación de IaC. FAILURE_CRITERIA especifica cuántos problemas de cada gravedad se permiten y también cómo se agregan los problemas (AND o OR). Por ejemplo, si quieres que la compilación falle si se produce un problema crítico o un problema de gravedad alta, asigna el valor Critical:1,High:1,Operator:OR a FAILURE_CRITERIA. 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 IaC detecta una infracción de cualquier gravedad, la compilación debe fallar.

    8. Si la compilación falla, resuelve las infracciones en el código de Terraform.

    Siguientes pasos