Per applicare configurazioni coerenti del sistema operativo e automatizzare la conformità nell'intera gerarchia delle risorse Google Cloud , utilizza Terraform per configurare VM Manager a livello di organizzazione.
Questo documento spiega come utilizzare Terraform per abilitare automaticamente VM Manager (API OS Config), impostare metadati di istanza comuni e assegnare policy del sistema operativo a tutti i progetti di destinazione nella gerarchia delle risorse.
Per una panoramica delle risorse Terraform disponibili per VM Manager, consulta Provisioning delle risorse VM Manager utilizzando Terraform.
Prima di iniziare
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione verifica la tua identità per l'accesso ad API e servizi Google Cloud . Per eseguire
codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su
Compute Engine selezionando una delle seguenti opzioni:
Per utilizzare gli esempi di Terraform in questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura Credenziali predefinite dell'applicazione con le tue credenziali utente.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Se utilizzi una shell locale, crea le credenziali di autenticazione locali per il tuo account utente:
gcloud auth application-default login
Non è necessario eseguire questa operazione se utilizzi Cloud Shell.
Se viene restituito un errore di autenticazione e utilizzi un provider di identità (IdP) esterno, verifica di aver acceduto a gcloud CLI con la tua identità federata.
Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
-
Prima di iniziare
- Consulta la panoramica della configurazione di VM Manager.
- Esamina le quote di OS Config.
- Prepara il tuo ambiente Terraform.
Autorizzazioni IAM obbligatorie
Per abilitare automaticamente VM Manager e assegnare policy del sistema operativo a più progetti, il principal o il account di servizio che esegue Terraform richiede autorizzazioni IAM (Identity and Access Management) specifiche.
Autorizzazioni del progetto di destinazione
Per ottenere le autorizzazioni necessarie per attivare il servizio VM Manager e impostare i metadati del progetto, chiedi all'amministratore di concederti i seguenti ruoli IAM in ogni progetto di destinazione:
- Amministratore Service Usage (
roles/serviceusage.serviceUsageAdmin) - Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questi ruoli predefiniti contengono le autorizzazioni necessarie per attivare il servizio VM Manager e impostare i metadati del progetto. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per attivare il servizio VM Manager e impostare i metadati del progetto sono necessarie le seguenti autorizzazioni:
-
serviceusage.services.enable -
compute.projects.setCommonInstanceMetadata
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Configurazione del service account e del ruolo personalizzato
Google consiglia di creare un service account dedicato per eseguire l'automazione centralizzata di Terraform.
Per concedere le autorizzazioni richieste a questo account di servizio in più progetti, crea un ruolo personalizzato IAM a livello di organizzazione:
- Crea un ruolo personalizzato a livello di organizzazione che includa
serviceusage.services.enableecompute.projects.setCommonInstanceMetadata. - Concedi il ruolo personalizzato al tuo account di servizio nell'ambito applicabile più basso, ad esempio a livello di organizzazione o cartella. Ad esempio, se tutti i progetti di destinazione sono contenuti in una cartella specifica, concedi il ruolo a livello di cartella.
Attiva VM Manager utilizzando Terraform
Per abilitare VM Manager e assegnare policy del sistema operativo a più progetti, utilizza uno dei seguenti approcci automatizzati: blueprint di progetti golden o gestione centralizzata dei progetti.
Utilizzare i blueprint del progetto dorato
Se la tua organizzazione utilizza un modulo di progetto Terraform standardizzato (un progetto modello) o un meccanismo applicato centralmente per il provisioning dei progetti, aggiungi le seguenti definizioni di risorse al progetto modello.
Per attivare VM Manager, includi le seguenti risorse di servizio e metadati:
# 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"
}
Per eseguire il deployment delle assegnazioni delle policy del sistema operativo in tutte le VM di cui è stato eseguito il provisioning del blueprint, aggiungi la seguente risorsa di assegnazione delle policy:
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"
}
}
Gestisci tutti i progetti a livello centrale
Se la modifica di un blueprint di progetto golden non è applicabile, puoi gestire centralmente l'attivazione di VM Manager e le assegnazioni delle policy del sistema operativo in più progetti esistenti utilizzando l'argomento Terraform for_each.
Per abilitare VM Manager nei progetti di destinazione, utilizza l'argomento for_each per scorrere la mappa del progetto:
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"
}
Per assegnare una policy del sistema operativo a più progetti di destinazione, definisci la risorsa di assegnazione delle policy con l'argomento 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"
}
}
Definisci progetti di destinazione
Puoi fornire la mappa var.target_projects alla configurazione Terraform utilizzando l'ambito fisso o quello dinamico:
- Definizione dell'ambito fissa. Mantieni un elenco esplicito di ID progetto in una variabile locale o in un file di dati esterno. L'ambito fisso richiede di aggiornare l'elenco ogni volta che crei o elimini progetti.
Definizione dinamica dell'ambito. Scopri i progetti di destinazione in base alle regole della gerarchia delle risorse (ad esempio, tutti i progetti all'interno di un'organizzazione o una cartella). Puoi interrogare i progetti utilizzando l'origine dati
google_projects:data "google_projects" "in_folder" { filter = "parent.id:${local.folder_id}" }Per gestire le eccezioni, filtra i progetti che contengono etichette di esclusione specifiche. Puoi anche eseguire script esterni utilizzando
local_execche eseguono i comandi Google Cloud CLI (ad esempiogcloud asset search-all-resources) per generare elenchi di destinazione dinamici.
Stabilisci un workflow automatico stateless
Quando utilizzi l'ambito dinamico, l'elenco dei progetti di destinazione cambia continuamente. L'utilizzo di un file di stato Terraform persistente standard richiede un intervento manuale per importare nuove risorse e rimuovere i progetti eliminati dallo stato.
Per gestire in modo efficiente l'ambito dinamico, implementa un workflow automatizzato stateless utilizzando Cloud Build:
- Inizializza Terraform. Esegui
terraform initutilizzando un backend locale temporaneo e non permanente. - Scopri i progetti di destinazione. Genera l'elenco attuale dei progetti di destinazione in base ai criteri di definizione dell'ambito dinamico.
- Importa le risorse esistenti. Esegui
terraform importper estrarre le risorsegoogle_project_service,google_compute_project_metadata_itemegoogle_os_config_os_policy_assignmentesistenti nello stato locale. - Applica configurazione. Esegui i comandi Terraform standard (
terraform planeterraform apply), passando l'elenco dei progetti rilevati alle tue dichiarazioni. - Archivia gli artefatti di esecuzione. Se vuoi, salva gli output del piano, gli snapshot dello stato e i riepiloghi della copia in un bucket Cloud Storage per l'audit.
Pianifica l'esecuzione periodica della pipeline Cloud Build (ad esempio giornaliera o settimanale) per rilevare automaticamente la deriva della configurazione e garantire la conformità in tutta l'organizzazione.
Visualizza lo stato di VM Manager a livello di organizzazione
Dopo aver configurato VM Manager in tutta l'organizzazione, puoi visualizzare i report sullo stato di attivazione e del sistema operativo in tutti i progetti della gerarchia. Esportando i dati di Cloud Asset Inventory in BigQuery, puoi eseguire query SQL per verificare se VM Manager è abilitato, controllare le versioni dell'agente OS Config e ispezionare i dettagli del sistema operativo in tutti i progetti della tua organizzazione.
Per scoprire come esportare i dati ed eseguire query sui report sullo stato, consulta Visualizzare lo stato di VM Manager per la tua organizzazione utilizzando Cloud Asset Inventory e BigQuery.
Passaggi successivi
- Visualizza lo stato di VM Manager per la tua organizzazione utilizzando Cloud Asset Inventory e BigQuery.
- Crea un'assegnazione delle policy del sistema operativo.
- Crea job di applicazione patch.
- Risolvi i problemi di VM Manager.