Crea un informe de validación de IaC de muestra

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

Objetivos

  • Crea una postura de seguridad.
  • Implementa la postura en un proyecto.
  • Verifica si hay incumplimientos en un archivo de Terraform de ejemplo.
  • Corrige los incumplimientos en el archivo de Terraform y vuelve a verificar el archivo para confirmar la corrección.

Antes de comenzar

Configura los permisos

    Asegúrate de tener los siguientes roles en la organización: Creador de proyectos y Administrador de posturas de seguridad.

    Verifica los roles

    1. En la Google Cloud consola de, dirígete a la página IAM.

      Ir a IAM
    2. Selecciona la organización.
    3. En la columna Principal, busca todas las filas que te identifiquen a ti o a un grupo en el que se te incluya. Para saber en qué grupos se te incluye, comunícate con el administrador.

    4. Para todas las filas que te especifiquen o incluyan, consulta la columna Rol para ver si la lista de roles incluye los roles necesarios.

    Otorga los roles

    1. En la Google Cloud consola de, dirígete 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 identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.

    5. Haz clic en Selecciona un rol y, luego, busca el rol.
    6. Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
    7. Haz clic en Guardar.

Configura Cloud Shell

    En la Google Cloud consola de, activa Cloud Shell.

    Activa Cloud Shell

    En la parte inferior de la Google Cloud consola de, 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.

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

Prepare el entorno

  1. Accede a tu Google Cloud cuenta de. 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. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Crea o selecciona un Google Cloud proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crea un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el resourcemanager.projects.create permiso. Obtén más información para otorgar roles.
    • Crea un proyecto de: Google Cloud

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el Google Cloud proyecto de que estás creando.

    • Selecciona el Google Cloud proyecto de que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Google Cloud proyecto de.

  6. Verifica que la facturación esté habilitada para tu Google Cloud proyecto.

  7. Habilita el servicio de postura de seguridad y las APIs de administración de Security Command Center:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el serviceusage.services.enable permiso. Obtén más información para otorgar roles.

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  8. Instala Google Cloud CLI.

  9. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  10. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  11. Crea o selecciona un Google Cloud proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crea un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el resourcemanager.projects.create permiso. Obtén más información para otorgar roles.
    • Crea un proyecto de: Google Cloud

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el Google Cloud proyecto de que estás creando.

    • Selecciona el Google Cloud proyecto de que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Google Cloud proyecto de.

  12. Verifica que la facturación esté habilitada para tu Google Cloud proyecto.

  13. Habilita el servicio de postura de seguridad y las APIs de administración de Security Command Center:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el serviceusage.services.enable permiso. Obtén más información para otorgar roles.

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

Crea e implementa una postura

  1. En Cloud Shell, inicia el editor de Cloud Shell. Para iniciar el editor, haz clic en Botón del editor de código Abrir 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 el archivo:

name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard
state: ACTIVE
policySets:
- 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
  policySetId: policySet1

Reemplaza ORGANIZATION_ID por el ID de tu organización.

  1. En Cloud Shell, crea la postura:

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

  3. 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 revisión de la postura 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 el 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 de plan de Terraform 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 muestra un informe de validación de IaC que describe los siguientes incumplimientos:

    • El mtu de example_network no es 1000.
    • El initial_node_count de example_node_pool no es 3.
    • El example_bucket no tiene habilitado el acceso uniforme a nivel del bucket.
    • El example_bucket no tiene habilitado el registro.

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 que creaste.

  3. En Cloud Shell, crea el archivo de plan de Terraform y conviértelo al 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 Google Cloud proyecto de:

    gcloud projects delete PROJECT_ID

¿Qué sigue?