Terraform을 사용하여 Azure Firewall Standard를 Premium으로 마이그레이션
Terraform은 클라우드 인프라의 정의, 미리 보기 및 배포를 사용합니다. Terraform을 사용하는 경우 HCL 구문를 사용하여 구성 파일을 만듭니다. HCL 구문을 사용하면 클라우드 공급자(예: Azure) 그리고 클라우드 인프라를 구성하는 요소를 지정할 수 있습니다. 구성 파일을 만든 후 배포되기 전에 인프라 변경을 미리 볼 수 있는 실행 계획를 만듭니다. 변경 내용을 확인 한 후에는 실행 계획을 적용하여 인프라를 배포합니다.
Terraform을 사용하여 클래식 규칙이 있는 표준 Azure Firewall을 배포하는 경우 Premium 방화벽 정책을 사용하여 방화벽을 Azure Firewall Premium으로 마이그레이션하도록 Terraform 구성 파일을 수정할 수 있습니다.
이 문서에서는 다음 방법을 설명합니다.
- Terraform을 사용하여 클래식 규칙으로 표준 Azure Firewall 배포
- 프리미엄 방화벽 정책으로 방화벽 규칙 가져오기
- Terraform 구성 파일을 편집하여 방화벽 마이그레이션
1. 환경 구성
- Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Terraform 구성: 아직 구성하지 않은 경우 다음 옵션 중 하나를 사용하여 Terraform을 구성합니다.
2. Terraform 코드 구현
샘플 Terraform 코드를 테스트할 디렉터리를 만들고, 이를 현재 디렉터리로 만듭니다.
main.tf
라는 파일을 만들고 다음 코드를 삽입합니다.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", ] } }
variables.tf
라는 파일을 만들고 다음 코드를 삽입합니다.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 초기화
terraform init를 실행하여 Terraform 배포를 초기화합니다. 이 명령은 Azure 리소스를 관리하는 데 필요한 Azure 공급자를 다운로드합니다.
terraform init -upgrade
주요 정보:
-upgrade
매개 변수는 필요한 공급자 플러그 인을 구성의 버전 제약 조건을 준수하는 최신 버전으로 업그레이드합니다.
4. Terraform 실행 계획 만들기
terraform plan을 실행하여 실행 계획을 만듭니다.
terraform plan -out main.tfplan
주요 정보:
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다.- 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
5. Terraform 실행 계획 적용
terraform apply를 실행하여 실행 계획을 클라우드 인프라에 적용합니다.
terraform apply main.tfplan
주요 정보:
- 예시
terraform apply
명령은 이전에terraform plan -out main.tfplan
를 실행했다고 가정합니다. -out
매개 변수에 다른 파일 이름을 지정한 경우terraform apply
에 대한 호출에서 동일한 파일 이름을 사용합니다.-out
매개 변수를 사용하지 않은 경우 매개 변수 없이terraform apply
를 호출합니다.
6. 방화벽 규칙을 프리미엄 정책으로 가져오기
이제 클래식 규칙이 있는 표준 방화벽이 있습니다. 다음으로 프리미엄 방화벽 정책을 만들고 방화벽에서 규칙을 가져옵니다.
- Azure Portal에서 리소스 만들기를 선택합니다.
- 방화벽 정책을 검색하고 선택합니다.
- 만들기를 실행합니다.
- 리소스 그룹의 경우 test-resources를 선택합니다.
- 이름에 prem-pol을 입력 합니다.
- 지역에 대해 미국 동부를 선택합니다.
- 정책 계층에 대해 프리미엄을 선택합니다.
- 다음: DNS 설정을 선택하고 규칙 페이지에 도달할 때까지 계속합니다.
- 규칙 페이지에서 Azure Firewall에서 규칙 가져오기를 선택합니다.
- testfirewall을 선택한 다음 가져오기를 선택합니다.
- 검토 + 만들기를 선택합니다.
- 만들기를 선택합니다.
7. Terraform 구성 파일을 편집하여 방화벽 마이그레이션
main.tf
파일을 열고 다음을 변경합니다.
다음 'data' 섹션을 추가합니다.
data "azurerm_firewall_policy" "prem-pol" { name = "prem-pol" resource_group_name = azurerm_resource_group.rg.name }
방화벽 리소스를 수정합니다.
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 } }
클래식 규칙 컬렉션을 삭제합니다.
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. 수정된 Terraform 실행 계획 적용
terraform plan -out main.tfplan
terraform apply main.tfplan
9. 결과 확인
- 테스트 리소스 리소스 그룹을 선택합니다.
- testfirewall 리소스를 선택합니다.
- 방화벽 sku가 프리미엄인지 확인합니다.
- 방화벽이 prem-pol 방화벽 정책을 사용하고 있는지 확인합니다.
10. 리소스 정리
Terraform을 통해 리소스를 만들 필요가 더 이상 없으면 다음 단계를 수행합니다.
terraform 플랜을 실행하고
destroy
플래그를 지정합니다.terraform plan -destroy -out main.destroy.tfplan
주요 정보:
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다.- 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
terraform apply를 실행하여 실행 계획을 적용합니다.
terraform apply main.destroy.tfplan
Azure의 Terraform 문제 해결
Azure에서 Terraform을 사용할 때 일반적인 문제 해결