Terraform-Ressourcen von organizationSecurityPolicies zu firewallPolicies migrieren

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:

  1. Vorhandene Ressourcen aus dem Terraform-Zustand entfernen Entfernen Sie vorhandene organizationSecurityPolicies-Ressourcen aus dem Terraform-Zustand.

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

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

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 Befehl terraform 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.

Nächste Schritte