Para aplicar configuraciones coherentes del sistema operativo y automatizar el cumplimiento en toda la Cloud de Confiance by S3NS jerarquía de recursos, usa Terraform para configurar VM Manager a nivel de la organización.
En este documento, se explica cómo usar Terraform para habilitar automáticamente VM Manager (API de OS Config), configurar metadatos de instancias comunes y asignar políticas de SO en todos los proyectos de destino de tu jerarquía de recursos.
Para obtener una descripción general de los recursos de Terraform disponibles para VM Manager, consulta Cómo aprovisionar recursos de VM Manager con Terraform.
Antes de comenzar
-
Configura la autenticación si aún no lo hiciste.
La autenticación verifica tu identidad para acceder a los Cloud de Confiance by S3NS servicios y las APIs. Para ejecutar
código o muestras desde un entorno de desarrollo local, puedes autenticarte en
Compute Engine seleccionando una de las siguientes opciones:
Para usar las muestras de Terraform de esta página en un entorno de desarrollo local, instala e inicializa la gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.
-
Instala Google Cloud CLI.
-
Configura gcloud CLI para usar tu identidad federada.
Para obtener más información, consulta Accede a la gcloud CLI con tu identidad federada.
-
Crea credenciales de autenticación locales para tu cuenta de usuario:
gcloud auth application-default login
Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
-
Antes de comenzar
- Revisa la Descripción general de la configuración para VM Manager.
- Revisa las cuotas de configuración del SO .
- Prepara tu entorno de Terraform.
Permisos de IAM obligatorios
Para habilitar automáticamente VM Manager y asignar políticas de SO en varios proyectos, la entidad de seguridad o la cuenta de servicio que ejecuta Terraform requiere permisos específicos de Identity and Access Management (IAM).
Permisos del proyecto de destino
Para obtener los permisos que necesitas para activar el servicio de VM Manager y configurar los metadatos del proyecto, pídele a tu administrador que te otorgue los siguientes roles de IAM en cada proyecto de destino:
- Administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin) - Administrador de instancias de Compute (v1) (
roles/compute.instanceAdmin.v1)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para activar el servicio de VM Manager y configurar los metadatos del proyecto. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para activar el servicio de VM Manager y configurar los metadatos del proyecto:
-
serviceusage.services.enable -
compute.projects.setCommonInstanceMetadata
También puedes obtener estos permisos con roles personalizados o otros roles predefinidos.
Configuración de la cuenta de servicio y el rol personalizado
Google recomienda que crees una cuenta de servicio dedicada para ejecutar tu automatización centralizada de Terraform.
Para otorgar los permisos necesarios a esta cuenta de servicio en varios proyectos, crea un rol personalizado de IAM a nivel de la organización:
- Crea un rol personalizado a nivel de la organización que incluya
serviceusage.services.enableycompute.projects.setCommonInstanceMetadata. - Otorga el rol personalizado a tu cuenta de servicio en el alcance aplicable más bajo, como el nivel de la organización o de la carpeta. Por ejemplo, si todos tus proyectos de destino están contenidos en una carpeta específica, otorga el rol a nivel de la carpeta.
Habilita VM Manager con Terraform
Para habilitar VM Manager y asignar políticas de SO en varios proyectos, usa uno de los siguientes enfoques automatizados: proyectos de referencia o administración centralizada de proyectos.
Usa proyectos de referencia
Si tu organización usa un módulo de proyecto de Terraform estandarizado (un proyecto de referencia) o un mecanismo aplicado de forma central para aprovisionar proyectos, agrega las siguientes definiciones de recursos a tu proyecto de referencia.
Para habilitar VM Manager, incluye los siguientes recursos de servicio y metadatos:
# Enable the OS Config API
resource "google_project_service" "osconfig" {
service = "osconfig.googleapis.com"
disable_on_destroy = false
}
# Set project metadata to enable VM Manager
resource "google_compute_project_metadata_item" "enable_osconfig" {
key = "enable-osconfig"
value = "TRUE"
}
Para implementar asignaciones de políticas de SO en todas las VMs aprovisionadas por el proyecto de referencia, agrega el siguiente recurso de asignación de políticas:
resource "google_os_config_os_policy_assignment" "base_security_policy" {
name = "base-security-ospolicy"
description = "Ensure baseline security agent is installed and operational"
location = var.zone
os_policies {
id = "no-op-policy"
mode = "ENFORCEMENT"
resource_groups {
resources {
id = "sample"
exec {
validate {
interpreter = "SHELL"
script = "exit 100"
}
enforce {
interpreter = "SHELL"
script = "exit 100"
}
}
}
}
}
os_policies {
id = "install-security-agent"
mode = "ENFORCEMENT"
resource_groups {
resources {
id = "install-agent"
pkg {
desired_state = "INSTALLED"
apt {
name = "security-agent"
}
yum {
name = "security-agent"
}
}
}
}
}
instance_filter {
all = true
}
rollout {
disruption_budget {
percent = 10
}
min_wait_duration = "3.5s"
}
}
Administra de forma central todos los proyectos
Si no es aplicable modificar un proyecto de referencia, puedes administrar de forma central la habilitación de VM Manager y las asignaciones de políticas de SO en varios proyectos existentes con el argumento for_each de Terraform.
Para habilitar VM Manager en los proyectos de destino, usa el argumento for_each para iterar sobre el mapa de tu proyecto:
resource "google_project_service" "osconfig" {
for_each = var.target_projects
project = each.key
service = "osconfig.googleapis.com"
disable_on_destroy = false
}
resource "google_compute_project_metadata_item" "enable_osconfig" {
for_each = var.target_projects
project = each.key
key = "enable-osconfig"
value = "TRUE"
}
Para asignar una política de SO en los proyectos de destino, define el recurso de asignación de políticas con el argumento for_each:
resource "google_os_config_os_policy_assignment" "observability_agent_policy" {
for_each = var.target_projects
project = each.key
name = "observability-agent-ospolicy"
description = "Install Google Cloud Observability agent on CentOS VMs across target projects"
location = var.zone
os_policies {
id = "setup-repo-and-install-package-policy"
mode = "ENFORCEMENT"
resource_groups {
inventory_filters {
os_short_name = "centos"
os_version = "8"
}
resources {
id = "setup-repo"
repository {
yum {
id = "google-cloud-ops-agent"
display_name = "Google Cloud Ops Agent Repository"
base_url = "https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el8-x86_64-all"
gpg_keys = [
"https://packages.cloud.google.com/yum/doc/yum-key.gpg",
"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg",
]
}
}
}
resources {
id = "install-pkg"
pkg {
desired_state = "INSTALLED"
yum {
name = "google-cloud-ops-agent"
}
}
}
}
}
instance_filter {
all = true
}
rollout {
disruption_budget {
percent = 10
}
min_wait_duration = "3.5s"
}
}
Definir proyectos de destino
Puedes proporcionar el mapa var.target_projects a tu configuración de Terraform con un alcance fijo o dinámico:
- Alcance fijo. Mantén una lista explícita de IDs de proyectos en una variable local o un archivo de datos externo. El alcance fijo requiere que actualices la lista cada vez que crees o borres proyectos.
Alcance dinámico. Descubre proyectos de destino según las reglas de jerarquía de recursos (por ejemplo, todos los proyectos dentro de una organización o carpeta). Puedes consultar proyectos con la fuente de datos
google_projects:data "google_projects" "in_folder" { filter = "parent.id:${local.folder_id}" }Para controlar las excepciones, filtra los proyectos que contienen etiquetas de exclusión específicas. También puedes ejecutar secuencias de comandos externas con
local_execque ejecuten comandos de Google Cloud CLI (comogcloud asset search-all-resources) para generar listas de destino dinámicas.
Establece un flujo de trabajo automatizado sin estado
Cuando usas el alcance dinámico, la lista de proyectos de destino cambia constantemente. El uso de un archivo de estado persistente estándar de Terraform requiere un esfuerzo manual para importar recursos nuevos y quitar proyectos borrados del estado.
Para administrar el alcance dinámico de manera eficiente, implementa un flujo de trabajo automatizado sin estado con Cloud Build:
- Inicializa Terraform. Ejecuta
terraform initcon un backend local temporal y no persistente. - Descubre proyectos de destino. Genera la lista actual de proyectos de destino según tus criterios de alcance dinámico.
- Importa los recursos existentes. Ejecuta
terraform importpara extraer los recursos existentesgoogle_project_service,google_compute_project_metadata_itemygoogle_os_config_os_policy_assignmental estado local. - Aplica la configuración. Ejecuta comandos estándar de Terraform (
terraform planyterraform apply) y pasa la lista de proyectos descubiertos a tus declaraciones. - Almacena artefactos de ejecución. De manera opcional, guarda los resultados del plan, las instantáneas de estado y los resúmenes de copia en un bucket de Cloud Storage para la auditoría.
Programa tu canalización de Cloud Build para que se ejecute periódicamente (por ejemplo, a diario o semanalmente) para detectar automáticamente la desviación de la configuración y aplicar el cumplimiento en toda tu organización.
Visualiza el estado de VM Manager a nivel de la organización
Después de configurar VM Manager en toda tu organización, puedes ver los informes de estado de habilitación y del sistema operativo en todos los proyectos de tu jerarquía. Si exportas datos de Cloud Asset Inventory a BigQuery, puedes ejecutar consultas de SQL para verificar si VM Manager está habilitado, verificar las versiones del agente de OS Config y examinar los detalles del sistema operativo en todos los proyectos de tu organización.
Para obtener información sobre cómo exportar datos y ejecutar consultas de informes de estado, consulta Visualiza el estado de VM Manager para tu organización con Cloud Asset Inventory y BigQuery.