Google empfiehlt, die firewallPolicies
-Methoden zum Konfigurieren von Cloud Next Generation Firewall-Richtlinien zu verwenden. In diesem Dokument wird beschrieben, wie Sie Ihre Terraform-Konfigurationen migrieren, damit firewallPolicies-Methoden anstelle von organizationSecurityPolicies-Methoden verwendet werden.
Die firewallPolicies
-Methoden bieten Optionen für die Organisationsverwaltung mit detaillierten Steuerelementen. Wir empfehlen die firewallPolicies
-Methoden für die Ressourcenverwaltung mit Terraform. In diesem Dokument wird davon ausgegangen, dass Sie mit den Best Practices für Terraform und den grundlegenden Terraform-Vorgängen vertraut sind.
Mit Firewallrichtlinien lassen sich mehrere Firewallregeln gruppieren, die Verbindungen explizit ablehnen oder zulassen können. Weitere Informationen zu Firewallrichtlinien finden Sie unter Firewallrichtlinien.
Vorteile der Migration zu firewallPolicies
-Methoden
Die firewallPolicies
-Methoden bieten eine konsistente Firewall in der gesamtenGoogle Cloud -Ressourcenhierarchie und bieten mehrere betriebliche Vorteile.
Erhöhte Sicherheit für Organisationen: Die
firewallPolicies
-Methoden sorgen für mehr Sicherheit in der Organisation, indem sie erweiterte Berechtigungssteuerungen für die Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) verwenden.Einfache Bedienung: Die
firewallPolicies
-Methoden unterstützen die Verwendung erweiterter Funktionen wie FQDN-Objekte (voll qualifizierter Domainname), Standortbestimmungs-Objekte, Bedrohungserkennung, Einbruchsprävention und Adressgruppen, um die Bedienung und Effizienz zu verbessern.
Funktionsweise der Migration
Bevor Sie mit der Migration beginnen, müssen Sie die folgenden Schritte ausführen, die im Abschnitt Vorbereitung beschrieben werden:
- Achten Sie darauf, dass Sie Version 4.0.0 oder höher des Terraform-Anbieters für Google Cloudverwenden.
- Prüfen Sie, ob der Terraform-Zustand mit der aktuellen Konfiguration übereinstimmt.
- Identifizieren Sie Ressourcen, die in den Migrationsbereich fallen, einschließlich Richtlinien, Regeln und Zuordnungen.
- Bereiten Sie Befehle vor, um die neuen
firewallPolicies
-Ressourcen entweder manuell oder mit einem automatisierten Skript in den Terraform-Zustand zu importieren. - Sehen Sie sich die empfohlenen Sicherungs- und Wiederherstellungsprozeduren für Ihre Terraform-Version an und erstellen Sie eine Sicherung Ihres aktuellen Terraform-Status.
Die Neukonfiguration von Terraform zur Migration der organizationSecurityPolicies
-Ressourcen umfasst die folgenden Schritte:
Vorhandene Ressourcen aus dem Terraform-Zustand entfernen Entfernen Sie vorhandene
organizationSecurityPolicies
-Ressourcen aus dem Terraform-Zustand.Terraform-Konfiguration aktualisieren Bearbeiten Sie die Terraform-Konfigurationsdateien, um den vorhandenen Ressourcentyp, die Namen und die Attribute durch den neuen Ressourcentyp, die Namen und die Attribute zu ersetzen.
Neue Ressourcen in den Terraform-Zustand importieren Importieren Sie die neuen
firewallPolicies
-Ressourcen in den Terraform-Zustand.
Hinweise
In diesem Abschnitt werden die Voraussetzungen für die Migration beschrieben.
Prüfen, ob der Terraform-Anbieter unterstützt wird
Achten Sie darauf, dass Sie Version 4.0.0 oder höher des Terraform-Anbieters fürGoogle Cloudverwenden. Diese Version enthält die folgenden Ressourcen aus der Terraform-Registrierung:
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
Terraform-Zustand auf dem neuesten Stand halten
Führen Sie den folgenden Terraform-Befehl aus, um zu prüfen, ob der Terraform-Zustand mit der aktuellen Konfiguration übereinstimmt.
terraform plan
Um Inkonsistenzen zu vermeiden, empfehlen wir, alle ausstehenden Änderungen oder Aktionen vor der Migration zu übernehmen.
Ressourcen identifizieren, die migriert werden sollen
Führen Sie den folgenden Terraform-Befehl aus, um eine Liste der Ressourcen zu generieren, die in den Migrationsbereich fallen, einschließlich Richtlinien, Regeln und Zuordnungen.
terraform state list | grep ^google_compute_organization_security_policy
Die Ausgabe sieht etwa so aus:
google_compute_organization_security_policy.policy google_compute_organization_security_policy_association.association["folders/45678"] google_compute_organization_security_policy_rule.rule["allow-inbound-ssh"] google_compute_organization_security_policy_rule.rule["deny-all-egress"]
Sie benötigen diese Ressourcen, um zu den firewallPolicies
-Methoden zu migrieren. Speichern Sie sie für später.
Importbefehle mit einem automatisierten Script vorbereiten
Um Fehler oder fehlende Konfigurationen während der Migration zu vermeiden, empfehlen wir, ein automatisiertes Skript zu verwenden, um die Befehle zu generieren, die zum Importieren der firewallPolicies
-Ressourcen in den Terraform-Zustand erforderlich sind.
Führen Sie das folgende Terraform-Skript aus, um diese Aufgaben auszuführen:
- Neue Ressourcenadressen aus den vorhandenen Ressourcenadressen generieren.
- Ressourcenkennungen (oder Ressourcen-IDs) aus den vorhandenen Ressourcenadressen abrufen.
- Generieren Sie Importkennungen (oder Import-IDs) aus den Ressourcen-IDs.
- Importbefehle für alle neuen
firewallPolicies
-Ressourcen anzeigen
terraform state list | grep ^google_compute_organization_security_policy | while read -r resource_address; do # Generate the new resource address for google_compute_firewall_policy new_address=$(echo "$resource_address" | sed 's/google_compute_organization_security_policy/google_compute_firewall_policy/') # Get the full resource ID from terraform state and remove quotes resource_id=$(echo "$resource_address.id" | terraform console | tr -d '"') # Use awk to parse the resource_id and generate the correct import identifier import_id=$(echo "$resource_id" | awk -F'/' ' /association/ { split($0, a, "/association/"); assoc_name = a[2]; gsub(/\//, "%2F", assoc_name); print $4 "/" assoc_name; next } /priority/ { print $4 "/" $6; next } { print $4 } ') # Print the final import command echo "terraform import '$new_address' '$import_id'" done
Sie benötigen die Ausgabe dieses Skripts, um die Ressourcen zu importieren. Speichern Sie die Ausgabe für später.
Importbefehle manuell vorbereiten
Wenn der automatisierte Ansatz nicht möglich ist, können Sie die Befehle zum Importieren der firewallPolicies
-Ressourcen manuell generieren. Mit dem Befehl terraform console
können Sie die IDs der Ressourcen abrufen.
Mit dem folgenden Terraform-Befehl wird die Ressourcen-ID der google_compute_organization_security_policy.policy
-Ressource angezeigt:
echo google_compute_organization_security_policy.policy.id | terraform console
Die Ausgabe sieht etwa so aus:
"locations/global/securityPolicies/12345"
Ermitteln Sie auf ähnliche Weise die Ressourcen-IDs für die anderen Ressourcen, die Sie im Abschnitt Ressourcen identifizieren, die migriert werden sollen identifiziert haben.
Alternativ können Sie den folgenden Terraform-Befehl verwenden, um die Ressourcen-IDs aller identifizierten Ressourcen abzurufen:
terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done
Die Ausgabe sieht etwa so aus:
"locations/global/securityPolicies/12345" "locations/global/securityPolicies/12345/association/locations/global/securityPolicies/23456-folders/56789" "locations/global/securityPolicies/12345/priority/1000" "locations/global/securityPolicies/12345/priority/65535"
Wenn Sie die firewallPolicies
-Ressourcen importieren möchten, benötigen Sie ihre Import-IDs. Import-IDs bestehen aus einer numerischen Kennung, die als Richtliniennummer bezeichnet wird, einem Zuordnungsnamen und einer Regelprioritätsnummer, wie in diesem Abschnitt beschrieben.
Die numerische Kennung nach dem dritten Schrägstrich (/) ist die Richtliniennummer, die die Import-ID für Richtlinien darstellt. Die folgende Tabelle zeigt ein Beispiel für eine Ressourcen-ID und eine Import-ID für eine Richtlinie.
Ressourcen-ID Import-ID "locations/global/securityPolicies/12345"
12345
Die Richtliniennummer und der Name der Zuordnung bilden die Import-ID für Zuordnungen. Ein Zuordnungsname ist der Teil der Ressourcen-ID, der nach dem Element
/association/
angezeigt wird.Ersetzen Sie alle Schrägstriche (/) im Namen der Verknüpfung durch
%2F
, damit der Befehlterraform import
den Namen der Verknüpfung als einzelne Einheit interpretiert. Die folgende Tabelle enthält Beispiele für Ressourcen-ID und Import-ID für Zuordnungen.Ressourcen-ID Import-ID "locations/global/securityPolicies/12345/association/assoc-name"
12345/assoc-name
"locations/global/securityPolicies/12345/association/locations/global/securityPolicies/23456-folders/56789"
12345/locations%2Fglobal%2FsecurityPolicies%2F23456-folders%2F56789
Die Richtliniennummer zusammen mit der Prioritätsnummer der Regel stellt die Import-ID für Regeln dar. In der folgenden Tabelle sehen Sie ein Beispiel für eine Ressourcen-ID und eine Import-ID für eine Regel.
Ressourcen-ID Import-ID "locations/global/securityPolicies/12345/priority/1000"
12345/1000
Wenn Sie die firewallPolicies
-Ressourcen importieren möchten, benötigen Sie die aktualisierten Ressourcennamen der Instanzen. Generieren Sie die Namen der Ressourceninstanzen, indem Sie das Präfix google_compute_organization_security_policy
durch google_compute_firewall_policy
ersetzen. Das gilt für alle Ressourcen, die Sie im Abschnitt Zu migrierende Ressourcen identifizieren identifiziert haben. Die folgende Liste enthält ein Beispiel für die aktualisierten Namen von Ressourceninstanzen:
google_compute_firewall_policy.policy google_compute_firewall_policy_association.association["folders/45678"] google_compute_firewall_policy_rule.rule["allow-inbound-ssh"] google_compute_firewall_policy_rule.rule["deny-all-egress"]
Kombinieren Sie die Namen der Ressourceninstanzen mit den zugehörigen Import-IDs, um die terraform import
-Befehle zu erhalten. Die folgende Liste enthält ein Beispiel für die terraform import
-Befehle:
terraform import 'google_compute_firewall_policy.policy' '12345' terraform import 'google_compute_firewall_policy_association.association["folders/23456"]' '12345/locations%2Fglobal%2FsecurityPolicies%2F23456-folders%2F56789' terraform import 'google_compute_firewall_policy_rule.rule["allow-inbound-ssh"]' '12345/1000' terraform import 'google_compute_firewall_policy_rule.rule["deny-all-egress"]' '12345/65535'
Speichern Sie diese Importbefehle zur späteren Verwendung.
Terraform-Zustand sichern
Bevor Sie mit der Migration fortfahren, empfehlen wir Ihnen, eine Sicherung des Terraform-Zustands zu erstellen. Verwenden Sie den folgenden Terraform-Befehl, um ein Backup in der Datei terraform.tfstate.backup
zu erstellen.
terraform state pull > terraform.tfstate.backup
Wenn Sie den Terraform-Zustand unbeabsichtigt ändern, können Sie die Sicherungsdatei terraform.tfstate.backup
verwenden, um den ursprünglichen Terraform-Zustand mit dem folgenden Befehl wiederherzustellen:
terraform state push terraform.tfstate.backup
organizationSecurityPolicies
-Ressourcen migrieren
In diesem Abschnitt wird beschrieben, wie Sie Ihre Terraform-Konfigurationen von organizationSecurityPolicies
-Methoden zu firewallPolicies
-Methoden migrieren.
Vorhandene Ressourcen aus dem Terraform-Zustand entfernen
Führen Sie den folgenden Terraform-Befehl aus, um die organizationSecurityPolicies
-Ressourcen, die im Abschnitt Ressourcen für die Migration identifizieren gefunden wurden, aus dem Terraform-Zustand zu entfernen.
terraform state list | grep ^google_compute_organization_security_policy | while read -r resource; do terraform state rm "$resource" done
Terraform-Konfiguration aktualisieren
Suchen Sie in Ihrer Terraform-Konfigurationsdatei nach den Definitionen der Ressourcen, die Sie im Abschnitt Zu migrierende Ressourcen identifizieren gefunden haben. Verwenden Sie den folgenden Befehl, um die Definitionen zu finden.
grep -r google_compute_organization_security_policy .
In der Terraform-Konfigurationsdatei wird die Richtlinie google_compute_organization_security_policy.policy
beispielsweise so definiert:
resource "google_compute_organization_security_policy" "policy" { … }
Verwenden Sie die folgende Tabelle, um die Definition einer Organisationssicherheitsrichtlinienressource zu bearbeiten und eine neue hierarchische Firewallrichtlinienressource zu erstellen.
Vorhandene Terraform-Ressource | Neue Terraform-Ressource | |
---|---|---|
Ressourcenname | google_compute_organization_security_policy | google_compute_firewall_policy |
Name des Felds in der Richtlinie | display_name |
short_name |
Verwenden Sie die folgende Tabelle, um die Definition einer Ressource für die Zuordnung von Organisationssicherheitsrichtlinien zu bearbeiten und eine neue Ressource für die Zuordnung von hierarchischen Firewallrichtlinien zu erstellen.
Vorhandene Terraform-Ressource | Neue Terraform-Ressource | |
---|---|---|
Ressourcenname | google_compute_organization_security_policy_association | google_compute_firewall_policy_association |
Name des Felds in der Zuordnung | policy_id |
firewall_policy |
Name des Felds in der Zuordnung | attachment_id |
attachment_target |
Verwenden Sie die folgende Tabelle, um die Definition einer Ressource für eine Regel für die Sicherheit von Organisationen zu bearbeiten und eine neue Ressource für eine Regel für hierarchische Firewallrichtlinien zu erstellen.
Vorhandene Terraform-Ressource | Neue Terraform-Ressource | |
---|---|---|
Ressourcenname | google_compute_organization_security_policy_rule | google_compute_firewall_policy_rule |
Name des Felds in der Regel | policy_id (ID der Sicherheitsrichtlinie) |
firewall_policy |
Name des Felds, das aus der Regel entfernt wurde | versioned_expr |
— (Feld nicht vorhanden) |
Definition des match -Objekts:
Entfernen Sie die config -Einstellung und ändern Sie layer4_config in layer4_configs . |
match { config { src_ip_ranges = SRC_IP_RANGES dest_ip_ranges = DEST_IP_RANGES layer4_config { ip_protocol = IP_PROTOCOL ports = [PORT1, PORT2] } layer4_config { ip_protocol = IP_PROTOCOL } } } |
match { src_ip_ranges = SRC_IP_RANGES dest_ip_ranges = DEST_IP_RANGES layer4_configs { ip_protocol = IP_PROTOCOL ports = [PORT1, PORT2] } layer4_configs { ip_protocol = IP_PROTOCOL } } |
Name des Felds in der Regel | layer4_config |
layer4_configs |
Mit dem folgenden Terraform-Befehl können Sie prüfen, ob die geänderte Terraform-Konfiguration gültig ist:
terraform validate
Ressourcen in den Terraform-Zustand importieren
Wenn Sie firewallPolicies
-Ressourcen in Ihre Terraform-Konfigurationsdatei importieren möchten, führen Sie die Terraform-Importbefehle aus, die Sie im Abschnitt Importbefehle mit einem automatisierten Skript vorbereiten oder Importbefehle manuell vorbereiten generiert haben.
Nachdem Sie die firewallPolicies
-Ressourcen importiert haben, greift Terraform über die firewallPolicies-Methoden darauf zu.
Terraform-Konfiguration prüfen und Abweichungen beheben
Führen Sie den folgenden Terraform-Befehl aus, um nach Aktionen zu suchen.
terraform plan
Da bei der Migration keine zugrunde liegenden Google Cloud Ressourcen geändert werden, darf der von Terraform erstellte Plan keine Aktionen enthalten.
In der folgenden Ausgabe, die durch Ausführen des Befehls terraform plan
abgerufen wurde, geben die Terraform-Aktionen beispielsweise an, dass name
in der Ressource google_compute_firewall_policy_association
aktualisiert werden muss.
Terraform will perform the following actions: # google_compute_firewall_policy_association.association["folders/23456"] must be replaced -/+ resource "google_compute_firewall_policy_association" "association" { ~ firewall_policy = "12345" -> "locations/global/firewallPolicies/12345" ~ id = "locations/global/firewallPolicies/12345/associations/locations%2Fglobal%2FsecurityPolicies%2F12345-folders%2F23456" -> (known after apply) ~ name = "locations/global/securityPolicies/12345-folders/23456" -> "locations/global/firewallPolicies/12345-folders/23456" # forces replacement + short_name = (known after apply) # (1 unchanged attribute hidden) }
In diesem Fall müssen Sie die Terraform-Konfigurationsdatei prüfen und aktualisieren, damit das Attribut name
mit dem Namen übereinstimmt, der bereits installiert ist.
Sie können Terraform so konfigurieren, dass der erwartete name
in der Ressource google_compute_firewall_policy_association
in den ursprünglichen Wert locations/global/securityPolicies/12345-folders/23456
geändert wird. Dazu ersetzen Sie das Feld name
in der Konfiguration so:
name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"
Bei der vorherigen Änderung wird die Funktion „Ersetzen“ verwendet, um den Wert von local.policy_id
in securityPolicies
anstelle von firewallPolicies
zu ändern. Da Terraform jetzt locations/global/securityPolicies/12345-folders/23456
für das Attribut name
erwartet, wird bei der Ausführung von terraform plan
keine Terraform-Aktion mehr im Zusammenhang mit dem Attribut name
angezeigt.
Wenn der Befehl terraform plan
keine Änderungen oder Terraform-Aktionen angibt, ist die Migration abgeschlossen.