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, um anstelle von
organizationSecurityPolicies
Methoden
firewallPoliciesMethoden zu verwenden.
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 können Sie mehrere Firewallregeln gruppieren, mit denen Verbindungen explizit abgelehnt oder zugelassen werden können. Weitere Informationen zu Firewallrichtlinien finden Sie unter Firewallrichtlinien und -regeln.
Vorteile der Migration zu firewallPolicies-Methoden
Die firewallPolicies-Methoden bieten eine konsistente Firewall in der gesamten
Cloud de Confiance Ressourcenhierarchie und mehrere betriebliche Vorteile.
Verbesserte Sicherheit der Organisation: Die
firewallPoliciesMethoden wenden die Sicherheit der Organisation mithilfe erweiterter Berechtigungssteuerungen für Identity and Access Management (IAM) an.Einfachere Abläufe: Die
firewallPolicies-Methoden unterstützen die Verwendung erweiterter Funktionen wie FQDN-Objekte (voll qualifizierter Domainname), Standortobjekte, Bedrohungserkennung, Einbruchsprävention und Adressgruppen, um den Betrieb zu vereinfachen und die Effizienz zu steigern.
Funktionsweise der Migration
Bevor Sie mit der Migration beginnen, müssen Sie die folgenden Schritte ausführen, die im Abschnitt Vorbereitung beschrieben sind:
- Prüfen Sie, ob Sie Version 6.16.0 oder höher des Terraform-Anbieters für Cloud de Confianceverwenden.
- Prüfen Sie, ob der Terraform-Zustand mit der aktuellen Konfiguration übereinstimmt.
- Identifizieren Sie Ressourcen, die in den Umfang der Migration fallen, einschließlich Richtlinien, Regeln und Zuordnungen.
- Bereiten Sie Befehle vor, um die neuen
firewallPolicies-Ressourcen manuell oder mit einem automatisierten Skript in den Terraform-Zustand zu importieren. - Lesen Sie die empfohlenen Sicherungs- und Wiederherstellungsverfahren für Ihre Terraform-Version und erstellen Sie eine Sicherung Ihres aktuellen Terraform-Zustands.
Die Neukonfiguration von Terraform zur Migration der organizationSecurityPolicies-Ressourcen umfasst die folgenden Schritte:
Entfernen Sie vorhandene Ressourcen aus dem Terraform-Zustand. Entfernen Sie vorhandene
organizationSecurityPolicies-Ressourcen aus dem Terraform-Zustand.Aktualisieren Sie die Terraform-Konfiguration. Bearbeiten Sie die Terraform-Konfigurationsdateien, um den vorhandenen Ressourcentyp, die Namen und Attribute durch den neuen Ressourcentyp, die Namen und Attribute zu ersetzen.
Importieren Sie neue Ressourcen in den Terraform-Zustand. Importieren Sie die neuen
firewallPolicies-Ressourcen in den Terraform-Zustand.
Vorbereitung
In diesem Abschnitt werden die Voraussetzungen für die Migration erläutert.
Prüfen, ob der Terraform-Anbieter unterstützt wird
Wir empfehlen, für die Migration Version 6.16.0 oder höher des Terraform-Bereitstellers für Cloud de Confiance zu verwenden. Bei früheren Versionen kann der Import in bestimmten Konfigurationen fehlschlagen, z. B. in Konfigurationen mit Schrägstrichen in den Zuordnungsnamen.
Nach der Migration müssen Sie Version 4.0.0 oder höher verwenden, die die folgenden Ressourcen aus der Terraform-Registrierung enthält:
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
Prüfen, ob der Terraform-Zustand aktuell ist
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 anzuwenden, bevor Sie mit der Migration fortfahren.
Ressourcen identifizieren, die migriert werden sollen
Führen Sie den folgenden Terraform-Befehl aus, um eine Liste der Ressourcen zu generieren, die in den Umfang der Migration 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 Skript 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:
- Generieren Sie neue Ressourcenadressen aus den vorhandenen Ressourcenadressen.
- Rufen Sie Ressourcenkennungen (oder Ressourcen-IDs) aus den vorhandenen Ressourcenadressen ab.
- Generieren Sie Importkennungen (oder Import-IDs) aus den Ressourcen-IDs.
- Zeigen Sie die Importbefehle für alle neuen
firewallPolicies-Ressourcen an.
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 Kennungen (IDs) der Ressourcen abrufen.
Der folgende Terraform-Befehl zeigt die Ressourcen-ID der google_compute_organization_security_policy.policy-Ressource an:
echo google_compute_organization_security_policy.policy.id | terraform console
Die Ausgabe sieht etwa so aus:
"locations/global/securityPolicies/12345"
Rufen Sie auf ähnliche Weise die Ressourcen-IDs für die anderen Ressourcen ab, 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 zusammen 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"
Um die firewallPolicies-Ressourcen zu importieren, benötigen Sie ihre Import-IDs. Import-IDs bestehen aus einer numerischen Kennung, einer Richtliniennummer, 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. In der folgenden Tabelle sehen Sie ein Beispiel für eine Ressourcen-ID und eine Import-ID für eine Richtlinie.
Ressourcen-ID Import-ID "locations/global/securityPolicies/12345"12345Die Richtliniennummer zusammen mit dem Zuordnungsnamen stellt die Import-ID für Zuordnungen dar. Ein Zuordnungsname ist der Teil der Ressourcen-ID, der nach dem Element
/association/angezeigt wird.Ersetzen Sie alle Schrägstriche (/) im Zuordnungsnamen durch
%2F, damit der Befehlterraform importden Zuordnungsnamen als eine einzelne Entität interpretieren kann. In der folgenden Tabelle sehen Sie Beispiele für Ressourcen-IDs und Import-IDs 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%2F56789Die Richtliniennummer zusammen mit der Regelprioritätsnummer 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
Um die firewallPolicies-Ressourcen zu importieren, benötigen Sie ihre aktualisierten Namen der Ressourceninstanzen. Generieren Sie die Namen der Ressourceninstanzen, indem Sie das Präfix
google_compute_organization_security_policy durch google_compute_firewall_policy
für alle Ressourcen, die Sie im Abschnitt Ressourcen identifizieren, die migriert werden sollen
identifiziert haben, ersetzen. Die folgende Liste zeigt ein Beispiel für die aktualisierten Namen der 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 zeigt 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 für später.
Terraform-Zustand sichern
Bevor Sie mit der Migration fortfahren, empfehlen wir, eine Sicherung des Terraform-Zustands zu erstellen. Verwenden Sie den folgenden Terraform-Befehl, um eine Sicherung in der Datei terraform.tfstate.backup zu erstellen.
terraform state pull > terraform.tfstate.backup
Wenn Sie den Terraform-Zustand unbeabsichtigt ändern, können Sie mit der Sicherungsdatei terraform.tfstate.backup den ursprünglichen Terraform-Zustand mit dem folgenden Befehl wiederherstellen:
terraform state push terraform.tfstate.backup
organizationSecurityPolicies-Ressourcen migrieren
In diesem Abschnitt wird die Migration Ihrer Terraform-Konfigurationen von organizationSecurityPolicies-Methoden zu firewallPolicies-Methoden beschrieben.
Vorhandene Ressourcen aus dem Terraform-Zustand entfernen
Führen Sie den folgenden Terraform-Befehl aus, um die organizationSecurityPolicies-Ressourcen, die Sie im
Abschnitt Ressourcen identifizieren, die migriert werden sollen gefunden haben, 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 der Terraform-Konfigurationsdatei nach den Definitionen der Ressourcen, die Sie im Abschnitt Ressourcen identifizieren, die migriert werden sollen 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 Sicherheitsrichtlinienressource der Organisation 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 Zuordnungsressource für die Sicherheitsrichtlinie der Organisation zu bearbeiten und eine neue Zuordnungsressource für die hierarchische Firewallrichtlinie 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 Regelressource für die Sicherheitsrichtlinie der Organisation zu bearbeiten und eine neue Regelressource für die hierarchische Firewallrichtlinie 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 aus der Regel entfernten Felds | versioned_expr |
– (Feld ist nicht vorhanden) |
Definition des match-Objekts:
Entfernen Sie das config-Set 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
Führen Sie die Terraform-Importbefehle aus, die Sie im Abschnitt Importbefehle mit einem automatisierten Skript vorbereiten oder Importbefehle manuell vorbereiten generiert haben, um firewallPolicies Ressourcen in die Terraform-Konfigurationsdatei zu importieren.
Nachdem Sie die firewallPolicies-Ressourcen importiert haben, greift Terraform mit
den 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 Cloud de Confiance 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 der 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 bereits installierten Namen übereinstimmt.
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, indem Sie das Feld name in der Konfiguration wie folgt ersetzen:
name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"
Bei der vorherigen Änderung wird die Funktion „replace“ 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, werden bei der Ausführung von terraform plan keine Terraform-Aktionen mehr im Zusammenhang mit dem Attribut name angezeigt.
Wenn der Befehl terraform plan keine Änderungen oder Terraform-Aktionen anzeigt, ist die Migration abgeschlossen.
Nächste Schritte
- Weitere Informationen zu firewallPolicies-Methoden.