이 문서에서는 Azure PowerShell을 사용하여 여러 Azure Firewall 규칙을 효율적으로 추가하고 수정하는 방법을 보여줍니다. 이 문서의 단계에 따라 업데이트 시간을 줄이고 구성 충돌을 방지할 수 있습니다.
필수 조건
시작하기 전에 다음을 확인합니다.
- Azure Firewall 또는 Azure Firewall 정책이 이미 포함된 Azure 구독
- Azure PowerShell 설치 및 구성
- 방화벽 정책을 수정할 수 있는 적절한 권한
- 프로덕션에 적용하기 전에 변경 내용의 유효성을 검사하는 테스트 환경
개요
Azure Firewall 또는 Azure Firewall Policy에 새 규칙을 추가하는 경우 다음 방법을 사용하여 총 업데이트 시간을 줄이고 잠재적 충돌을 방지합니다.
- Azure Firewall 또는 Azure Firewall 정책 개체를 검색합니다.
- 모든 새 규칙을 추가하고 로컬 개체에서 원하는 다른 수정을 수행합니다. 기존 규칙 컬렉션에 추가하거나 필요에 따라 새 규칙 컬렉션을 만들 수 있습니다.
- 모든 수정이 완료된 경우에만 방화벽 또는 방화벽 정책 업데이트를 푸시합니다.
이 방법은 원자성 업데이트를 보장하고 구성 충돌의 위험을 줄입니다.
다음 섹션에서는 새 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 정책 및 규칙 관리에 대한 자세한 내용은 다음 문서를 참조하세요.