Share via


Azure Firewall 프리미엄으로 마이그레이션

Azure Firewall 표준에서 Azure Firewall 프리미엄으로 마이그레이션하면 새 프리미엄 기능을 활용할 수 있습니다. Azure Firewall 프리미엄 기능에 대한 자세한 내용은 Azure Firewall 프리미엄 기능을 참조하세요.

이 문서에서는 표준 방화벽 및 정책을 프리미엄으로 수동으로 마이그레이션하는 데 필요한 단계를 안내합니다.

가동 중지 시간 없이 Azure Firewall SKU를 변경하는 가장 쉬운 방법은 SKU 변경 기능을 사용하는 것입니다. 자세한 내용은 Azure Firewall 간편한 업그레이드/다운그레이드를 참조하세요.

마이그레이션을 시작하기 전에 성능 고려 사항을 이해하고 필요한 유지 관리 기간을 미리 계획합니다. 일반적인 가동 중지 시간은 20~30분입니다.

성공적인 마이그레이션을 위해서는 다음과 같은 일반 단계가 필요합니다.

  1. 기존 표준 정책 또는 클래식 규칙에 따라 새 프리미엄 정책을 만듭니다. 이 단계가 끝나면 새 프리미엄 정책에는 기존 규칙 및 정책 설정이 모두 포함됩니다.
  2. stop/start를 사용하여 Azure Firewall을 Standard에서 Premium으로 마이그레이션합니다.
  3. 새로 만든 Premium 정책을 Premium 방화벽에 연결합니다.

Important

가용성 영역을 사용하여 동남 아시아에 배포된 표준 방화벽 업그레이드는 현재 지원되지 않습니다.

Terraform을 사용하여 Azure Firewall을 배포하는 경우 Terraform을 Azure Firewall Premium으로 마이그레이션할 수 있습니다. 자세한 내용은 Terraform을 사용하여 Azure Firewall Standard를 Premium으로 마이그레이션을 참조하세요.

성능 고려 사항

성능은 표준 SKU에서 마이그레이션할 때 고려해야 할 사항입니다. IDPS 및 TLS 검사는 컴퓨팅 집약적 작업입니다. 프리미엄 SKU는 표준 SKU에 비해 더 높은 처리량으로 크기 조정되는 더 강력한 VM SKU를 사용합니다. Azure Firewall 성능에 대한 자세한 내용은 Azure Firewall 성능을 참조하세요.

고객은 Azure 배포에서 전체 스케일링 테스트를 수행하여 방화벽 서비스 성능이 사용자의 기대를 충족하는지 확인하는 것이 좋습니다.

가동 중지 시간

중지/시작을 사용하여 표준에서 프리미엄으로 Azure Firewall을 마이그레이션할 때 약간의 가동 중지 시간이 발생하므로 계획된 유지 관리 시간 동안 방화벽을 마이그레이션합니다.

클래식 규칙을 표준 정책으로 마이그레이션

마이그레이션 프로세스 중에 클래식 방화벽 규칙을 표준 정책으로 마이그레이션해야 할 수 있습니다. Azure Portal을 사용하여 수행할 수 있습니다.

  1. Azure Portal에서 표준 방화벽을 선택합니다. 개요 페이지에서 방화벽 정책으로 마이그레이션을 선택합니다.

    Migrate to firewall policy

  2. 방화벽 정책으로 마이그레이션 페이지에서 검토 + 만들기를 선택합니다.

  3. 만들기를 실행합니다.

    배포를 완료하는 데 몇 분이 걸립니다.

Azure PowerShell을 사용하여 Azure Firewall에서 기존 클래식 규칙을 마이그레이션하여 정책을 만들 수도 있습니다. 자세한 내용은 PowerShell을 사용하여 Azure Firewall 구성을 Azure Firewall 정책으로 마이그레이션을 참조하세요.

Azure PowerShell을 사용하여 기존 정책 마이그레이션

Transform-Policy.ps1은 기존 표준 정책에서 새 프리미엄 정책을 만드는 Azure PowerShell 스크립트입니다.

표준 방화벽 정책 ID가 있는 경우 이 스크립트는 이를 프리미엄 Azure 방화벽 정책으로 변환합니다. 이 스크립트는 먼저 Azure 계정에 연결하고, 정책을 끌어오고, 다양한 매개 변수를 변환/추가하고, 새 프리미엄 정책을 업로드합니다. 새 프리미엄 정책의 이름은 <previous_policy_name>_premium입니다. 자식 정책 변환인 경우 부모 정책에 대한 링크가 유지됩니다.

사용법 예제:

Transform-Policy -PolicyId /subscriptions/XXXXX-XXXXXX-XXXXX/resourceGroups/some-resource-group/providers/Microsoft.Network/firewallPolicies/policy-name

Important

스크립트는 위협 인텔리전스 및 SNAT 프라이빗 범위 설정을 마이그레이션하지 않습니다. 계속하기 전에 해당 설정을 적어 두고 수동으로 마이그레이션해야 합니다. 그렇지 않으면 업그레이드된 새 방화벽과 일치하지 않는 트래픽 필터링이 발생할 수 있습니다.

이 스크립트에는 최신 Azure PowerShell이 필요합니다. Get-Module -ListAvailable Az를 실행하여 설치된 버전을 확인합니다. 설치해야 하는 경우 Azure PowerShell 모듈 설치를 참조하세요.

<#
    .SYNOPSIS
        Given an Azure firewall policy id the script will transform it to a Premium Azure firewall policy.
        The script will first pull the policy, transform/add various parameters and then upload a new premium policy.
        The created policy will be named <previous_policy_name>_premium if no new name provided else new policy will be named as the parameter passed.
    .Example
        Transform-Policy -PolicyId /subscriptions/XXXXX-XXXXXX-XXXXX/resourceGroups/some-resource-group/providers/Microsoft.Network/firewallPolicies/policy-name -NewPolicyName <optional param for the new policy name>
#>

param (
    #Resource id of the azure firewall policy.
    [Parameter(Mandatory=$true)]
    [string]
    $PolicyId,

    #new filewallpolicy name, if not specified will be the previous name with the '_premium' suffix
    [Parameter(Mandatory=$false)]
    [string]
    $NewPolicyName = ""
)
$ErrorActionPreference = "Stop"
$script:PolicyId = $PolicyId
$script:PolicyName = $NewPolicyName

function ValidatePolicy {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [Object]
        $Policy
    )

    Write-Host "Validating resource is as expected"

    if ($null -eq $Policy) {
        Write-Error "Received null policy"
        exit(1)
    }
    if ($Policy.GetType().Name -ne "PSAzureFirewallPolicy") {
        Write-Error "Resource must be of type Microsoft.Network/firewallPolicies"
        exit(1)
    }

    if ($Policy.Sku.Tier -eq "Premium") {
        Write-Host "Policy is already premium" -ForegroundColor Green
        exit(1)
    }
}

function GetPolicyNewName {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [Microsoft.Azure.Commands.Network.Models.PSAzureFirewallPolicy]
        $Policy
    )

    if (-not [string]::IsNullOrEmpty($script:PolicyName)) {
        return $script:PolicyName
    }

    return $Policy.Name + "_premium"
}

function TransformPolicyToPremium {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [Microsoft.Azure.Commands.Network.Models.PSAzureFirewallPolicy]
        $Policy
    )
    $NewPolicyParameters = @{
                        Name = (GetPolicyNewName -Policy $Policy)
                        ResourceGroupName = $Policy.ResourceGroupName
                        Location = $Policy.Location
                        BasePolicy = $Policy.BasePolicy.Id
                        ThreatIntelMode = $Policy.ThreatIntelMode
                        ThreatIntelWhitelist = $Policy.ThreatIntelWhitelist
                        PrivateRange = $Policy.PrivateRange
                        DnsSetting = $Policy.DnsSettings
                        SqlSetting = $Policy.SqlSetting
                        ExplicitProxy  = $Policy.ExplicitProxy
                        DefaultProfile  = $Policy.DefaultProfile
                        Tag = $Policy.Tag
                        SkuTier = "Premium"
    }

    Write-Host "Creating new policy"
    $premiumPolicy = New-AzFirewallPolicy @NewPolicyParameters

    Write-Host "Populating rules in new policy"
    foreach ($ruleCollectionGroup in $Policy.RuleCollectionGroups) {
        $ruleResource = Get-AzResource -ResourceId $ruleCollectionGroup.Id
        $ruleToTransfom = Get-AzFirewallPolicyRuleCollectionGroup -AzureFirewallPolicy $Policy -Name $ruleResource.Name
        $ruleCollectionGroup = @{
            FirewallPolicyObject = $premiumPolicy
            Priority = $ruleToTransfom.Properties.Priority
            Name = $ruleToTransfom.Name
        }

        if ($ruleToTransfom.Properties.RuleCollection.Count) {
            $ruleCollectionGroup["RuleCollection"] = $ruleToTransfom.Properties.RuleCollection
        }

        Set-AzFirewallPolicyRuleCollectionGroup @ruleCollectionGroup
    }
}

function ValidateAzNetworkModuleExists {
    Write-Host "Validating needed module exists"
    $networkModule = Get-InstalledModule -Name "Az.Network" -MinimumVersion 4.5 -ErrorAction SilentlyContinue
    if ($null -eq $networkModule) {
        Write-Host "Please install Az.Network module version 4.5.0 or higher, see instructions: https://github.com/Azure/azure-powershell#installation"
        exit(1)
    }
    $resourceModule = Get-InstalledModule -Name "Az.Resources" -MinimumVersion 4.2 -ErrorAction SilentlyContinue
    if ($null -eq $resourceModule) {
        Write-Host "Please install Az.Resources module version 4.2.0 or higher, see instructions: https://github.com/Azure/azure-powershell#installation"
        exit(1)
    }
    Import-Module Az.Network -MinimumVersion 4.5.0
    Import-Module Az.Resources -MinimumVersion 4.2.0
}

ValidateAzNetworkModuleExists
$policy = Get-AzFirewallPolicy -ResourceId $script:PolicyId
ValidatePolicy -Policy $policy
TransformPolicyToPremium -Policy $policy

stop/start를 사용하여 Azure Firewall 마이그레이션

방화벽 정책과 함께 Azure Firewall Standard SKU를 사용하는 경우 Allocate/Deallocate 메서드를 사용하여 방화벽 SKU를 Premium으로 마이그레이션할 수 있습니다. 이 마이그레이션 방식은 VNet Hub 및 Secure Hub Firewalls 모두에서 지원됩니다. Secure Hub 배포를 마이그레이션하면 방화벽 공용 IP 주소가 유지됩니다.

최소 Azure PowerShell 버전 요구 사항은 6.5.0입니다. 자세한 내용은 Az 6.5.0을 참조하세요.

VNET Hub Firewall 마이그레이션

  • 표준 방화벽 할당 취소

    $azfw = Get-AzFirewall -Name "<firewall-name>" -ResourceGroupName "<resource-group-name>"
    $azfw.Deallocate()
    Set-AzFirewall -AzureFirewall $azfw
    
  • 방화벽 프리미엄 할당(단일 공용 IP 주소)

    $azfw = Get-AzFirewall -Name "<firewall-name>" -ResourceGroupName "<resource-group-name>"
    $azfw.Sku.Tier="Premium"
    $vnet = Get-AzVirtualNetwork -ResourceGroupName "<resource-group-name>" -Name "<Virtual-Network-Name>"
    $publicip = Get-AzPublicIpAddress -Name "<Firewall-PublicIP-name>" -ResourceGroupName "<resource-group-name>"
    $azfw.Allocate($vnet,$publicip)
    Set-AzFirewall -AzureFirewall $azfw
    
  • 방화벽 프리미엄 할당(여러 공용 IP 주소)

    $azfw = Get-AzFirewall -Name "FW Name" -ResourceGroupName "RG Name"
    $azfw.Sku.Tier="Premium"
    $vnet = Get-AzVirtualNetwork -ResourceGroupName "RG Name" -Name "VNet Name"
    $publicip1 = Get-AzPublicIpAddress -Name "Public IP1 Name" -ResourceGroupName "RG Name"
    $publicip2 = Get-AzPublicIpAddress -Name "Public IP2 Name" -ResourceGroupName "RG Name"
    $azfw.Allocate($vnet,@($publicip1,$publicip2))
    Set-AzFirewall -AzureFirewall $azfw
    
  • 강제 터널 모드에서 방화벽 프리미엄 할당

    $azfw = Get-AzFirewall -Name "<firewall-name>" -ResourceGroupName "<resource-group-name>"
    $azfw.Sku.Tier="Premium"
    $vnet = Get-AzVirtualNetwork -ResourceGroupName "<resource-group-name>" -Name "<Virtual-Network-Name>"
    $publicip = Get-AzPublicIpAddress -Name "<Firewall-PublicIP-name>" -ResourceGroupName "<resource-group-name>"
    $mgmtPip = Get-AzPublicIpAddress -ResourceGroupName "<resource-group-name>"-Name "<Management-PublicIP-name>"
    $azfw.Allocate($vnet,$publicip,$mgmtPip)
    Set-AzFirewall -AzureFirewall $azfw
    

Secure Hub Firewall 마이그레이션

  • 표준 방화벽 할당 취소

    $azfw = Get-AzFirewall -Name "<firewall-name>" -ResourceGroupName "<resource-group-name>"
    $azfw.Deallocate()
    Set-AzFirewall -AzureFirewall $azfw
    
  • 방화벽 프리미엄 할당

    $azfw = Get-AzFirewall -Name "<firewall-name>" -ResourceGroupName "<resource-group-name>"
    $hub = get-azvirtualhub -ResourceGroupName "<resource-group-name>" -name "<vWANhub-name>"
    $azfw.Sku.Tier="Premium"
    $azfw.Allocate($hub.id)
    Set-AzFirewall -AzureFirewall $azfw
    

프리미엄 방화벽에 프리미엄 정책 연결

Azure Portal을 사용하여 새 프리미엄 방화벽에 프리미엄 정책을 연결할 수 있습니다.

Screenshot showing firewall policy

다음 단계