Memigrasikan Azure Firewall Standard ke Premium menggunakan Terraform

Terraform memungkinkan definisi, pratinjau, dan penyebaran infrastruktur cloud. Menggunakan Terraform, Anda membuat file konfigurasi menggunakan sintaksis HCL. Sintaksis HCL memungkinkan Anda untuk menentukan penyedia cloud - seperti Azure - dan elemen yang membentuk infrastruktur cloud Anda. Setelah membuat file konfigurasi, Anda membuat rencana eksekusi yang memungkinkan Anda untuk melihat pratinjau perubahan infrastruktur Anda sebelum disebarkan. Setelah memverifikasi perubahan, Anda menerapkan rencana eksekusi untuk menyebarkan infrastruktur. Untuk informasi selengkapnya tentang menggunakan Terraform di Azure, lihat pusat pengembang Azure Terraform

Jika Anda menggunakan Terraform untuk menyebarkan Azure Firewall standar dengan aturan klasik, Anda dapat memodifikasi file konfigurasi Terraform untuk memigrasikan firewall ke Azure Firewall Premium menggunakan kebijakan firewall Premium.

Dalam artikel ini, Anda akan mempelajari cara:

  • Menyebarkan Azure Firewall standar dengan aturan klasik menggunakan Terraform
  • Impor aturan firewall ke kebijakan firewall premium
  • Edit file konfigurasi Terraform untuk memigrasikan firewall

1. Mengonfigurasi lingkungan Anda

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.

2. Implementasikan kode Terraform

  1. Buat direktori untuk menguji dan menjalankan kode Terraform sampel dan menjadikannya direktori saat ini.

  2. Buat file bernama main.tf dan masukkan kode berikut:

    terraform {
    
      required_version = ">=0.12"
      
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = ">=2.46.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    resource "azurerm_resource_group" "rg" {
      name     = "test-resources"
      location = var.resource_group_location
    }
    
    resource "azurerm_virtual_network" "vnet" {
      name                = "testvnet"
      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                = "testpip"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      allocation_method   = "Static"
      sku                 = "Standard"
    }
    
    resource "azurerm_firewall" "fw" {
      name                = "testfirewall"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
    
      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                = "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",
        ]
      }
    }
    
  3. Buat file bernama variables.tf dan masukkan kode berikut:

    variable "resource_group_location" {
      default = "eastus"
    }
    

3. Menginisialisasi Terraform

Jalankan terraform init untuk menginisialisasi penyebaran Terraform. Perintah ini mengunduh modul Azure yang diperlukan untuk mengelola sumber daya Azure Anda.

terraform init

4. Membuat rencana eksekusi Terraform

Jalankan terraform plan untuk membuat rencana eksekusi.

terraform plan -out main.tfplan

Poin-poin penting:

  • Perintah terraform plan membuat rencana eksekusi tetapi tidak menjalankannya. Perintah ini justru menentukan tindakan yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda memastikan apakah rencana eksekusi telah sesuai dengan ekspektasi Anda sebelum membuat perubahan pada sumber daya aktual.
  • Parameter -out opsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter -out memastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
  • Untuk membaca selengkapnya rencana eksekusi dan keamanan yang terus berlanjut, lihat bagian peringatan keamanan.

5. Menerapkan rencana eksekusi Terraform

Jalankan terraform apply untuk menerapkan rencana eksekusi ke infrastruktur cloud Anda.

terraform apply main.tfplan

Poin-poin penting:

  • Perintah terraform apply di atas mengasumsikan bahwa Anda telah menjalankan terraform plan -out main.tfplan sebelumnya.
  • Jika Anda menentukan nama file yang berbeda untuk parameter -out, gunakan nama file yang sama dalam panggilan ke terraform apply.
  • Jika Anda tidak menggunakan parameter -out, cukup memanggil terraform apply tanpa parameter apa pun.

6. Impor aturan firewall ke dalam kebijakan firewall premium

Kini Anda memiliki firewall standar dengan aturan klasik. Selanjutnya, buat Kebijakan Firewall premium dan impor aturan dari firewall.

  1. Di portal Microsoft Azure, pilih Buat sumber daya.
  2. Cari kebijakan firewall dan pilih.
  3. Pilih Buat.
  4. Untuk grup Sumber Daya pilih test-resource.
  5. Untuk Nama, ketik prem-pol.
  6. Untuk Wilayah, pilih US Timur.
  7. Untuk tingkat Kebijakan, pilih Premium.
  8. Pilih Selanjutnya: Pengaturan DNS, dan lanjutkan hingga Anda mencapai halaman Aturan.
  9. Di halaman Aturan, pilih Impor aturan dari Azure Firewall.
  10. Pilih testfirewall, kemudian pilih Impor.
  11. Pilih Tinjau + buat.
  12. Pilih Buat.

7. Edit file konfigurasi Terraform untuk memigrasikan firewall

Buka file main.tf, dan buat perubahan berikut:

  1. Tambahkan bagian 'data' berikut:

    data "azurerm_firewall_policy" "prem-pol" {
      name                 = "prem-pol"
      resource_group_name  = azurerm_resource_group.rg.name
    }
    
  2. Modifikasi sumber daya firewall:

     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. Hapus koleksi aturan klasik:

    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. Terapkan rencana eksekusi Terraform

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

9. Verifikasi hasil

  1. Pilih grup sumber daya test-resource.
  2. Pilih sumber daya testfirewall.
  3. Verifikasi bahwa sku firewall adalah Premium.
  4. Verifikasi bahwa firewall menggunakan kebijakan firewall prem-pol. Azure Firewall Premium with a Premium policy.

10. Membersihkan sumber daya

Ketika Anda tidak lagi membutuhkan sumber daya yang dibuat melalui Terraform, lakukan langkah-langkah berikut:

  1. Jalankan terraform plan dan tentukan bendera destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Poin-poin penting:

    • Perintah terraform plan membuat rencana eksekusi tetapi tidak menjalankannya. Perintah ini justru menentukan tindakan yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda memastikan apakah rencana eksekusi telah sesuai dengan ekspektasi Anda sebelum membuat perubahan pada sumber daya aktual.
    • Parameter -out opsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter -out memastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
    • Untuk membaca selengkapnya rencana eksekusi dan keamanan yang terus berlanjut, lihat bagian peringatan keamanan.
  2. Jalankan terraform apply untuk menerapkan rencana eksekusi.

    terraform apply main.destroy.tfplan
    

Memecahkan masalah Terraform pada Azure

Memecahkan masalah umum saat menggunakan Terraform di Azure

Langkah berikutnya