Integrar la validación de IaC con GitHub Actions

Puedes usar la acción Analizar seguridad del código para validar la infraestructura como código (IaC) que forma parte de tu flujo de trabajo de GitHub Actions. La validación de IaC te permite determinar si las definiciones de tus recursos de Terraform infringen las políticas de la 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 GitHub Actions.

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.

Crear una cuenta de servicio

Crea una cuenta de servicio que puedas usar para la acción Analizar seguridad del código.

  1. Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator). Learn how to grant roles.
  2. In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  3. Select your project.
  4. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

    In the Service account description field, enter a description. For example, Service account for quickstart.

  5. Click Create and continue.
  6. Grant the Security Posture Shift-Left Validator role to the service account.

    To grant the role, find the Select a role list, then select Security Posture Shift-Left Validator.

  7. Click Continue.
  8. Click Done to finish creating the service account.

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.

Configurar la autenticación

  1. Configura Workload Identity Federation con tu proveedor de identidades de GitHub. Para obtener instrucciones, consulta Federación de identidades de cargas de trabajo.

  2. Obtén la URL de tu token de ID de federación de identidades de cargas de trabajo. Por ejemplo, https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID.

    Ten en cuenta lo siguiente:

    • PROJECT_NUMBER es el número del proyecto en el que has configurado la federación de identidades de cargas de trabajo.Google Cloud
    • POOL_ID es el nombre del grupo.
    • PROVIDER_ID es el nombre de tu proveedor de identidades.
  3. Añade la acción Authenticate to Google Cloud (Autenticar en Google Cloud) a tu flujo de trabajo para autenticar la acción de validación de IaC.

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 el archivo JSON de tu plan de Terraform

  1. Crea tu código de Terraform. Para obtener instrucciones, consulta el artículo sobre cómo crear tu código de Terraform.

  2. En GitHub Actions, inicializa Terraform. Por ejemplo, si usas la acción HashiCorp - Setup Terraform, ejecuta el siguiente comando:

    - name: Terraform Init
      id: init
      run: terraform init
    
  3. Crea un archivo de plan de Terraform:

    - name: Create Terraform Plan
      id: plan
      run: terraform plan -out=TF_PLAN_FILE
    

    Sustituye TF_PLAN_FILE por el nombre del archivo del plan de Terraform. Por ejemplo, myplan.tfplan.

  4. Convierte el archivo de tu plan al formato JSON:

    - name: Convert Terraform Plan to JSON
      id: convert
      run: terraform show -no-color -json TF_PLAN_FILE > TF_PLAN_JSON_FILE
    

    Sustituye TF_PLAN_JSON_FILE por el nombre del archivo de plan de Terraform, en formato JSON. Por ejemplo, mytfplan.json.

Añade la acción al flujo de trabajo de GitHub Actions

  1. En el repositorio de GitHub, ve al flujo de trabajo.
  2. Abre el editor de flujos de trabajo.
  3. En la barra lateral de GitHub Marketplace, busca Analyze Code Security.
  4. En la sección Instalación, copia la sintaxis.
  5. Pega la sintaxis como un nuevo paso en tu flujo de trabajo.
  6. Sustituye los siguientes valores:

    • workload_identity_provider con el enlace a la URL del token de ID de federación de identidades de carga de trabajo.
    • service_account con la dirección de correo de la cuenta de servicio que has creado para la acción.
    • organization_id con el ID de tu organización. Google Cloud
    • scan_file_ref con la ruta al archivo de plan de Terraform, en formato JSON.
    • failure_criteria con los criterios del umbral de errores que determinan cuándo falla la acció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 cómo se agregan (AND o OR). Por ejemplo, si quieres que la acción falle si se encuentra con un problema crítico o con un problema de gravedad alta, define failure_criteria como 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 IaC detecta algún problema, la acción debe fallar.

Ahora puedes ejecutar el flujo de trabajo para validar tu archivo de plan de Terraform. Para ejecutar el flujo de trabajo manualmente, consulta Ejecutar un flujo de trabajo manualmente.

Ver el informe de infracciones de IaC

  1. En tu repositorio de GitHub, haz clic en Actions (Acciones) y selecciona tu flujo de trabajo.

  2. Haz clic en la ejecución más reciente del flujo de trabajo.

    En la sección Artefactos, el informe de infracción (ias-scan-sarif.json) está disponible en un archivo ZIP. El informe incluye los siguientes campos:

    • Un campo rules que describe qué políticas se han infringido en el plan de Terraform. Cada regla incluye un ruleID que puede asociar con los resultados incluidos en el informe.
    • Un campo results que describe las modificaciones propuestas de un recurso que infringen una regla específica.
  3. Resuelve las infracciones en tu código de Terraform antes de aplicarlo.

Siguientes pasos