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 omówiono sposób wykonywania następujących zadań:
- Wdrażanie standardowej usługi Azure Firewall z regułami klasycznymi przy użyciu narzędzia Terraform
- Importowanie reguł zapory do zasad zapory w warstwie 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.
Skonfiguruj narzędzie Terraform: jeśli jeszcze tego nie zrobiono, skonfiguruj program Terraform przy użyciu jednej z następujących opcji:
- Konfigurowanie narzędzia Terraform w usłudze Azure Cloud Shell przy użyciu powłoki Bash
- Konfigurowanie programu Terraform w usłudze Azure Cloud Shell przy użyciu programu PowerShell
- Konfigurowanie programu Terraform w systemie Windows przy użyciu powłoki Bash
- Konfigurowanie programu Terraform w systemie Windows przy użyciu programu PowerShell
2. Implementowanie kodu programu Terraform
Utwórz katalog, w którym chcesz przetestować przykładowy kod narzędzia Terraform i ustawić go jako bieżący katalog.
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", ] } }
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. To polecenie pobiera dostawcę platformy Azure wymaganego do zarządzania zasobami platformy 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 plan terraform, 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 akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach. - Opcjonalny
-out
parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru-out
gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.
5. Stosowanie planu wykonywania programu Terraform
Uruchom narzędzie terraform, aby zastosować plan wykonania do infrastruktury chmury.
terraform apply main.tfplan
Kluczowe punkty:
- Przykładowe
terraform apply
polecenie zakłada, że wcześniej uruchomionoterraform plan -out main.tfplan
polecenie . - Jeśli określono inną nazwę pliku parametru
-out
, użyj tej samej nazwy pliku w wywołaniu metodyterraform apply
. - Jeśli parametr nie został użyty, wywołaj metodę
-out
terraform apply
bez żadnych parametrów.
6. Importowanie reguł zapory do zasad premium
Teraz masz standardową zaporę z regułami klasycznymi. Następnie utwórz zasady zapory w warstwie Premium i zaimportuj reguły z zapory.
- W witrynie Azure Portal wybierz pozycję Utwórz zasób.
- Wyszukaj zasady zapory i wybierz je.
- Wybierz pozycję Utwórz.
- W obszarze Grupa zasobów wybierz pozycję test-resources .
- W polu Nazwa wpisz prem-pol.
- W obszarze Region wybierz pozycję Wschodnie stany USA.
- W obszarze Warstwa zasad wybierz pozycję Premium.
- Wybierz pozycję Dalej: Ustawienia DNS i kontynuuj do momentu uzyskania dostępu do strony Reguły.
- Na stronie Reguły wybierz pozycję Importuj reguły z usługi Azure Firewall.
- Wybierz pozycję testfirewall, a następnie wybierz pozycję Importuj.
- Wybierz pozycję Przejrzyj i utwórz.
- 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:
Dodaj następującą sekcję "dane":
data "azurerm_firewall_policy" "prem-pol" { name = "prem-pol" resource_group_name = azurerm_resource_group.rg.name }
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 } }
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
terraform plan -out main.tfplan
terraform apply main.tfplan
9. Sprawdź wyniki
- Wybierz grupę zasobów test-resources .
- Wybierz zasób testfirewall.
- Sprawdź, czy jednostka SKU zapory to Premium.
- Sprawdź, czy zapora korzysta z zasad zapory prem-pol .
10. Czyszczenie zasobów
Jeśli zasoby utworzone za pomocą narzędzia Terraform nie są już potrzebne, wykonaj następujące czynności:
Uruchom plan terraform i określ 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 akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach. - Opcjonalny
-out
parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru-out
gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.
- Polecenie
Uruchom narzędzie terraform zastosuj, aby zastosować 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