移轉至 Azure 防火牆進階版
您可以將 Azure 防火牆標準版移轉至 Azure 防火牆進階版,以利用新的進階版功能。 如需 Azure 防火牆進階版功能的詳細資訊,請參閱 Azure 防火牆進階版功能。
本文將引導您執行必要步驟,手動將標準版防火牆和原則移轉至進階版。
提示
變更 Azure 防火牆 SKU 且不需要停機的最簡單方式,就是使用變更 SKU 功能。 如需詳細資訊,請參閱 Azure 防火牆輕鬆升級/降級設定。
開始移轉之前,請先瞭解效能考量事項,並事先規劃必要的維護期間。 預期通常會停機 20-30 分鐘。
需要執行下列一般步驟,才能成功移轉:
- 根據您的現有標準版原則或傳統規則建立新的進階版原則。 在此步驟結束時,您的新進階版原則將會包含您所有現有的規則和原則設定。
- 使用停止/啟動,將Azure 防火牆從標準版移轉至進階版。
- 將新建立的進階版原則附加至進階版防火牆。
重要
目前不支援升級在東南亞部署可用性區域的標準版防火牆。
如果您使用 Terraform 來部署 Azure 防火牆,您可以使用 Terraform 移轉至 Azure 防火牆進階版。 如需詳細資訊,請參閱使用 Terraform 將 Azure 防火牆標準版移轉至進階版。
效能考量
從標準 SKU 移轉時,必須考量效能。 IDPS 和 TLS 檢查是計算密集型作業。 進階版 SKU 會使用更強大的 VM SKU,其可調整為比標準版 SKU 相還高的輸送量。 如需更多有關 Azure 防火牆效能的資訊,請參閱 Azure 防火牆效能。
Microsoft 建議客戶在其 Azure 部署中執行完整規模的測試,以確保防火牆服務效能符合您的期望。
停機
在計劃性維護期間移轉防火牆,因為當您使用停止/啟動將 Azure 防火牆從標準版移轉至進階版時,將會有停機時間。
將傳統規則移轉至標準版原則
在移轉過程中,您可能需要將傳統防火牆規則移轉至標準版原則。 您可以使用 Azure 入口網站來執行這項工作:
從 Azure 入口網站中,選取您的標準版防火牆。 在 [概觀] 頁面上,選取 [移轉至防火牆原則]。
在 [移轉至防火牆原則] 頁面上,選取 [檢閱 + 建立]。
選取 建立。
部署需要數分鐘的時間才能完成。
您也可以使用 Azure PowerShell,從 Azure 防火牆移轉現有的傳統版規則,以建立原則。 如需詳細資訊,請參閱使用 PowerShell,將 Azure 防火牆設定移轉至 Azure 防火牆原則
使用 Azure PowerShell 移轉現有的原則
Transform-Policy.ps1
是Azure PowerShell 指令碼,可從現有的標準版原則中建立新的進階版原則。
假設有標準版防火牆原則識別碼,指令碼會將其轉換成進階版 Azure 防火牆原則。 指令碼會先連線到您的 Azure 帳戶、提取原則、轉換/新增各種參數,然後上傳新的進階版原則。 新的進階原則名為 <previous_policy_name>_premium
。 如果是子原則轉換,則會保留父原則的連結。
使用範例:
Transform-Policy -PolicyId /subscriptions/XXXXX-XXXXXX-XXXXX/resourceGroups/some-resource-group/providers/Microsoft.Network/firewallPolicies/policy-name
重要
指令碼不會移轉威脅情報和 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
使用停止/啟動來移轉 Azure 防火牆
如果您使用搭配防火牆原則的 Azure 防火牆標準版 SKU,您可以使用配置/解除配置方法來將防火牆 SKU 移轉至進階版。 VNet 中樞和安全中樞防火牆都支援此移轉方法。 當您移轉安全中樞部署時,其會保留防火牆公用 IP 位址。
Azure PowerShell 的最低版本需求為 6.5.0。 如需詳細資訊,請參閱 Az 6.5.0。
移轉 VNET 中樞防火牆
解除配置標準版防火牆
$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
移轉安全中樞防火牆
解除配置標準版防火牆
$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 入口網站,將進階版原則附加至新的進階版防火牆: