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 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 eseguito l'accesso 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 Identity and Access Management (IAM) specifiche.
Autorizzazioni per il 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 Terraform centralizzata.
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 di progetto golden
Se la tua organizzazione utilizza un modulo di progetto Terraform standardizzato (un progetto d'oro) o un meccanismo applicato centralmente per eseguire il provisioning dei progetti, aggiungi le seguenti definizioni delle risorse al progetto:
google_project_servicegoogle_project_service_identitygoogle_project_iam_membergoogle_compute_project_metadata_item
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
}
# Explicitly provision the OS Config Service Agent
resource "google_project_service_identity" "osconfig_identity" {
provider = google-beta
project = google_project_service.osconfig.project
service = "osconfig.googleapis.com"
}
# Grant the required role to the explicitly provisioned Service Agent
resource "google_project_iam_member" "osconfig_service_agent_binding" {
project = google_project_service.osconfig.project
role = "roles/osconfig.serviceAgent"
member = "serviceAccount:${google_project_service_identity.osconfig_identity.email}"
}
# 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_project_service_identity" "osconfig_identity" {
provider = google-beta
for_each = var.target_projects
project = google_project_service.osconfig[each.key].project
service = "osconfig.googleapis.com"
}
resource "google_project_iam_member" "osconfig_service_agent_binding" {
for_each = var.target_projects
project = google_project_service.osconfig[each.key].project
role = "roles/osconfig.serviceAgent"
member = "serviceAccount:${google_project_service_identity.osconfig_identity[each.key].email}"
}
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:
- Ambito fisso. Mantieni un elenco esplicito di ID progetto in una variabile locale o in un file di dati esterno. L'ambito fisso richiede l'aggiornamento dell'elenco ogni volta che crei o elimini progetti.
Scoping dinamico. 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 target dinamici.
Stabilisci un workflow automatizzato stateless
Quando utilizzi l'ambito dinamico, l'elenco dei progetti target cambia continuamente. L'utilizzo di un file di stato Terraform permanente 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 persistente. - Scopri i progetti di destinazione. Genera l'elenco attuale dei progetti di destinazione in base ai criteri di definizione dell'ambito dinamico.
- Importa risorse esistenti. Esegui
terraform importper eseguire il pull delle risorsegoogle_project_service,google_project_service_identity,google_project_iam_member,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.
Visualizzare 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 abilitazione 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 di stato, consulta Visualizza 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.