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, 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 firewallPolicies Methoden 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:

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

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

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

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" 12345
  • Die 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 Befehl terraform import den 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%2F56789
  • Die 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