Crea un informe de validación de IaC de muestra


En este instructivo, se describe cómo verificar que tu infraestructura (IaC) no infrinja las políticas de tu organización ni los detectores de Security Health Analytics.

Objetivos

  • Crear una postura de seguridad
  • Implementa la postura en un proyecto.
  • Verifica un archivo de Terraform de ejemplo para ver si hay incumplimientos.
  • Corrige los incumplimientos en el archivo de Terraform y vuelve a revisar el archivo para verificarlo. la solución.

Antes de comenzar

Configura los permisos

  1. Asegúrate de tener los siguientes roles en la organización: Project Creator and Security Posture Admin

    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.

Configura Cloud Shell

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Busca el ID de tu organización:
    gcloud organizations list

Prepare el entorno

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  6. Habilita las APIs de Security posture service and Security Command Center management:

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  7. Instala Google Cloud CLI.
  8. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  11. Habilita las APIs de Security posture service and Security Command Center management:

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  12. Copia el número del proyecto. Necesitarás el número de proyecto para establecer el recurso de destino mientras implementas la postura.
    gcloud projects describe PROJECT_ID
  13. Inicializa Terraform:
    terraform init

Crea e implementa una postura

  1. En Cloud Shell, inicia el Editor de Cloud Shell. Para iniciar editor, haz clic en Botón del editor de código Abre el editor en la barra de herramientas de la ventana de Cloud Shell.

  2. Crea un archivo YAML llamado example-standard.yaml.

  3. Pega el siguiente código en tu archivo:

    name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard
    state: ACTIVE
    policySets:
    - policySetId: policySet1
    policies:
    - constraint:
      orgPolicyConstraintCustom:
        customConstraint:
          actionType: ALLOW
          condition: "resource.initialNodeCount == 3"
          description: Set initial node count to be exactly 3.
          displayName: fixedNodeCount
          methodTypes:
          - CREATE
          name: organizations/ORGANIZATION_ID/customConstraints/custom.fixedNodeCount
          resourceTypes:
          - container.googleapis.com/NodePool
        policyRules:
        - enforce: true
    policyId: fixedNodeCount
    - constraint:
      securityHealthAnalyticsCustomModule:
        config:
          customOutput: {}
          description: Set MTU for a network to be exactly 1000.
          predicate:
            expression: "!(resource.mtu == 1000)"
          recommendation: Only create networks whose MTU is 1000.
          resourceSelector:
            resourceTypes:
            - compute.googleapis.com/Network
          severity: HIGH
        displayName: fixedMTU
        moduleEnablementState: ENABLED
    policyId: fixedMTU
    - constraint:
      securityHealthAnalyticsModule:
        moduleEnablementState: ENABLED
        moduleName: BUCKET_POLICY_ONLY_DISABLED
    policyId: bucket_policy_only_disabled
    - constraint:
      securityHealthAnalyticsModule:
        moduleEnablementState: ENABLED
        moduleName: BUCKET_LOGGING_DISABLED
    policyId: bucket_logging_disabled
    

    Reemplaza ORGANIZATION_ID por el ID de tu organización.

  4. En Cloud Shell, crea la postura:

    gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
    
  5. Copia el ID de revisión de la postura que genera el comando.

  6. Implementa la postura en tu proyecto:

    gcloud scc posture-deployments create organizations/ORGANIZATION_ID/locations/global/postureDeployments/example-standard \
    --posture-name=organizations/ORGANIZATION_ID/locations/global/postures/example-standard \
    --posture-revision-id="POSTURE_REVISION_ID" \
    --target-resource=projects/PROJECT_NUMBER
    

    Reemplaza lo siguiente:

    • ORGANIZATION_ID: Es el ID de tu organización.
    • POSTURE REVISION_ID: Es el ID de la revisión de postura que que copiaste.
    • PROJECT_NUMBER: Es el número de tu proyecto.

Crea el archivo de Terraform y valida

  1. En Cloud Shell, inicia el Editor de Cloud Shell.

  2. Crea un archivo de Terraform llamado main.tf.

  3. Pega el siguiente código en tu archivo:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
        }
      }
    }
    
    provider "google" {
      region  = "us-central1"
      zone    = "us-central1-c"
    }
    
    resource "google_compute_network" "example_network"{
      name                            = "example-network-1"
      delete_default_routes_on_create = false
      auto_create_subnetworks         = false
      routing_mode                    = "REGIONAL"
      mtu                             = 100
      project                         = "PROJECT_ID"
    }
    
    resource "google_container_node_pool" "example_node_pool" {
      name               = "example-node-pool-1"
      cluster            = "example-cluster-1"
      project            = "PROJECT_ID"
      initial_node_count = 2
    
      node_config {
        preemptible  = true
        machine_type = "e2-medium"
      }
    }
    
    resource "google_storage_bucket" "example_bucket" {
      name          = "example-bucket-1"
      location      = "EU"
      force_destroy = true
    
      project = "PROJECT_ID"
    
      uniform_bucket_level_access = false
    }
    

    Reemplaza PROJECT_ID por el ID del proyecto. que creaste.

  4. En Cloud Shell, crea el archivo terraform plan y conviértelo al formato JSON:

    terraform plan -out main.plan
    terraform show -json main.plan > mainplan.json
    
  5. Crea el informe de validación de IaC para mainplan.json:

    gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
    

    Este comando devuelve un informe de validación de IaC que describe los siguientes incumplimientos:

    • El mtu para example_network no es 1,000.
    • El initial_node_count de example_node_pool no es 3.
    • example_bucket no tiene habilitado el acceso uniforme a nivel de bucket.
    • El example_bucket no tiene el registro habilitado.

Resuelve incumplimientos

  1. En Cloud Shell, inicia el Editor de Cloud Shell.

  2. Actualiza el archivo main.tf con los siguientes cambios:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
        }
      }
    }
    
    provider "google" {
      region  = "us-central1"
      zone    = "us-central1-c"
    }
    
    resource "google_compute_network" "example_network"{
      name                            = "example-network-1"
      delete_default_routes_on_create = false
      auto_create_subnetworks         = false
      routing_mode                    = "REGIONAL"
      mtu                             = 1000
      project                         = "PROJECT_ID"
    }
    
    resource "google_container_node_pool" "example_node_pool" {
      name               = "example-node-pool-1"
      cluster            = "example-cluster-1"
      project            = "PROJECT_ID"
      initial_node_count = 3
    
      node_config {
        preemptible  = true
        machine_type = "e2-medium"
      }
    }
    
    resource "google_storage_bucket" "example_bucket" {
      name          = "example-bucket-1"
      location      = "EU"
      force_destroy = true
    
      project = "PROJECT_ID"
      uniform_bucket_level_access = true
    
      logging {
        log_bucket   = "my-unique-logging-bucket" // Create a separate bucket for logs
        log_object_prefix = "tf-logs/"             // Optional prefix for better structure
      }
    }
    

    Reemplaza PROJECT_ID por el ID del proyecto proyecto que creaste.

  3. En Cloud Shell, crea el archivo terraform plan y conviértelo en Formato JSON:

    terraform plan -out main.plan
    terraform show -json main.plan > mainplan.json
    
  4. Vuelve a crear el informe de validación de IaC para mainplan.json:

    gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
    

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

    Borra un proyecto de Google Cloud:

    gcloud projects delete PROJECT_ID

¿Qué sigue?