Tutorial: Proteger o hub virtual com Azure PowerShell

Neste tutorial, vai criar uma instância WAN Virtual com um Hub Virtual numa região e implementar um Azure Firewall no Hub Virtual para proteger a conectividade. Neste exemplo, demonstra a conectividade segura entre Redes Virtuais. O tráfego entre redes virtuais e ramos site a site, ponto a site ou ExpressRoute também é suportado pelo Hub Seguro Virtual.

Neste tutorial, ficará a saber como:

  • Implementar a WAN virtual
  • Implementar Azure Firewall e configurar o encaminhamento personalizado
  • Testar conectividade

Importante

Uma WAN Virtual é uma coleção de hubs e serviços disponibilizados no hub. Pode implementar o número de WANs Virtuais de que precisar. Num hub WAN Virtual, existem vários serviços, como VPN, ExpressRoute, etc. Cada um destes serviços é implementado automaticamente em Zonas de Disponibilidadeperceitar Azure Firewall, se a região suportar Zonas de Disponibilidade. Para atualizar um Hub WAN Virtual do Azure existente para um Hub Seguro e utilizar o Azure Firewall Zonas de Disponibilidade, tem de utilizar Azure PowerShell, conforme descrito mais adiante neste artigo.

Pré-requisitos

  • Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

  • PowerShell 7

    Este tutorial requer que execute Azure PowerShell localmente no PowerShell 7. Para instalar o PowerShell 7, veja Migrar do Windows PowerShell 5.1 para o PowerShell 7.

  • A versão do módulo "Az.Network" tem de ser 4.17.0 ou superior.

Iniciar sessão no Azure

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

Implementação de WAN Virtual inicial

Como primeiro passo, tem de definir algumas variáveis e criar o grupo de recursos, a instância da WAN virtual e o hub virtual:

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

# Create Resource Group, Virtual WAN and Virtual Hub
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"

Crie duas redes virtuais e ligue-as ao hub como spokes:

# 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

Neste momento, tem uma WAN Virtual totalmente funcional que fornece conectividade qualquer a qualquer. Para melhorá-la com segurança, tem de implementar uma Azure Firewall em cada Hub Virtual. As Políticas de Firewall podem ser utilizadas para gerir eficientemente a instância de Azure Firewall da WAN virtual. Assim, também é criada uma política de firewall neste exemplo:

# 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

Nota

O seguinte comando de criação da Firewall não utiliza Zonas de Disponibilidade. Se quiser utilizar esta funcionalidade, é necessário um parâmetro adicional -Zone . É fornecido um exemplo na secção de atualização no final deste artigo.

A ativação do registo do Azure Firewall para o Azure Monitor é opcional, mas neste exemplo utiliza os registos da Firewall para provar que o tráfego está a atravessar a firewall:

# Optionally, enable looging 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

Implementar Azure Firewall e configurar o encaminhamento personalizado

Nota

Esta é a configuração implementada ao proteger a conectividade do portal do Azure com o Azure Firewall Manager quando a definição "Inter-hub" está definida como desativada. Para obter instruções sobre como configurar o encaminhamento com o PowerShell quando "Inter-hub" está definido como ativado, veja Ativar a intenção de encaminhamento.

Agora tem uma Azure Firewall no hub, mas ainda precisa de modificar o encaminhamento para que o WAN Virtual envie o tráfego das redes virtuais e dos ramos através da firewall. Pode fazê-lo em dois passos:

  1. Configure todas as ligações de rede virtual (e ligações de ramo, se existirem) para propagar para a None Tabela de Rotas. O efeito desta configuração é que outras redes virtuais e ramos não irão aprender os seus prefixos, pelo que não tem qualquer encaminhamento para aceder às mesmas.
  2. Agora pode inserir rotas estáticas na Default Tabela de Rotas (onde todas as redes virtuais e ramos estão associados por predefinição), para que todo o tráfego seja enviado para o Azure Firewall.

Comece com o primeiro passo para configurar as ligações de rede virtual para propagar para a None Tabela de Rotas:

# 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

Agora, pode continuar com o segundo passo para adicionar as rotas estáticas à Default tabela de rotas. Neste exemplo, aplica a configuração predefinida que o Azure Firewall Manager geraria ao proteger a conectividade num WAN Virtual, mas pode alterar a lista de prefixos na rota estática para se ajustar aos seus requisitos específicos:

# 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)

Nota

A cadeia "all_traffic" como valor para o parâmetro "-Name" no comando New-AzVHubRoute acima tem um significado especial: se utilizar esta cadeia exata, a configuração aplicada neste artigo será refletida corretamente no Portal do Azure (Firewall Manager --> Hubs virtuais --> [O Seu Hub] --> Configuração de Segurança). Se for utilizado um nome diferente, a configuração pretendida será aplicada, mas não será refletida no portal do Azure.

Ativar a intenção de encaminhamento

Se quiser enviar tráfego entre hubs e entre regiões através de Azure Firewall implementados no hub de WAN Virtual, pode ativar a funcionalidade de intenção de encaminhamento. Para obter mais informações sobre a intenção de encaminhamento, veja Documentação da Intenção de Encaminhamento.

Nota

Esta é a configuração implementada ao proteger a conectividade do Portal do Azure com o Azure Firewall Manager quando a definição "Interhub" está definida como ativada.

# 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)

Se estiver a utilizar prefixos não RFC1918 no seu WAN Virtual como 40.0.0.0/24 no seu Rede Virtual ou no local, adicione uma rota adicional na defaultRouteTable após a conclusão da configuração da intenção de encaminhamento. Certifique-se de que atribui o nome private_traffic a esta rota. Caso contrário, se o nome da rota for apresentado, a configuração pretendida será aplicada, mas não será refletida no portal do Azure.

# 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

Testar conectividade

Agora tem um hub seguro totalmente operacional. Para testar a conectividade, precisa de uma máquina virtual em cada rede virtual spoke ligada ao hub:

# 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")

A configuração predefinida na política de firewall é remover tudo. Por isso, tem de configurar algumas regras. Comece com as regras DNAT, para que as máquinas virtuais de teste estejam acessíveis através do endereço IP público da Firewall:

# 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

Agora pode configurar algumas regras de exemplo. Defina uma regra de rede que permita o tráfego SSH, bem como uma regra de aplicação que permita o acesso à Internet ao Nome ifconfig.code Domínio Completamente Qualificado. Este URL devolve o endereço IP de origem que vê no pedido HTTP:

# 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

Antes de enviar qualquer tráfego, pode inspecionar as rotas efetivas das máquinas virtuais. Devem conter os prefixos aprendidos no WAN Virtual (0.0.0.0/0 mais RFC1918), mas não o prefixo do outro spoke:

# 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

Agora, gere o tráfego de uma Máquina Virtual para a outra e verifique se foi removido no Azure Firewall. Nos seguintes comandos SSH, tem de aceitar as impressões digitais das máquinas virtuais e fornecer a palavra-passe que definiu quando criou as máquinas virtuais. Neste exemplo, vai enviar cinco pacotes de pedidos de eco ICMP da máquina virtual no spoke1 para spoke2, além de uma tentativa de ligação TCP na porta 22 com o utilitário nc Linux (com os -vz sinalizadores, envia apenas um pedido de ligação e mostra o resultado). Deverá ver o ping a falhar e a tentativa de ligação TCP na porta 22 com êxito, uma vez que é permitida pela regra de rede que configurou anteriormente:

# 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"

Também pode verificar o tráfego da Internet. Os pedidos HTTP através do utilitário curl para o FQDN permitido na política de firewall (ifconfig.co) devem funcionar, mas os pedidos HTTP para qualquer outro destino devem falhar (neste exemplo, irá testar com 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"

A forma mais fácil de verificar se os pacotes são ignorados pela firewall é verificar os registos. Uma vez que configurou o Azure Firewall para enviar registos para o Azure Monitor, pode utilizar o Linguagem de Pesquisa Kusto para obter os registos relevantes do Azure Monitor:

Nota

Os registos podem demorar cerca de 1 minuto a serem enviados para o Azure Monitor

# 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

No comando anterior, deverá ver entradas diferentes:

  • A sua ligação SSH está a ser DNAT'ed
  • Pacotes ICMP removidos entre as VMs nos spokes (10.1.1.4 e 10.1.2.4)
  • Ligações SSH permitidas entre as VMs nos spokes

Aqui, um resultado de exemplo produzido pelo comando acima:

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

Se quiser ver os registos das regras da aplicação (descrevendo as ligações HTTP permitidas e negadas) ou alterar a forma como os registos são apresentados, pode tentar com outras consultas KQL. Pode encontrar alguns exemplos nos registos do Azure Monitor para Azure Firewall.

Limpar os recursos

Para eliminar o ambiente de teste, pode remover o grupo de recursos com todos os objetos contidos:

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

Atualizar um Hub existente com Zonas de Disponibilidade

O procedimento anterior utiliza Azure PowerShell para criar um novo Hub de WAN Virtual do Azure e, em seguida, converte-o imediatamente num Hub Seguro com Azure Firewall. Uma abordagem semelhante pode ser aplicada a um Hub do Azure WAN Virtual existente. O Firewall Manager também pode ser utilizado para a conversão, mas não é possível implementar Azure Firewall em Zonas de Disponibilidade sem uma abordagem baseada em scripts. Pode utilizar o seguinte fragmento de código para converter um Hub WAN Virtual do Azure existente num Hub Seguro, com um Azure Firewall implementado nos três Zonas de Disponibilidade.

# 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

Depois de executar este script, Zonas de Disponibilidade devem aparecer nas propriedades do hub protegido, conforme mostrado na seguinte captura de ecrã:

Captura de ecrã das zonas de disponibilidade do hub virtual protegido.

Após a implementação do Azure Firewall, um procedimento de configuração tem de ser concluído conforme descrito na secção anterior Implementar Azure Firewall e configurar o encaminhamento personalizado.

Passos seguintes