En este instructivo, se describe cómo puedes verificar que la infraestructura como código (IaC) no infrinja las políticas de la organización ni los detectores de Security Health Analytics.
Objetivos
- Crear una postura de seguridad
- Implementa la posición en un proyecto.
- Revisa un archivo de Terraform de ejemplo para detectar incumplimientos.
- Corrige los incumplimientos en el archivo de Terraform y vuelve a verificar el archivo para verificar la corrección.
Antes de comenzar
Configurar los permisos
-
Asegúrate de tener los siguientes roles en la organización: Project Creator and Security Posture Admin
Verifica los roles
-
En la consola de Google Cloud, ve a la página IAM.
Ir a IAM - Selecciona la organización.
-
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.
- 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
-
En la consola de Google Cloud, ve a la página IAM.
Ir a IAM - Selecciona la organización.
- Haz clic en Grant access.
- En el campo Principales nuevas, ingresa tu dirección de correo electrónico.
- En la lista Seleccionar un rol, elige un rol.
- Para otorgar funciones adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.
- Haz clic en Guardar.
-
Configura Cloud Shell
-
En la consola de Google Cloud, activa 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.
- Encuentra el ID de tu organización:
gcloud organizations list
Prepare el entorno
- 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.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
Crea o selecciona un proyecto de Google Cloud.
-
Crea un proyecto de Google Cloud:
gcloud projects create PROJECT_ID
Reemplaza
PROJECT_ID
por un nombre para el proyecto de Google Cloud que estás creando. -
Selecciona el proyecto de Google Cloud que creaste:
gcloud config set project PROJECT_ID
Reemplaza
PROJECT_ID
por el nombre del proyecto de Google Cloud.
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las APIs de Security posture service and Security Command Center management:
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
Crea o selecciona un proyecto de Google Cloud.
-
Crea un proyecto de Google Cloud:
gcloud projects create PROJECT_ID
Reemplaza
PROJECT_ID
por un nombre para el proyecto de Google Cloud que estás creando. -
Selecciona el proyecto de Google Cloud que creaste:
gcloud config set project PROJECT_ID
Reemplaza
PROJECT_ID
por el nombre del proyecto de Google Cloud.
-
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las APIs de Security posture service and Security Command Center management:
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Copia el ID del proyecto:
gcloud projects describe PROJECT_ID
- Inicializa Terraform:
terraform init
Crea e implementa una postura
En Cloud Shell, inicia el editor de Cloud Shell. Para iniciar el editor, haz clic en Abrir editor en la barra de herramientas de la ventana de Cloud Shell.
Crea un archivo YAML llamado
example-standard.yaml
.Pega el siguiente código en tu 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.En Cloud Shell, crea la postura:
gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
Copia el ID de revisión de postura que genera el comando.
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_ID
Reemplaza lo siguiente:
ORGANIZATION_ID
: Es el ID de tu organización.POSTURE REVISION_ID
: El ID de revisión de postura que copiaste.PROJECT_ID
: Es el ID de tu proyecto.
Crea el archivo de Terraform y valida
En Cloud Shell, inicia el editor de Cloud Shell.
Crea un archivo de Terraform llamado
main.tf
.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.En Cloud Shell, crea el archivo del plan de Terraform y conviértelo al formato JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
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 en el que se describen las siguientes infracciones:
- El valor de
mtu
paraexample_network
no es 1,000. - La
initial_node_count
deexample_node_pool
no es 3. example_bucket
no tiene habilitado el acceso uniforme a nivel de bucket.example_bucket
no tiene el registro habilitado.
- El valor de
Resuelve incumplimientos
En Cloud Shell, inicia el editor de Cloud Shell.
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.En Cloud Shell, crea el archivo del plan de Terraform y conviértelo al formato JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
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?
- Consulta Valida tu IaC en función de las políticas de tu organización.
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.