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
-
En la Google Cloud consola de, dirígete a la página IAM.
Ir a IAM - Selecciona la organización.
-
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.
- Para todas las filas que te especifiquen o incluyan, consulta la columna Rol para ver si la lista de roles incluye los roles necesarios.
-
En la Google Cloud consola de, dirígete a la página IAM.
Ir a IAM - Selecciona la organización.
- Haz clic en Grant access.
-
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.
- Haz clic en Selecciona un rol y, luego, busca el rol.
- Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
- Haz clic en Guardar.
Asegúrate de tener los siguientes roles en la organización: Creador de proyectos y Administrador de posturas de seguridad.
Verifica los roles
Otorga los roles
Configura Cloud Shell
- Busca el ID de tu organización:
gcloud organizations list
En la Google Cloud consola de, 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.
Prepare el entorno
- 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.
-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
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 elresourcemanager.projects.createpermiso. Obtén más información para otorgar roles.
-
Crea un proyecto de: Google Cloud
gcloud projects create PROJECT_ID
Reemplaza
PROJECT_IDpor 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_IDpor el nombre de tu Google Cloud proyecto de.
-
Verifica que la facturación esté habilitada para tu Google Cloud proyecto.
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 elserviceusage.services.enablepermiso. Obtén más información para otorgar roles.gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com -
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
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 elresourcemanager.projects.createpermiso. Obtén más información para otorgar roles.
-
Crea un proyecto de: Google Cloud
gcloud projects create PROJECT_ID
Reemplaza
PROJECT_IDpor 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_IDpor el nombre de tu Google Cloud proyecto de.
-
Verifica que la facturación esté habilitada para tu Google Cloud proyecto.
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 elserviceusage.services.enablepermiso. Obtén más información para otorgar roles.gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - 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
- Inicializa Terraform mediante este comando:
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 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.
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 la 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_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
En Cloud Shell, inicia el editor de Cloud Shell.
Crea un archivo de Terraform llamado
main.tf.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_IDpor el ID del proyecto que creaste.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
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
mtudeexample_networkno es 1000. - El
initial_node_countdeexample_node_poolno es 3. - El
example_bucketno tiene habilitado el acceso uniforme a nivel del bucket. - El
example_bucketno tiene habilitado el registro.
- El
Resuelve incumplimientos
En Cloud Shell, inicia el editor de Cloud Shell.
Actualiza el archivo
main.tfcon 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_IDpor el ID del proyecto que creaste.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
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?
- Revisa Valida tu IaC con las políticas de tu organización.
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.