Configurare VM Manager in un'organizzazione utilizzando Terraform

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.

    1. Installa Google Cloud CLI.

    2. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    3. 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

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:

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:

  1. Crea un ruolo personalizzato a livello di organizzazione che includa serviceusage.services.enable e compute.projects.setCommonInstanceMetadata.
  2. 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_exec che eseguono i comandi Google Cloud CLI (ad esempio gcloud 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:

  1. Inizializza Terraform. Esegui terraform init utilizzando un backend locale temporaneo e non permanente.
  2. Scopri i progetti di destinazione. Genera l'elenco attuale dei progetti di destinazione in base ai criteri di definizione dell'ambito dinamico.
  3. Importa le risorse esistenti. Esegui terraform import per estrarre le risorse google_project_service, google_compute_project_metadata_item e google_os_config_os_policy_assignment esistenti nello stato locale.
  4. Applica configurazione. Esegui i comandi Terraform standard (terraform plan e terraform apply), passando l'elenco dei progetti rilevati alle tue dichiarazioni.
  5. 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