Freigeben über


Migrieren von Azure Firewall Standard zu Premium mithilfe von Terraform

Terraform ermöglicht die Definition, Vorschau und Bereitstellung der Cloudinfrastruktur. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter ( z. B. Azure ) und die Elemente angeben, aus denen Ihre Cloudinfrastruktur besteht. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nachdem Sie die Änderungen überprüft haben, wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.

Wenn Sie Terraform verwenden, um die Standardmäßige Azure Firewall mit klassischen Regeln bereitzustellen, können Sie Ihre Terraform-Konfigurationsdatei ändern, um Ihre Firewall mithilfe einer Premium-Firewallrichtlinie zu Azure Firewall Premium zu migrieren.

In diesem Artikel erfahren Sie, wie Sie:

  • Bereitstellen einer Standardmäßigen Azure Firewall mit klassischen Regeln mithilfe von Terraform
  • Importieren der Firewallregeln in eine Premium-Firewallrichtlinie
  • Bearbeiten der Terraform-Konfigurationsdatei zum Migrieren der Firewall

1. Konfigurieren Ihrer Umgebung

  • Azure-Abonnement: Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.

2. Implementieren des Terraform-Codes

  1. Erstellen Sie ein Verzeichnis, in dem der Terraform-Beispielcode getestet werden soll, und legen Sie es als aktuelles Verzeichnis fest.

  2. Erstellen Sie eine Datei namens main.tf, und fügen Sie den folgenden Code ein:

    resource "random_pet" "prefix" {
      prefix = var.prefix
      length = 1
    }
    resource "azurerm_resource_group" "rg" {
      name     = "${random_pet.prefix.id}-rg"
      location = var.resource_group_location
    }
    
    resource "azurerm_virtual_network" "vnet" {
      name                = "${random_pet.prefix.id}-vnet"
      address_space       = ["10.0.0.0/16"]
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
    }
    
    resource "azurerm_subnet" "subnet" {
      name                 = "AzureFirewallSubnet"
      resource_group_name  = azurerm_resource_group.rg.name
      virtual_network_name = azurerm_virtual_network.vnet.name
      address_prefixes     = ["10.0.1.0/24"]
    }
    
    resource "azurerm_public_ip" "pip" {
      name                = "${random_pet.prefix.id}-pip"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      allocation_method   = "Static"
      sku                 = "Standard"
    }
    
    resource "azurerm_firewall" "main" {
      name                = "${random_pet.prefix.id}-fw"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      sku_name            = "AZFW_VNet"
      sku_tier            = "Standard"
    
      ip_configuration {
        name                 = "configuration"
        subnet_id            = azurerm_subnet.subnet.id
        public_ip_address_id = azurerm_public_ip.pip.id
      }
    }
    
    resource "azurerm_firewall_application_rule_collection" "app-rc" {
      name                = "${random_pet.prefix.id}-app-rc"
      azure_firewall_name = azurerm_firewall.main.name
      resource_group_name = azurerm_resource_group.rg.name
      priority            = 100
      action              = "Allow"
    
      rule {
        name = "testrule"
    
        source_addresses = [
          "10.0.0.0/16",
        ]
    
        target_fqdns = [
          "*.google.com",
        ]
    
        protocol {
          port = "443"
          type = "Https"
        }
      }
    }
    
    resource "azurerm_firewall_network_rule_collection" "net-rc" {
      name                = "${random_pet.prefix.id}-net-rc"
      azure_firewall_name = azurerm_firewall.main.name
      resource_group_name = azurerm_resource_group.rg.name
      priority            = 100
      action              = "Allow"
    
      rule {
        name = "dnsrule"
    
        source_addresses = [
          "10.0.0.0/16",
        ]
    
        destination_ports = [
          "53",
        ]
    
        destination_addresses = [
          "8.8.8.8",
          "8.8.4.4",
        ]
    
        protocols = [
          "TCP",
          "UDP",
        ]
      }
    }
    
  3. Erstellen Sie eine Datei namens variables.tf, und fügen Sie den folgenden Code ein:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "prefix" {
      type        = string
      default     = "firewall-standard"
      description = "Prefix of the resource name"
    }
    

3. Initialisieren von Terraform

Führen Sie terraform init aus, um die Terraform-Bereitstellung zu initialisieren. Dieser Befehl lädt den Azure-Anbieter herunter, der zum Verwalten Ihrer Azure-Ressourcen erforderlich ist.

terraform init -upgrade

Die wichtigsten Punkte:

  • Der Parameter -upgrade aktualisiert die erforderlichen Anbieter-Plug-Ins auf die neueste Version, die den Versionseinschränkungen der Konfiguration entspricht.

4. Erstellen eines Terraform-Ausführungsplans

Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.

terraform plan -out main.tfplan

Die wichtigsten Punkte:

  • Der Befehl terraform plan erstellt einen Ausführungsplan, führt ihn aber nicht aus. Stattdessen wird bestimmt, welche Aktionen erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an tatsächlichen Ressourcen vornehmen.
  • Mit dem optionalen -out-Parameter können Sie eine Ausgabedatei für den Plan angeben. Durch die Verwendung des Parameters -out wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.

5. Anwenden eines Terraform-Ausführungsplans

Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.

terraform apply main.tfplan

Die wichtigsten Punkte:

  • Der Beispielbefehl terraform apply setzt voraus, dass Sie zuvor terraform plan -out main.tfplan ausgeführt haben.
  • Wenn Sie einen anderen Dateinamen für den Parameter -out angegeben haben, verwenden Sie denselben Dateinamen im Aufruf von terraform apply.
  • Wenn Sie den Parameter -out nicht verwendet haben, rufen Sie terraform apply ohne Parameter auf.

6. Importieren der Firewallregeln in eine Premiumrichtlinie

Jetzt haben Sie eine Standardfirewall mit klassischen Regeln. Erstellen Sie als Nächstes eine Premium-Firewallrichtlinie, und importieren Sie die Regeln aus der Firewall.

  1. Klicken Sie im Azure-Portal auf Ressource erstellen.
  2. Suchen Sie nach Firewallrichtlinien , und wählen Sie sie aus.
  3. Wählen Sie "Erstellen" aus.
  4. Wählen Sie für die Ressourcengruppe Testressourcen aus.
  5. Geben Sie "Prem-pol" für "Name" ein.
  6. Wählen Sie USA, Osten als Region aus.
  7. Wählen Sie für die Richtlinienebene "Premium" aus.
  8. Wählen Sie "Weiter" aus: DNS-Einstellungen, und fahren Sie fort, bis Sie die Seite "Regeln" erreicht haben.
  9. Wählen Sie auf der Seite "Regeln" die Option "Regeln importieren" aus einer Azure-Firewall aus.
  10. Wählen Sie "testfirewall" und dann " Importieren" aus.
  11. Klicken Sie auf Überprüfen + erstellen.
  12. Wählen Sie "Erstellen" aus.

7. Bearbeiten Sie die Terraform-Konfigurationsdatei, um die Firewall zu migrieren.

Öffnen Sie die main.tf Datei, und nehmen Sie die folgenden Änderungen vor:

  1. Fügen Sie den folgenden Abschnitt "Daten" hinzu:

    data "azurerm_firewall_policy" "prem-pol" {
      name                 = "prem-pol"
      resource_group_name  = azurerm_resource_group.rg.name
    }
    
  2. Ändern Sie die Firewallressource:

     resource "azurerm_firewall" "fw" {
         name                = "testfirewall"
         location            = azurerm_resource_group.rg.location
         resource_group_name = azurerm_resource_group.rg.name
         firewall_policy_id  = data.azurerm_firewall_policy.prem-pol.id
         sku_tier            = "Premium"
    
     ip_configuration {
         name                 = "configuration"
         subnet_id            = azurerm_subnet.subnet.id
         public_ip_address_id = azurerm_public_ip.pip.id
     }
    }
    
  3. Löschen der klassischen Regelsammlungen:

    resource "azurerm_firewall_application_rule_collection" "app-rc" {
      name                = "apptestcollection"
      azure_firewall_name = azurerm_firewall.fw.name
      resource_group_name = azurerm_resource_group.rg.name
      priority            = 100
      action              = "Allow"
    
      rule {
        name = "testrule"
    
        source_addresses = [
          "10.0.0.0/16",
        ]
    
        target_fqdns = [
          "*.google.com",
        ]
    
        protocol {
          port = "443"
          type = "Https"
        }
      }
    }
    
    resource "azurerm_firewall_network_rule_collection" "net-rc" {
      name                = "nettestcollection"
      azure_firewall_name = azurerm_firewall.fw.name
      resource_group_name = azurerm_resource_group.rg.name
      priority            = 100
      action              = "Allow"
    
      rule {
        name = "dnsrule"
    
        source_addresses = [
          "10.0.0.0/16",
        ]
    
        destination_ports = [
          "53",
        ]
    
        destination_addresses = [
          "8.8.8.8",
          "8.8.4.4",
        ]
    
        protocols = [
          "TCP",
          "UDP",
        ]
      }
    }
    

8. Anwenden des geänderten Terraform-Ausführungsplans

  1. terraform plan -out main.tfplan
  2. terraform apply main.tfplan

9. Überprüfen der Ergebnisse

  1. Wählen Sie die Ressourcengruppe "Testressourcen " aus.
  2. Wählen Sie die Testfirewall-Ressource aus.
  3. Überprüfen Sie, ob die Firewall-Sku Premium ist.
  4. Überprüfen Sie, ob die Firewall die Firewallrichtlinie prem-pol verwendet. Azure Firewall Premium mit einer Premium-Richtlinie.

10. Bereinigen von Ressourcen

Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie die folgenden Schritte aus:

  1. Führen Sie terraform plan aus, und geben Sie das Flag destroy an.

    terraform plan -destroy -out main.destroy.tfplan
    

    Die wichtigsten Punkte:

    • Der Befehl terraform plan erstellt einen Ausführungsplan, führt ihn aber nicht aus. Stattdessen wird bestimmt, welche Aktionen erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an tatsächlichen Ressourcen vornehmen.
    • Mit dem optionalen -out-Parameter können Sie eine Ausgabedatei für den Plan angeben. Durch die Verwendung des Parameters -out wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
  2. Führen Sie den Befehl terraform apply aus, um den Ausführungsplan anzuwenden.

    terraform apply main.destroy.tfplan
    

Problembehandlung von Terraform auf Azure

Behebung häufiger Probleme bei der Verwendung von Terraform in Azure

Nächste Schritte