Udostępnij za pośrednictwem


Migrowanie usługi Azure Firewall w warstwie Standardowa do warstwy Premium przy użyciu narzędzia Terraform

Narzędzie Terraform umożliwia definiowanie, wyświetlanie wersji zapoznawczej i wdrażanie infrastruktury chmury. Za pomocą narzędzia Terraform tworzysz pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — oraz elementów tworzących infrastrukturę chmury. Po utworzeniu plików konfiguracji utworzysz plan wykonywania , który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian należy zastosować plan wykonywania w celu wdrożenia infrastruktury.

Jeśli używasz narzędzia Terraform do wdrażania standardowej usługi Azure Firewall z regułami klasycznymi, możesz zmodyfikować plik konfiguracji narzędzia Terraform, aby przeprowadzić migrację zapory do usługi Azure Firewall Premium przy użyciu zasad zapory Premium.

W tym artykule dowiesz się, jak:

  • Wdrażanie standardowej usługi Azure Firewall z regułami klasycznymi przy użyciu narzędzia Terraform
  • Zaimportuj reguły zapory do polityki zapory sieciowej Premium
  • Edytowanie pliku konfiguracji narzędzia Terraform w celu przeprowadzenia migracji zapory

1. Konfigurowanie środowiska

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto .

2. Implementowanie kodu programu Terraform

  1. Utwórz katalog, w którym chcesz przetestować przykładowy kod narzędzia Terraform i ustawić go jako bieżący katalog.

  2. Utwórz plik o nazwie main.tf i wstaw następujący kod:

    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. Utwórz plik o nazwie variables.tf i wstaw następujący kod:

    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. Inicjowanie programu Terraform

Uruchom narzędzie terraform init, aby zainicjować wdrożenie narzędzia Terraform. Polecenie to pobiera dostawcę Azure wymaganego do zarządzania zasobami Azure.

terraform init -upgrade

Kluczowe punkty:

  • Parametr -upgrade uaktualnia niezbędne wtyczki dostawcy do najnowszej wersji, która jest zgodna z ograniczeniami wersji konfiguracji.

4. Tworzenie planu wykonywania programu Terraform

Uruchom terraform plan, aby utworzyć plan wykonania.

terraform plan -out main.tfplan

Kluczowe punkty:

  • Polecenie terraform plan tworzy plan wykonania, ale nie wykonuje go. Zamiast tego, określa, jakie działania są niezbędne do stworzenia konfiguracji określonej w plikach konfiguracyjnych. Ten wzorzec pozwala Ci zweryfikować, czy plan wykonania spełnia Twoje oczekiwania, zanim wprowadzisz jakiekolwiek zmiany do rzeczywistych zasobów.
  • Opcjonalny parametr -out pozwala określić plik wyjściowy dla planu. Użycie parametru -out zapewnia, że plan, który przejrzałeś, zostanie dokładnie zastosowany.

5. Stosowanie planu wykonywania programu Terraform

Uruchom terraform apply, aby zastosować plan wykonania do swojej infrastruktury chmury.

terraform apply main.tfplan

Kluczowe punkty:

  • Przykładowe polecenie terraform apply zakłada, że wcześniej uruchomiono polecenie terraform plan -out main.tfplan.
  • Jeśli podałeś inną nazwę pliku dla parametru -out, użyj tej samej nazwy pliku w wywołaniu terraform apply.
  • Jeśli nie użyłeś parametru -out, wywołaj terraform apply bez żadnych parametrów.

6. Importowanie reguł zapory do zasad premium

Teraz masz standardową zaporę sieciową z klasycznymi regułami. Następnie utwórz zasady zapory Premium i zaimportuj reguły z zapory ogniowej.

  1. W witrynie Azure Portal wybierz pozycję Utwórz zasób.
  2. Wyszukaj politykę zapory i wybierz ją.
  3. Wybierz pozycję Utwórz.
  4. W obszarze Grupa zasobów wybierz pozycję test-resources .
  5. W polu Nazwa wpisz prem-pol.
  6. W obszarze Region wybierz pozycję Wschodnie stany USA.
  7. W poziomie zasad wybierz Premium.
  8. Wybierz pozycję Dalej: Ustawienia DNS i kontynuuj do momentu uzyskania dostępu do strony Reguły.
  9. Na stronie Reguły wybierz pozycję Importuj reguły z usługi Azure Firewall.
  10. Wybierz pozycję testfirewall, a następnie wybierz pozycję Importuj.
  11. Wybierz pozycję Sprawdź i utwórz.
  12. Wybierz pozycję Utwórz.

7. Edytowanie pliku konfiguracji narzędzia Terraform w celu przeprowadzenia migracji zapory

main.tf Otwórz plik i wprowadź następujące zmiany:

  1. Dodaj następującą sekcję "dane":

    data "azurerm_firewall_policy" "prem-pol" {
      name                 = "prem-pol"
      resource_group_name  = azurerm_resource_group.rg.name
    }
    
  2. Zmodyfikuj zasób zapory:

     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. Usuń kolekcje reguł klasycznych:

    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. Stosowanie zmodyfikowanego planu wykonywania programu Terraform

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

9. Sprawdź wyniki

  1. Wybierz grupę zasobów test resources.
  2. Wybierz zasób testfirewall .
  3. Sprawdź, czy kod SKU zapory to Premium.
  4. Sprawdź, czy zapora korzysta z polityki zapory prem-pol. Azure Firewall — wersja Premium z polityką Premium.

10. Czyszczenie zasobów

Jeśli zasoby utworzone za pomocą narzędzia Terraform nie są już potrzebne, wykonaj następujące czynności:

  1. Uruchom terraform plan i podaj flagę destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Kluczowe punkty:

    • Polecenie terraform plan tworzy plan wykonania, ale nie wykonuje go. Zamiast tego, określa, jakie działania są niezbędne do stworzenia konfiguracji określonej w plikach konfiguracyjnych. Ten wzorzec pozwala Ci zweryfikować, czy plan wykonania spełnia Twoje oczekiwania, zanim wprowadzisz jakiekolwiek zmiany do rzeczywistych zasobów.
    • Opcjonalny parametr -out pozwala określić plik wyjściowy dla planu. Użycie parametru -out zapewnia, że plan, który przejrzałeś, zostanie dokładnie zastosowany.
  2. Uruchom terraform apply, aby wprowadzić plan wykonania.

    terraform apply main.destroy.tfplan
    

Rozwiązywanie problemów z programem Terraform na platformie Azure

Rozwiązywanie typowych problemów podczas korzystania z narzędzia Terraform na platformie Azure

Dalsze kroki