共用方式為


教學課程:使用 Azure PowerShell 保護您的虛擬中樞

在本教學課程中,您會在一個區域中建立具有虛擬中樞的虛擬 WAN 執行個體,並在虛擬中樞內部署 Azure 防火牆以保護連線。 在此範例中,您會示範虛擬網路之間的安全連線。 虛擬網路和站對站、點對站或 ExpressRoute 分支之間的流量也會受到虛擬安全中樞的支援。

在本教學課程中,您會了解如何:

  • 部署虛擬 WAN
  • 部署 Azure 防火牆和設定自訂路由
  • 測試連線能力

Important

虛擬 WAN 是中樞內所提供中樞和服務集合。 您可以部署所需的任意虛擬 WAN 數目。 在虛擬 WAN 中樞內有多種服務,例如 VPN 和 ExpressRoute 等等。 如果區域支援可用性區域,則這些服務都會自動跨 可用性區域部署 ,但 Azure 防火牆除外。 若要將現有的 Azure Virtual WAN 中樞升級至安全中樞,並讓 Azure 防火牆使用可用性區域,您必須使用 Azure PowerShell,如本文稍後所述。

Prerequisites

  • 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶

  • PowerShell 7 或更高版本

    本教學課程要求您在 PowerShell 7 或更高版本上本機執行 Azure PowerShell。 若要安裝 PowerShell 7,請參閱 從 Windows PowerShell 5.1 遷移至 PowerShell 7

  • 「Az.Network」模組版本必須是 4.17.0 或更高版本。

登入 Azure

Connect-AzAccount
Select-AzSubscription -Subscription "<sub name>"

初始虛擬 WAN 部署

若要開始,您必須設定變數並建立資源群組、虛擬 WAN 實例和虛擬中樞:

# Variable definition
$RG = "vwan-rg"
$Location = "westeurope"
$VwanName = "vwan"
$HubName =  "hub1"
$FirewallTier = "Standard" # or "Premium"

# Create Resource Group, Virtual WAN and Virtual Hub using the New-AzVirtualWan and New-AzVirtualHub cmdlets
New-AzResourceGroup -Name $RG -Location $Location
$Vwan = New-AzVirtualWan -Name $VwanName -ResourceGroupName $RG -Location $Location -AllowVnetToVnetTraffic -AllowBranchToBranchTraffic -VirtualWANType "Standard"
$Hub = New-AzVirtualHub -Name $HubName -ResourceGroupName $RG -VirtualWan $Vwan -Location $Location -AddressPrefix "192.168.1.0/24" -Sku "Standard"
  • 建立兩個虛擬網路,並使用 Cmdlet 以輪輻 New-AzVirtualHubVnetConnection 的形式將它們連線到中樞。 虛擬網路會使用位址前綴 10.1.1.0/2410.1.2.0/24來建立。
# Create Virtual Network
$Spoke1 = New-AzVirtualNetwork -Name "spoke1" -ResourceGroupName $RG -Location $Location -AddressPrefix "10.1.1.0/24"
$Spoke2 = New-AzVirtualNetwork -Name "spoke2" -ResourceGroupName $RG -Location $Location -AddressPrefix "10.1.2.0/24"
# Connect Virtual Network to Virtual WAN
$Spoke1Connection = New-AzVirtualHubVnetConnection -ResourceGroupName $RG -ParentResourceName  $HubName -Name "spoke1" -RemoteVirtualNetwork $Spoke1 -EnableInternetSecurityFlag $True
$Spoke2Connection = New-AzVirtualHubVnetConnection -ResourceGroupName $RG -ParentResourceName  $HubName -Name "spoke2" -RemoteVirtualNetwork $Spoke2 -EnableInternetSecurityFlag $True

在此階段,您的虛擬 WAN 已完全運作,並提供任意連線性。 若要保護此環境,請在每個虛擬中樞部署 Azure 防火牆。 您可以使用防火牆原則集中管理這些防火牆。

在此範例中,您也會建立防火牆原則,以使用 New-AzFirewallPolicy Cmdlet 在虛擬 WAN 中樞中管理 Azure 防火牆實例。 Azure 防火牆將會使用 New-AzFirewall cmdlet 部署在中樞。

# New Firewall Policy
$FWPolicy = New-AzFirewallPolicy -Name "VwanFwPolicy" -ResourceGroupName $RG -Location $Location
# New Firewall Public IP
$AzFWPIPs = New-AzFirewallHubPublicIpAddress -Count 1
$AzFWHubIPs = New-AzFirewallHubIpAddress -PublicIP $AzFWPIPs
# New Firewall
$AzFW = New-AzFirewall -Name "azfw1" -ResourceGroupName $RG -Location $Location `
            -VirtualHubId $Hub.Id -FirewallPolicyId $FWPolicy.Id `
            -SkuName "AZFW_Hub" -HubIPAddress $AzFWHubIPs `
            -SkuTier $FirewallTier

Note

下列防火牆建立命令 使用可用性區域。 如果要使用此功能,則需要一個額外的參數 -Zone 。 本文結尾的升級一節會提供一個範例。

啟用 Azure 防火牆到 Azure 監視器的記錄功能為選用。 在此範例中,您會使用防火牆記錄來驗證流量是否通過防火牆。 首先,建立Log Analytics工作區來儲存記錄。 然後,使用 Set-AzDiagnosticSetting Cmdlet 來設定診斷設定,並將記錄傳送至工作區。

# Optionally, enable logging of Azure Firewall to Azure Monitor
$LogWSName = "vwan-" + (Get-Random -Maximum 99999) + "-" + $RG
$LogWS = New-AzOperationalInsightsWorkspace -Location $Location -Name $LogWSName -Sku Standard -ResourceGroupName $RG
Set-AzDiagnosticSetting -ResourceId $AzFW.Id -Enabled $True -Category AzureFirewallApplicationRule, AzureFirewallNetworkRule -WorkspaceId $LogWS.ResourceId

部署 Azure 防火牆和設定自訂路由

Note

這是當「中樞間」設定設定為 [停用] 時,使用 Azure 防火牆管理員保護來自 Azure 入口網站的連線時所部署的設定。 如需如何在 [Inter-hub] 設定為 已啟用時使用 PowerShell 設定路由的指示,請參閱 啟用路由意圖

您現在已在中樞內擁有 Azure 防火牆,但仍需要修改路由,讓虛擬 WAN 透過防火牆傳送來自虛擬網路和來自分支的流量。 您可以分兩個步驟執行此作業:

  1. 設定所有虛擬網路連線 (以及分支連線 (如果有的話)) 以傳播至 None 路由表。 此設定的作用是其他虛擬網路和分支不會知道其前置詞,因此不會以其作為路由目的地。
  2. 現在您可以在 Default 路由表 (預設會將與有虛擬網路和分支相關聯) 中插入靜態路由,以便將所有流量傳送至 Azure 防火牆。

首先,設定虛擬網路連線以傳播至 None 路由表。 此步驟可確保虛擬網路不會瞭解彼此的位址前綴,避免彼此之間的直接通訊。 因此,所有虛擬網路間流量都必須通過 Azure 防火牆。

若要這樣做,請使用 Get-AzVhubRouteTable Cmdlet 來擷取 None 路由表,然後使用 Cmdlet 更新每個虛擬網路連線的路由 Update-AzVirtualHubVnetConnection 組態。

# Configure Virtual Network connections in hub to propagate to None
$VnetRoutingConfig = $Spoke1Connection.RoutingConfiguration    # We take $Spoke1Connection as baseline for the future vnet config, all vnets will have an identical config
$NoneRT = Get-AzVhubRouteTable -ResourceGroupName $RG -HubName $HubName -Name "noneRouteTable"
$NewPropRT = @{}
$NewPropRT.Add('Id', $NoneRT.Id)
$PropRTList = @()
$PropRTList += $NewPropRT
$VnetRoutingConfig.PropagatedRouteTables.Ids = $PropRTList
$VnetRoutingConfig.PropagatedRouteTables.Labels = @()
$Spoke1Connection = Update-AzVirtualHubVnetConnection -ResourceGroupName $RG -ParentResourceName  $HubName -Name "spoke1" -RoutingConfiguration $VnetRoutingConfig
$Spoke2Connection = Update-AzVirtualHubVnetConnection -ResourceGroupName $RG -ParentResourceName  $HubName -Name "spoke2" -RoutingConfiguration $VnetRoutingConfig

接下來,繼續進行第二個步驟:將靜態路由新增至 Default 路由表。 下列範例會使用 Azure 防火牆管理員在保護虛擬 WAN 中連線時套用的預設設定。 您可以使用 Cmdlet,視需要在 New-AzVHubRoute 靜態路由中自定義前置詞清單。 在此範例中,所有流量都會透過 Azure 防火牆路由傳送,這是建議的預設值。

# Create static routes in default Route table
$AzFWId = $(Get-AzVirtualHub -ResourceGroupName $RG -name  $HubName).AzureFirewall.Id
$AzFWRoute = New-AzVHubRoute -Name "all_traffic" -Destination @("0.0.0.0/0", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16") -DestinationType "CIDR" -NextHop $AzFWId -NextHopType "ResourceId"
$DefaultRT = Update-AzVHubRouteTable -Name "defaultRouteTable" -ResourceGroupName $RG -VirtualHubName  $HubName -Route @($AzFWRoute)

Note

字串 “all_traffic” 作為上述 New-AzVHubRoute 命令中參數 “-Name” 的值具有特殊意義:如果您使用此確切字串,本文中套用的設定將會正確反映在 Azure 入口網站 (防火牆管理員 --> 虛擬中樞 --> [您的中樞] --> 安全性設定) 中。 如果使用不同的名稱,則會套用所需的設定,但不會反映在 Azure 入口網站中。

啟用路由意圖

如果您想要透過部署在虛擬 WAN 中樞的 Azure 防火牆傳送中樞間和區域間流量,您可以改為啟用路由意圖功能。 如需關於路由意圖的詳細資訊,請參閱路由意圖文件

Note

這是當 [Interhub] 設定設定為 已啟用時,保護來自 Azure 入口網站與 Azure 防火牆管理員的連線時所部署的設定。

# Get the Azure Firewall resource ID
$AzFWId = $(Get-AzVirtualHub -ResourceGroupName <thname> -name  $HubName).AzureFirewall.Id

# Create routing policy and routing intent
$policy1 = New-AzRoutingPolicy -Name "PrivateTraffic" -Destination @("PrivateTraffic") -NextHop $firewall.Id
$policy2 = New-AzRoutingPolicy -Name "PublicTraffic" -Destination @("Internet") -NextHop $firewall.Id
New-AzRoutingIntent -ResourceGroupName "<rgname>" -VirtualHubName "<hubname>" -Name "hubRoutingIntent" -RoutingPolicy @($policy1, $policy2)
If your Virtual WAN uses non-RFC1918 address prefixes (for example, `40.0.0.0/24` in a virtual network or on-premises), you should add an extra route to the `defaultRouteTable` after completing the routing intent configuration. Name this route **private_traffic**. If you use a different name, the route will work as expected, but the configuration will not be reflected in the Azure portal.

```azurepowershell-interactive
# Get the defaultRouteTable
$defaultRouteTable = Get-AzVHubRouteTable -ResourceGroupName routingIntent-Demo -HubName wus_hub1 -Name defaultRouteTable

# Get the routes automatically created by routing intent. If private routing policy is enabled, this is the route named _policy_PrivateTraffic. If internet routing policy is enabled, this is the route named _policy_InternetTraffic. 
$privatepolicyroute = $defaultRouteTable.Routes[1]


# Create new route named private_traffic for non-RFC1918 prefixes
$private_traffic = New-AzVHubRoute -Name "private-traffic" -Destination @("30.0.0.0/24") -DestinationType "CIDR" -NextHop $AzFWId -NextHopType ResourceId

# Create new routes for route table
$newroutes = @($privatepolicyroute, $private_traffic)

# Update route table
Update-AzVHubRouteTable -ResourceGroupName <rgname> -ParentResourceName <hubname> -Name defaultRouteTable -Route $newroutes

測試連線能力

現在您的安全中樞已經完全運作,您可以在連接至中樞的每個輻射狀虛擬網路中部署虛擬機,以測試網路連線:

# Create VMs in spokes for testing
$VMLocalAdminUser = "lab-user"
$VMLocalAdminSecurePassword = ConvertTo-SecureString -AsPlainText -Force
$VMCredential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
$VMSize = "Standard_B2ms"
# Spoke1
$Spoke1 = Get-AzVirtualNetwork -ResourceGroupName $RG -Name "spoke1"
Add-AzVirtualNetworkSubnetConfig -Name "vm" -VirtualNetwork $Spoke1 -AddressPrefix "10.1.1.0/26"
$Spoke1 | Set-AzVirtualNetwork
$VM1 = New-AzVM -Name "spoke1-vm" -ResourceGroupName $RG -Location $Location `
            -Image "UbuntuLTS" -credential $VMCredential `
            -VirtualNetworkName "spoke1" -SubnetName "vm" -PublicIpAddressName "spoke1-pip"
$NIC1 = Get-AzNetworkInterface -ResourceId $($VM1.NetworkProfile.NetworkInterfaces[0].Id)
$Spoke1VMPrivateIP = $NIC1.IpConfigurations[0].PrivateIpAddress
$Spoke1VMPIP = $(Get-AzPublicIpAddress -ResourceGroupName $RG -Name "spoke1-pip")
# Spoke2
$Spoke2 = Get-AzVirtualNetwork -ResourceGroupName $RG -Name "spoke2"
Add-AzVirtualNetworkSubnetConfig -Name "vm" -VirtualNetwork $Spoke2 -AddressPrefix "10.1.2.0/26"
$Spoke2 | Set-AzVirtualNetwork
$VM2 = New-AzVM -Name "spoke2-vm" -ResourceGroupName $RG -Location $Location `
            -Image "UbuntuLTS" -credential $VMCredential `
            -VirtualNetworkName "spoke2" -SubnetName "vm" -PublicIpAddressName "spoke2-pip"
$NIC2 = Get-AzNetworkInterface -ResourceId $($VM2.NetworkProfile.NetworkInterfaces[0].Id)
$Spoke2VMPrivateIP = $NIC2.IpConfigurations[0].PrivateIpAddress
$Spoke2VMPIP = $(Get-AzPublicIpAddress -ResourceGroupName $RG -Name "spoke2-pip")

根據預設,防火牆原則會封鎖所有流量。 若要允許存取測試虛擬機,您必須設定DNAT (目的地網路位址轉譯) 規則。 這些規則可讓您透過 Azure 防火牆的公用 IP 位址連線到 VM:

# Adding DNAT rules for virtual machines in the spokes
$AzFWPublicAddress = $AzFW.HubIPAddresses.PublicIPs.Addresses[0].Address
$NATRuleSpoke1 = New-AzFirewallPolicyNatRule -Name "Spoke1SSH" -Protocol "TCP" `
        -SourceAddress "*" -DestinationAddress $AzFWPublicAddress -DestinationPort 10001 `
        -TranslatedAddress $Spoke1VMPrivateIP -TranslatedPort 22
$NATRuleSpoke2 = New-AzFirewallPolicyNatRule -Name "Spoke2SSH" -Protocol "TCP" `
        -SourceAddress "*" -DestinationAddress $AzFWPublicAddress -DestinationPort 10002 `
        -TranslatedAddress $Spoke2VMPrivateIP -TranslatedPort 22
$NATCollection = New-AzFirewallPolicyNatRuleCollection -Name "SSH" -Priority 100 `
        -Rule @($NATRuleSpoke1, $NATRuleSpoke2) -ActionType "Dnat"
$NATGroup = New-AzFirewallPolicyRuleCollectionGroup -Name "NAT" -Priority 100 -RuleCollection $NATCollection -FirewallPolicyObject $FWPolicy

接下來,設定防火牆原則的範例規則。 首先,建立網路規則以允許虛擬網路之間的 SSH 流量。 然後,新增一個應用程式規則,以僅允許存取完整網域名稱(FQDN)ifconfig.co,並回傳 HTTP 請求中看到的來源 IP 位址。

# Add Network Rule
$SSHRule = New-AzFirewallPolicyNetworkRule -Name PermitSSH -Protocol TCP `
        -SourceAddress "10.0.0.0/8" -DestinationAddress "10.0.0.0/8" -DestinationPort 22
$NetCollection = New-AzFirewallPolicyFilterRuleCollection -Name "Management" -Priority 100 -ActionType Allow -Rule $SSHRule
$NetGroup = New-AzFirewallPolicyRuleCollectionGroup -Name "Management" -Priority 200 -RuleCollection $NetCollection -FirewallPolicyObject $FWPolicy
# Add Application Rule
$ifconfigRule = New-AzFirewallPolicyApplicationRule -Name PermitIfconfig -SourceAddress "10.0.0.0/8" -TargetFqdn "ifconfig.co" -Protocol "http:80","https:443"
$AppCollection = New-AzFirewallPolicyFilterRuleCollection -Name "TargetURLs" -Priority 300 -ActionType Allow -Rule $ifconfigRule
$NetGroup = New-AzFirewallPolicyRuleCollectionGroup -Name "TargetURLs" -Priority 300 -RuleCollection $AppCollection -FirewallPolicyObject $FWPolicy

傳送任何流量之前,請先檢查每個虛擬機的有效路由。 路由表應顯示從虛擬 WAN (0.0.0.0/0 和 RFC1918 範圍) 學習的前綴,但不應包括其他輪輻虛擬網路的地址前綴。

# Check effective routes in the VM NIC in spoke 1
# Note that 10.1.2.0/24 (the prefix for spoke2) should not appear
Get-AzEffectiveRouteTable -ResourceGroupName $RG -NetworkInterfaceName $NIC1.Name | ft
# Check effective routes in the VM NIC in spoke 2
# Note that 10.1.1.0/24 (the prefix for spoke1) should not appear
Get-AzEffectiveRouteTable -ResourceGroupName $RG -NetworkInterfaceName $NIC2.Name | ft

產生從一部虛擬機到另一部虛擬機的流量,並確認其已由 Azure 防火牆篩選。 使用 SSH 連線到虛擬機器—接受 SSH 指紋,並在 VM 建立期間輸入您設定的密碼。 在此範例中,您將會:

  • 將 spoke1 中 VM 的五個 ICMP 回應要求 (pings) 傳送至 spoke2 中的 VM。
  • 嘗試在埠 22 上使用 nc (netcat) 公用程式搭配 -vz 旗標的 TCP 連線,這會檢查連線而不傳送數據。

您應該發現 Ping 要求失敗(由防火牆封鎖),而埠 22 上的 TCP 連線成功,如先前設定的網路規則所允許。

# Connect to one VM and ping the other. It should not work, because the firewall should drop the traffic, since no rule for ICMP is configured
ssh $AzFWPublicAddress -p 10001 -l $VMLocalAdminUser "ping $Spoke2VMPrivateIP -c 5"
# Connect to one VM and send a TCP request on port 22 to the other. It should work, because the firewall is configured to allow SSH traffic (port 22)
ssh $AzFWPublicAddress -p 10001 -l $VMLocalAdminUser "nc -vz $Spoke2VMPrivateIP 22"

您也可以透過防火牆測試因特網存取。 使用 curl 公用程式對允許 FQDN (ifconfig.co) 的 HTTP 要求應該會成功,而對其他目的地的要求(例如 bing.com)應遭到防火牆原則封鎖:

# This HTTP request should succeed, since it is allowed in an app rule in the AzFW, and return the public IP of the FW
ssh $AzFWPublicAddress -p 10001 -l $VMLocalAdminUser "curl -s4 ifconfig.co"
# This HTTP request should fail, since the FQDN bing.com is not in any app rule in the firewall policy
ssh $AzFWPublicAddress -p 10001 -l $VMLocalAdminUser "curl -s4 bing.com"

若要確認防火牆已如預期般卸除封包,請檢閱傳送至 Azure 監視器的記錄。 由於 Azure 防火牆已設定為將診斷記錄傳送至 Azure 監視器,因此您可以使用 Kusto 查詢語言 (KQL) 來查詢和分析相關的記錄專案:

Note

記錄可能需要 1 分鐘左右的時間,才會傳送到 Azure 監視器

# Getting Azure Firewall network rule Logs
$LogWS = Get-AzOperationalInsightsWorkspace -ResourceGroupName $RG
$LogQuery = 'AzureDiagnostics
| where Category == "AzureFirewallNetworkRule"
| where TimeGenerated >= ago(5m)
| parse msg_s with Protocol " request from " SourceIP ":" SourcePortInt:int " to " TargetIP ":" TargetPortInt:int *
| parse msg_s with * ". Action: " Action1a
| parse msg_s with * " was " Action1b " to " NatDestination
| parse msg_s with Protocol2 " request from " SourceIP2 " to " TargetIP2 ". Action: " Action2
| extend SourcePort = tostring(SourcePortInt),TargetPort = tostring(TargetPortInt)
| extend Action = case(Action1a == "", case(Action1b == "",Action2,Action1b), Action1a),Protocol = case(Protocol == "", Protocol2, Protocol),SourceIP = case(SourceIP == "", SourceIP2, SourceIP),TargetIP = case(TargetIP == "", TargetIP2, TargetIP),SourcePort = case(SourcePort == "", "N/A", SourcePort),TargetPort = case(TargetPort == "", "N/A", TargetPort),NatDestination = case(NatDestination == "", "N/A", NatDestination)
| project TimeGenerated, Protocol, SourceIP,SourcePort,TargetIP,TargetPort,Action, NatDestination, Resource
| take 25 '
$(Invoke-AzOperationalInsightsQuery -Workspace $LogWS -Query $LogQuery).Results | ft

在先前的命令中,您應該會看到不同的項目:

  • 進行了 DNAT 的 SSH 連線
  • 輪輻中的 VM 之間已捨棄 ICMP 封包 (10.1.1.4 和 10.1.2.4)
  • 輪輻中的 VM 之間已允許 SSH 連線

以下是上述命令所產生的範例輸出:

TimeGenerated            Protocol    SourceIP       SourcePort TargetIP      TargetPort Action  NatDestination Resource
-------------            --------    --------       ---------- --------      ---------- ------  -------------- --------
2020-10-04T20:53:02.41Z  TCP         109.125.122.99 62281      51.105.224.44 10001      DNAT'ed 10.1.1.4:22    AZFW1
2020-10-04T20:53:07.045Z TCP         10.1.1.4       35932      10.1.2.4      22         Allow   N/A            AZFW1
2020-10-04T20:53:50.119Z TCP         109.125.122.99 62293      51.105.224.44 10001      DNAT'ed 10.1.2.4:22    AZFW1
2020-10-04T20:52:47.475Z TCP         109.125.122.99 62273      51.105.224.44 10001      DNAT'ed 10.1.2.4:22    AZFW1
2020-10-04T20:51:04.682Z TCP         109.125.122.99 62200      51.105.224.44 10001      DNAT'ed 10.1.2.4:22    AZFW1
2020-10-04T20:51:17.031Z ICMP Type=8 10.1.1.4       N/A        10.1.2.4      N/A        Deny    N/A            AZFW1
2020-10-04T20:51:18.049Z ICMP Type=8 10.1.1.4       N/A        10.1.2.4      N/A        Deny    N/A            AZFW1
2020-10-04T20:51:19.075Z ICMP Type=8 10.1.1.4       N/A        10.1.2.4      N/A        Deny    N/A            AZFW1
2020-10-04T20:51:20.097Z ICMP Type=8 10.1.1.4       N/A        10.1.2.4      N/A        Deny    N/A            AZFW1
2020-10-04T20:51:21.121Z ICMP Type=8 10.1.1.4       N/A        10.1.2.4      N/A        Deny    N/A            AZFW1
2020-10-04T20:52:52.356Z TCP         10.1.1.4       53748      10.1.2.4      22         Allow   N/A            AZFW1

如果您想要查看應用程式規則的記錄 (描述已允許和已拒絕的 HTTP 連線) 或變更記錄的顯示方式,則可以嘗試使用其他 KQL 查詢。 您可以在 Azure 防火牆的 Azure 監視器記錄中找到一些範例。

若要清除測試環境,請使用 Remove-AzResourceGroup Cmdlet 刪除資源群組和所有相關聯的資源。 這會移除虛擬 WAN、虛擬中樞、Azure 防火牆,以及本教學課程期間建立的任何其他資源。

# Delete resource group and all contained resources
Remove-AzResourceGroup -Name $RG

將具有可用性區域的新 Azure 防火牆部署至現有的中樞

先前的步驟示範如何使用 Azure PowerShell 來建立 新的 Azure 虛擬 WAN 中樞,並使用 Azure 防火牆來保護它。 您也可以使用類似的腳本型方法來保護 現有的 Azure 虛擬 WAN 中樞。 雖然防火牆管理員可以將中樞轉換成安全中樞,但不支援透過入口網站跨可用性區域部署 Azure 防火牆。 若要在所有三個可用性區域中部署 Azure 防火牆,請使用下列 PowerShell 腳本,將現有的虛擬 WAN 中樞轉換為安全中樞。

Note

此程序會部署新的 Azure 防火牆。 您無法在沒有可用性區域的情況下,將現有的 Azure 防火牆升級為可用性區域。 您必須先刪除中樞的現有 Azure 防火牆,然後使用此程序再次加以建立。

# Variable definition
$RG = "vwan-rg"
$Location = "westeurope"
$VwanName = "vwan"
$HubName =  "hub1"
$FirewallName = "azfw1"
$FirewallTier = "Standard" # or "Premium"
$FirewallPolicyName = "VwanFwPolicy"

# Get references to vWAN and vWAN Hub to convert #
$Vwan = Get-AzVirtualWan -ResourceGroupName $RG -Name $VwanName
$Hub = Get-AzVirtualHub -ResourceGroupName  $RG -Name $HubName

# Create a new Firewall Policy #
$FWPolicy = New-AzFirewallPolicy -Name $FirewallPolicyName -ResourceGroupName $RG -Location $Location

# Create a new Firewall Public IP #
$AzFWPIPs = New-AzFirewallHubPublicIpAddress -Count 1
$AzFWHubIPs = New-AzFirewallHubIpAddress -PublicIP $AzFWPIPs

# Create Firewall instance #
$AzFW = New-AzFirewall -Name $FirewallName -ResourceGroupName $RG -Location $Location `
            -VirtualHubId $Hub.Id -FirewallPolicyId $FWPolicy.Id `
            -SkuName "AZFW_Hub" -HubIPAddress $AzFWHubIPs `
            -SkuTier $FirewallTier `
            -Zone 1,2,3

執行此指令碼之後,可用性區域應該會出現在安全中樞屬性內,如下列螢幕擷取畫面所示:

安全虛擬中樞可用性區域的螢幕擷取畫面。

部署 Azure 防火牆之後,您必須完成先前部署 Azure 防火牆和設定自定義路由 一節中所述的設定步驟,以確保適當的路由和安全性。

後續步驟