Wenn Sie einheitliche Betriebssystemkonfigurationen erzwingen und die Compliance in der Cloud de Confiance by S3NS Ressourcenhierarchie automatisieren möchten, konfigurieren Sie VM Manager mit Terraform auf Organisationsebene.
In diesem Dokument wird erläutert, wie Sie mit Terraform VM Manager (OS Config API) automatisch aktivieren, allgemeine Instanzmetadaten festlegen und Betriebssystemrichtlinien für alle Zielprojekte in Ihrer Ressourcenhierarchie zuweisen.
Eine Übersicht über die für VM Manager verfügbaren Terraform-Ressourcen finden Sie unter VM Manager-Ressourcen mit Terraform bereitstellen.
Hinweis
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Cloud de Confiance by S3NS Dienste und APIs überprüft. Zur Ausführung
von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich bei
Compute Engine authentifizieren, indem Sie eine der folgenden Optionen auswählen:
Wenn Sie die Terraform-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.
-
Installieren Sie die Google Cloud CLI.
-
Konfigurieren Sie die gcloud CLI für die Verwendung Ihrer föderierten Identität.
Weitere Informationen finden Sie unter Mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto erstellen:
gcloud auth application-default login
Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.
Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
-
Hinweis
- Lesen Sie die Übersicht zur Einrichtung von VM Manager.
- Prüfen Sie die OS Config-Kontingente.
- Bereiten Sie Ihre Terraform Umgebung vor.
Erforderliche IAM-Berechtigungen
Wenn Sie VM Manager automatisch aktivieren und Betriebssystemrichtlinien für mehrere Projekte zuweisen möchten, benötigt das Prinzipal oder Dienstkonto, das Terraform ausführt, bestimmte IAM-Berechtigungen (Identity and Access Management).
Berechtigungen für Zielprojekte
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für jedes Zielprojekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aktivieren des VM Manager-Dienstes und zum Festlegen von Projektmetadaten benötigen,
- Service Usage-Administrator (
roles/serviceusage.serviceUsageAdmin) - Compute-Instanzadministrator (Version 1) (
roles/compute.instanceAdmin.v1)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Aktivieren des VM Manager-Dienstes und zum Festlegen von Projektmetadaten erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen , um die notwendigen Berechtigungen anzuzeigen, die erforderlich sind:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um den VM Manager-Dienst zu aktivieren und Projektmetadaten festzulegen:
-
serviceusage.services.enable -
compute.projects.setCommonInstanceMetadata
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Dienstkonto und benutzerdefinierte Rolle einrichten
Google empfiehlt, ein dediziertes Dienst konto zu erstellen, um Ihre zentralisierte Terraform-Automatisierung auszuführen.
Wenn Sie diesem Dienstkonto die erforderlichen Berechtigungen für mehrere Projekte gewähren möchten, erstellen Sie eine benutzerdefinierte IAM Rolle auf der Organisationsebene:
- Erstellen Sie eine benutzerdefinierte Rolle auf Organisationsebene, die
serviceusage.services.enableundcompute.projects.setCommonInstanceMetadataenthält. - Gewähren Sie die benutzerdefinierte Rolle Ihrem Dienst konto auf der niedrigsten anwendbaren Ebene, z. B. auf Organisations- oder Ordnerebene. Wenn sich Ihre Zielprojekte beispielsweise alle in einem bestimmten Ordner befinden, gewähren Sie die Rolle auf Ordnerebene.
VM Manager mit Terraform aktivieren
Wenn Sie VM Manager aktivieren und Betriebssystemrichtlinien für mehrere Projekte zuweisen möchten, verwenden Sie einen der folgenden automatisierten Ansätze: Golden-Project-Blaupausen oder zentralisierte Projektverwaltung.
Golden-Project-Blaupausen verwenden
Wenn Ihre Organisation ein standardisiertes Terraform-Projektmodul (eine Golden-Blueprint) oder einen zentral erzwungenen Mechanismus zum Bereitstellen von Projekten verwendet, fügen Sie Ihrer Projekt-Blueprint die folgenden Ressourcendefinitionen hinzu:
google_project_servicegoogle_project_service_identitygoogle_project_iam_membergoogle_compute_project_metadata_item
Wenn Sie VM Manager aktivieren möchten, fügen Sie die folgenden Dienst- und Metadatenressourcen hinzu:
# 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"
}
Wenn Sie Zuweisungen von Betriebssystemrichtlinien für alle VMs bereitstellen möchten, die mit der Blueprint bereitgestellt wurden, fügen Sie die folgende Ressource für die Richtlinienzuweisung hinzu:
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"
}
}
Alle Projekte zentral verwalten
Wenn die Änderung einer Golden-Project-Blueprint nicht anwendbar ist, können Sie die Aktivierung von VM Manager und die Zuweisungen von Betriebssystemrichtlinien für mehrere vorhandene Projekte zentral verwalten. Verwenden Sie dazu das Terraform-Argument for_each.
Wenn Sie VM Manager für Zielprojekte aktivieren möchten, verwenden Sie das Argument for_each, um Ihre Projektzuordnung zu durchlaufen:
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"
}
Wenn Sie eine Betriebssystemrichtlinie für Zielprojekte zuweisen möchten, definieren Sie die Ressource für die Richtlinienzuweisung mit dem Argument 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"
}
}
Zielprojekte definieren
Sie können die Zuordnung var.target_projects Ihrer Terraform-Konfiguration entweder mit fester oder dynamischer Bereichsdefinition bereitstellen:
- Feste Bereichsdefinition Pflegen Sie eine explizite Liste von Projekt-IDs in einer lokalen Variablen oder einer externen Datendatei. Bei der festen Bereichsdefinition müssen Sie die Liste aktualisieren, wenn Sie Projekte erstellen oder löschen.
Dynamische Bereichsdefinition Zielprojekte werden anhand von Regeln für die Ressourcenhierarchie ermittelt (z. B. alle Projekte in einer Organisation oder einem Ordner). Sie können Projekte mit der Datenquelle
google_projectsabfragen:data "google_projects" "in_folder" { filter = "parent.id:${local.folder_id}" }Um Ausnahmen zu verarbeiten, filtern Sie Projekte heraus, die bestimmte Ausschlusslabels enthalten. Sie können auch externe Skripts mit
local_execausführen, die Google Cloud CLI-Befehle (z. B.gcloud asset search-all-resources) verwenden, um dynamische Ziellisten zu generieren.
Zustandslosen automatisierten Workflow einrichten
Wenn Sie die dynamische Bereichsdefinition verwenden, ändert sich die Liste der Zielprojekte ständig. Bei Verwendung einer standardmäßigen nichtflüchtigen Terraform-Statusdatei müssen neue Ressourcen manuell importiert und gelöschte Projekte aus dem Status entfernt werden.
Um die dynamische Bereichsdefinition effizient zu verwalten, implementieren Sie einen zustandslosen automatisierten Workflow mit Cloud Build:
- Terraform initialisieren Führen Sie
terraform initmit einem temporären, nichtflüchtigen lokalen Backend aus. - Zielprojekte ermitteln Generieren Sie die aktuelle Liste der Zielprojekte basierend auf Ihren dynamischen Bereichsdefinitionskriterien.
- Vorhandene Ressourcen importieren Führen Sie
terraform importaus, um vorhandenegoogle_project_service,google_project_service_identity,google_project_iam_member,google_compute_project_metadata_itemundgoogle_os_config_os_policy_assignmentRessourcen in den lokalen Status zu übernehmen. - Konfiguration anwenden Führen Sie die Standard-Terraform-Befehle (
terraform planundterraform apply) aus und übergeben Sie die ermittelte Projektliste an Ihre Deklarationen. - Ausführungsartefakte speichern Optional können Sie Planausgaben, Statussnapshots und Kopienzusammenfassungen zur Prüfung in einem Cloud Storage-Bucket speichern.
Planen Sie die Ausführung Ihrer Cloud Build-Pipeline in regelmäßigen Abständen (z. B. täglich oder wöchentlich), um Konfigurationsabweichungen automatisch zu erkennen und die Compliance in Ihrer Organisation zu erzwingen.
VM Manager-Status auf Organisationsebene ansehen
Nachdem Sie VM Manager in Ihrer Organisation eingerichtet haben, können Sie Berichte zum Aktivierungs- und Betriebssystemstatus für alle Projekte in Ihrer Hierarchie ansehen. Wenn Sie Cloud Asset Inventory-Daten nach BigQuery exportieren, können Sie SQL-Abfragen ausführen, um zu prüfen, ob VM Manager aktiviert ist, die OS Config-Agent-Versionen zu prüfen und Betriebssystemdetails für alle Projekte in Ihrer Organisation zu untersuchen.
Informationen zum Exportieren von Daten und zum Ausführen von Statusberichtabfragen finden Sie unter VM Manager-Status für Ihre Organisation mit Cloud Asset Inventory und BigQuery ansehen.