Azure Firewall Standard migreren naar Premium met behulp van Terraform

Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Behulp van Terraform maakt u configuratiebestanden met behulp van de HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.

Als u Terraform gebruikt om standaard Azure Firewall te implementeren met klassieke regels, kunt u uw Terraform-configuratiebestand wijzigen om uw firewall te migreren naar Azure Firewall Premium met behulp van een Premium-firewallbeleid.

In dit artikel leert u het volgende:

  • Een standaard Azure Firewall implementeren met klassieke regels met behulp van Terraform
  • De firewallregels importeren in een Premium-firewallbeleid
  • Het Terraform-configuratiebestand bewerken om de firewall te migreren

1. Uw omgeving configureren

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

2. De Terraform-code implementeren

  1. Maak een map waarin u de Terraform-voorbeeldcode wilt testen en de huidige map kunt maken.

  2. Maak een bestand met de naam main.tf en voeg de volgende code in:

    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",
        ]
      }
    }
    
    resource "random_pet" "prefix" {
      prefix = var.prefix
      length = 1
    }
    
  3. Maak een bestand met de naam variables.tf en voeg de volgende code in:

    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. Terraform initialiseren

Voer terraform init uit om de Terraform-implementatie te initialiseren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van uw Azure-resources.

terraform init -upgrade

Belangrijkste punten:

  • Met -upgrade de parameter worden de benodigde providerinvoegtoepassingen bijgewerkt naar de nieuwste versie die voldoet aan de versiebeperkingen van de configuratie.

4. Een Terraform-uitvoeringsplan maken

Voer terraform-plan uit om een uitvoeringsplan te maken.

terraform plan -out main.tfplan

Belangrijkste punten:

  • De terraform plan opdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources.
  • Met de optionele -out parameter kunt u een uitvoerbestand voor het plan opgeven. Door de -out parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.

5. Een Terraform-uitvoeringsplan toepassen

Terraform uitvoeren is van toepassing om het uitvoeringsplan toe te passen op uw cloudinfrastructuur.

terraform apply main.tfplan

Belangrijkste punten:

  • Bij de voorbeeldopdracht terraform apply wordt ervan uitgegaan dat u eerder hebt uitgevoerd terraform plan -out main.tfplan.
  • Als u een andere bestandsnaam voor de -out parameter hebt opgegeven, gebruikt u diezelfde bestandsnaam in de aanroep naar terraform apply.
  • Als u de parameter niet hebt gebruikt, roept terraform apply u deze -out aan zonder parameters.

6. Importeer de firewallregels in een Premium-beleid

U hebt nu een standaardfirewall met klassieke regels. Maak vervolgens een Premium Firewall-beleid en importeer de regels uit de firewall.

  1. Selecteer Een resource maken in de Azure-portal.
  2. Zoek naar firewallbeleid en selecteer het.
  3. Selecteer Maken.
  4. Selecteer testresources voor resourcegroep.
  5. Bij Naam typt u prem-pol.
  6. Selecteer bij Regio VS - oost.
  7. Selecteer Premium voor de beleidslaag.
  8. Selecteer Volgende: DNS-Instellingen en ga door totdat u bij de pagina Regels bent.
  9. Selecteer op de pagina Regels de optie Regels importeren vanuit een Azure Firewall.
  10. Selecteer testfirewall en selecteer Vervolgens Importeren.
  11. Selecteer Controleren + maken.
  12. Selecteer Maken.

7. Bewerk het Terraform-configuratiebestand om de firewall te migreren

Open het main.tf bestand en breng de volgende wijzigingen aan:

  1. Voeg de volgende sectie 'gegevens' toe:

    data "azurerm_firewall_policy" "prem-pol" {
      name                 = "prem-pol"
      resource_group_name  = azurerm_resource_group.rg.name
    }
    
  2. Wijzig de firewallresource:

     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. Verwijder de klassieke regelverzamelingen:

    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. Pas het gewijzigde Terraform-uitvoeringsplan toe

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

9. Controleer de resultaten

  1. Selecteer de resourcegroep testresources .
  2. Selecteer de testfirewall-resource .
  3. Controleer of de firewall-sku Premium is.
  4. Controleer of de firewall gebruikmaakt van het prem-pol-firewallbeleid . Azure Firewall Premium met een Premium-beleid.

10. Resources opschonen

Voer de volgende stappen uit wanneer u de resources die zijn gemaakt via Terraform niet meer nodig hebt:

  1. Voer terraform-plan uit en geef de destroy vlag op.

    terraform plan -destroy -out main.destroy.tfplan
    

    Belangrijkste punten:

    • De terraform plan opdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources.
    • Met de optionele -out parameter kunt u een uitvoerbestand voor het plan opgeven. Door de -out parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.
  2. Terraform uitvoeren is van toepassing om het uitvoeringsplan toe te passen.

    terraform apply main.destroy.tfplan
    

Problemen met Terraform in Azure oplossen

Veelvoorkomende problemen oplossen bij het gebruik van Terraform in Azure

Volgende stappen