Azure PowerShell 사용하여 여러 Azure Firewall 규칙 추가 또는 수정

이 문서에서는 Azure PowerShell을 사용하여 여러 Azure Firewall 규칙을 효율적으로 추가하고 수정하는 방법을 보여줍니다. 이 문서의 단계에 따라 업데이트 시간을 줄이고 구성 충돌을 방지할 수 있습니다.

필수 조건

시작하기 전에 다음을 확인합니다.

  • Azure Firewall 또는 Azure Firewall 정책이 이미 포함된 Azure 구독
  • Azure PowerShell 설치 및 구성
  • 방화벽 정책을 수정할 수 있는 적절한 권한
  • 프로덕션에 적용하기 전에 변경 내용의 유효성을 검사하는 테스트 환경

개요

Azure Firewall 또는 Azure Firewall Policy에 새 규칙을 추가하는 경우 다음 방법을 사용하여 총 업데이트 시간을 줄이고 잠재적 충돌을 방지합니다.

  1. Azure Firewall 또는 Azure Firewall 정책 개체를 검색합니다.
  2. 모든 새 규칙을 추가하고 로컬 개체에서 원하는 다른 수정을 수행합니다. 기존 규칙 컬렉션에 추가하거나 필요에 따라 새 규칙 컬렉션을 만들 수 있습니다.
  3. 모든 수정이 완료된 경우에만 방화벽 또는 방화벽 정책 업데이트를 푸시합니다.

이 방법은 원자성 업데이트를 보장하고 구성 충돌의 위험을 줄입니다.

다음 섹션에서는 새 DNAT 규칙을 추가하고 방화벽 정책에서 기존 규칙을 업데이트하는 방법을 보여줍니다. 다음과 같은 경우 동일한 원칙을 따라야 합니다.

  • 애플리케이션 또는 네트워크 규칙 업데이트
  • 클래식 규칙으로 관리되는 방화벽 업데이트
  • 기존 규칙 구성 수정

중요합니다

항상 테스트 정책에서 이러한 절차를 먼저 테스트하여 특정 요구 사항에 대해 예상대로 작동하는지 확인합니다.

Azure에 연결하고 컨텍스트 설정

Azure 계정에 연결하고 컨텍스트를 대상 구독으로 설정합니다.

Connect-AzAccount
Set-AzContext -Subscription "<Subscription ID>"

방화벽 정책 개체 검색

방화벽 정책, 규칙 컬렉션 그룹 및 수정하려는 특정 규칙 컬렉션에 대한 로컬 개체를 만듭니다.

$policy = Get-AzFirewallPolicy -Name "<Policy Name>" -ResourceGroupName "<Resource Group Name>"
$natrulecollectiongroup = Get-AzFirewallPolicyRuleCollectionGroup -Name "<Rule Collection Group Name>" -ResourceGroupName "<Resource Group Name>" -AzureFirewallPolicyName "<Firewall Policy Name>"
$existingrulecollection = $natrulecollectiongroup.Properties.RuleCollection | Where-Object {$_.Name -eq "<rule collection name>"}

새 규칙 추가

새 규칙 정의

규칙 컬렉션에 추가하려는 새 DNAT 규칙을 정의합니다.

$newrule1 = New-AzFirewallPolicyNatRule -Name "dnat-rule1" -Protocol "TCP" -SourceAddress "<Source Address>" -DestinationAddress "<Destination Address>" -DestinationPort "<Destination Port>" -TranslatedAddress "<Translated Address>" -TranslatedPort "<Translated Port>"
$newrule2 = New-AzFirewallPolicyNatRule -Name "dnat-rule2" -Protocol "TCP" -SourceAddress "<Source Address>" -DestinationAddress "<Destination Address>" -DestinationPort "<Destination Port>" -TranslatedAddress "<Translated Address>" -TranslatedPort "<Translated Port>"

규칙 컬렉션에 규칙 추가

로컬 규칙 컬렉션 개체에 새 규칙을 추가합니다.

$existingrulecollection.Rules.Add($newrule1)
$existingrulecollection.Rules.Add($newrule2)

비고

이 단계에서 필요한 만큼 규칙을 추가할 수 있습니다. 최종 단계에서 Azure를 업데이트할 때까지 로컬 개체에 대한 모든 변경 내용이 적용됩니다.

기존 규칙 업데이트

규칙 컬렉션에서 기존 규칙을 수정하려면 다음을 수행합니다.

기존 규칙 찾기 및 수정

이름으로 기존 규칙을 찾고 해당 속성을 수정합니다.

# Find the existing rule
$existingRule = $existingrulecollection.Rules | Where-Object {$_.Name -eq "existing-rule-name"}

# Modify rule properties
if ($existingRule) {
    $existingRule.SourceAddresses = @("10.0.0.0/8", "192.168.0.0/16")
    $existingRule.DestinationPorts = @("80", "443")
    $existingRule.TranslatedAddress = "10.1.1.100"
    $existingRule.TranslatedPort = "8080"
    Write-Host "Rule '$($existingRule.Name)' updated successfully."
} else {
    Write-Warning "Rule 'existing-rule-name' not found."
}

기존 규칙 제거

컬렉션에서 규칙을 제거하려면 다음을 수행합니다.

# Find and remove the rule
$ruleToRemove = $existingrulecollection.Rules | Where-Object {$_.Name -eq "rule-to-delete"}
if ($ruleToRemove) {
    $existingrulecollection.Rules.Remove($ruleToRemove)
    Write-Host "Rule '$($ruleToRemove.Name)' removed successfully."
} else {
    Write-Warning "Rule 'rule-to-delete' not found."
}

컬렉션의 모든 규칙 나열

컬렉션의 모든 현재 규칙을 보려면 다음을 수행합니다.

# Display all rules
$existingrulecollection.Rules | Select-Object Name, Protocol, SourceAddresses, DestinationAddresses, DestinationPorts, TranslatedAddress, TranslatedPort | Format-Table

Azure에 변경 내용 적용

로컬 개체를 모두 변경한 후 Azure에서 규칙 컬렉션 그룹을 업데이트합니다.

try {
    Set-AzFirewallPolicyRuleCollectionGroup -Name "<Rule Collection Group Name>" -FirewallPolicyObject $policy -Priority 200 -RuleCollection $natrulecollectiongroup.Properties.RuleCollection
    Write-Host "Firewall policy updated successfully."
} catch {
    Write-Error "Failed to update firewall policy: $($_.Exception.Message)"
}

중요합니다

이 단계에서는 모든 변경 내용을 Azure에 적용합니다. 프로덕션 환경에서 이 명령을 실행하기 전에 구성을 철저히 테스트했는지 확인합니다.

변경 내용 확인

정책을 업데이트한 후 변경 내용이 올바르게 적용되었는지 확인합니다.

# Refresh the policy object and verify changes
$updatedPolicy = Get-AzFirewallPolicy -Name "<Policy Name>" -ResourceGroupName "<Resource Group Name>"
$updatedRuleGroup = Get-AzFirewallPolicyRuleCollectionGroup -Name "<Rule Collection Group Name>" -ResourceGroupName "<Resource Group Name>" -AzureFirewallPolicyName "<Firewall Policy Name>"

# Display the updated rules
$updatedRuleCollection = $updatedRuleGroup.Properties.RuleCollection | Where-Object {$_.Name -eq "<rule collection name>"}
$updatedRuleCollection.Rules | Select-Object Name, Protocol, SourceAddresses, DestinationAddresses | Format-Table

자원을 정리하세요

이 자습서에 대한 테스트 리소스를 만든 경우 요금이 부과되지 않도록 제거할 수 있습니다. 리소스 그룹을 삭제하면 방화벽 및 모든 관련 리소스도 삭제됩니다.

Remove-AzResourceGroup -Name "<Resource Group Name>" -Force

주의

리소스 그룹의 모든 리소스를 삭제하려는 경우에만 이 명령을 실행합니다. 이 작업은 취소할 수 없습니다.

다음 단계

Azure Firewall 정책 및 규칙 관리에 대한 자세한 내용은 다음 문서를 참조하세요.