Rychlý start: Nasazení služby Azure Firewall s Zóny dostupnosti – Bicep
Článek 13. 06. 2024
Přispěvatelé: 2
Váš názor
V tomto článku
Požadavky
Kontrola souboru Bicep
Nasazení souboru Bicep
Kontrola nasazených prostředků
Vyčištění prostředků
Další kroky
Zobrazit ještě 2
V tomto rychlém startu použijete Bicep k nasazení služby Azure Firewall ve třech Zóny dostupnosti.
Bicep je jazyk specifický pro doménu (DSL), který k nasazování prostředků Azure používá deklarativní syntaxi. Poskytuje stručnou syntaxi, spolehlivou bezpečnost typů a podporu pro opakované použití kódu. Bicep nabízí nejlepší prostředí pro vytváření obsahu pro řešení infrastruktury jako kódu v Azure.
Soubor Bicep vytvoří testovací síťové prostředí s bránou firewall. Síť má jednu virtuální síť se třemi podsítěmi: AzureFirewallSubnet , ServersSubnet a JumpboxSubnet . Podsíť ServersSubnet a JumpboxSubnet mají jeden dvoujádrový virtuální počítač s Windows Serverem.
Brána firewall je v podsíti AzureFirewallSubnet a má kolekci pravidel aplikace s jedním pravidlem, které umožňuje přístup k www.microsoft.com
.
Trasa definovaná uživatelem směruje síťový provoz z podsítě ServersSubnet přes bránu firewall, kde se použijí pravidla brány firewall.
Další informace o službě Azure Firewall najdete v tématu Nasazení a konfigurace služby Azure Firewall pomocí webu Azure Portal .
Tento soubor Bicep vytvoří bránu Azure Firewall s Zóny dostupnosti společně s potřebnými prostředky pro podporu služby Azure Firewall.
Soubor Bicep použitý v tomto rychlém startu pochází ze šablon Azure Pro rychlý start.
@description('virtual network name' )
param virtualNetworkName string = 'test-vnet'
@description('Location for all resources.' )
param location string = resourceGroup() .location
@description('Username for the Virtual Machine.' )
param adminUsername string
@description('Password for the Virtual Machine.' )
@secure()
param adminPassword string
@description('Availability zone numbers e.g. 1,2,3.' )
param availabilityZones array = [
'1'
'2'
'3'
]
@description('Number of public IP addresses for the Azure Firewall' )
@minValue(1 )
@maxValue(100 )
param numberOfFirewallPublicIPAddresses int = 1
@description('Size of the virtual machine.' )
param jumpBoxSize string = 'Standard_D2s_v3'
@description('Size of the virtual machine.' )
param serverSize string = 'Standard_D2s_v3'
var vnetAddressPrefix = '10.0.0.0/16'
var serversSubnetPrefix = '10.0.2.0/24'
var azureFirewallSubnetPrefix = '10.0.1.0/24'
var jumpboxSubnetPrefix = '10.0.0.0/24'
var nextHopIP = '10.0.1.4'
var azureFirewallSubnetName = 'AzureFirewallSubnet'
var jumpBoxSubnetName = 'JumpboxSubnet'
var serversSubnetName = 'ServersSubnet'
var jumpBoxPublicIPAddressName = 'JumpHostPublicIP'
var jumpBoxNsgName = 'JumpHostNSG'
var jumpBoxNicName = 'JumpHostNic'
var jumpBoxSubnetId = resourceId('Microsoft.Network/virtualNetworks/subnets' , virtualNetworkName , jumpBoxSubnetName )
var serverNicName = 'ServerNic'
var serverSubnetId = resourceId('Microsoft.Network/virtualNetworks/subnets' , virtualNetworkName , serversSubnetName )
var storageAccountName = '${uniqueString(resourceGroup() .id ) } sajumpbox'
var azfwRouteTableName = 'AzfwRouteTable'
var firewallName = 'firewall1'
var publicIPNamePrefix = 'publicIP'
var azureFirewallSubnetId = resourceId('Microsoft.Network/virtualNetworks/subnets' , virtualNetworkName , azureFirewallSubnetName )
var azureFirewallSubnetJSON = json('{"id": "${azureFirewallSubnetId } "}' )
var networkSecurityGroupName = '${serversSubnetName } -nsg'
var azureFirewallIpConfigurations = [for i in range(0 , numberOfFirewallPublicIPAddresses ) : {
name : 'IpConf${i } '
properties : {
subnet : ((i == 0 ) ? azureFirewallSubnetJSON : json('null ' ) )
publicIPAddress : {
id : publicIPAddress [i ].id
}
}
}]
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-08-01' = {
name : storageAccountName
location : location
sku : {
name : 'Standard_LRS'
}
kind : 'Storage'
properties : {}
}
resource azfwRouteTable 'Microsoft.Network/routeTables@2021-03-01' = {
name : azfwRouteTableName
location : location
properties : {
disableBgpRoutePropagation : false
routes : [
{
name : 'AzfwDefaultRoute'
properties : {
addressPrefix : '0.0.0.0/0'
nextHopType : 'VirtualAppliance'
nextHopIpAddress : nextHopIP
}
}
]
}
}
resource nsg 'Microsoft.Network/networkSecurityGroups@2021-03-01' = {
name : networkSecurityGroupName
location : location
properties : {}
}
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-05-01' = {
name : virtualNetworkName
location : location
tags : {
displayName : virtualNetworkName
}
properties : {
addressSpace : {
addressPrefixes : [
vnetAddressPrefix
]
}
subnets : [
{
name : jumpBoxSubnetName
properties : {
addressPrefix : jumpboxSubnetPrefix
}
}
{
name : azureFirewallSubnetName
properties : {
addressPrefix : azureFirewallSubnetPrefix
}
}
{
name : serversSubnetName
properties : {
addressPrefix : serversSubnetPrefix
routeTable : {
id : azfwRouteTable .id
}
networkSecurityGroup : {
id : nsg .id
}
}
}
]
}
}
resource publicIPAddress 'Microsoft.Network/publicIPAddresses@2021-03-01' = [for i in range(0 , numberOfFirewallPublicIPAddresses ) : {
name : '${publicIPNamePrefix } ${i +1 } '
location : location
sku : {
name : 'Standard'
}
properties : {
publicIPAllocationMethod : 'Static'
publicIPAddressVersion : 'IPv4'
}
zones : availabilityZones
}]
resource jumpBoxPublicIPAddress 'Microsoft.Network/publicIPAddresses@2021-03-01' = {
name : jumpBoxPublicIPAddressName
location : location
properties : {
publicIPAllocationMethod : 'Dynamic'
}
}
resource jumpBoxNsg 'Microsoft.Network/networkSecurityGroups@2021-05-01' = {
name : jumpBoxNsgName
location : location
properties : {
securityRules : [
{
name : 'myNetworkSecurityGroupRuleRDP'
properties : {
protocol : 'Tcp'
sourcePortRange : '*'
destinationPortRange : '3389'
sourceAddressPrefix : '*'
destinationAddressPrefix : '*'
access : 'Allow'
priority : 1000
direction : 'Inbound'
}
}
]
}
}
resource JumpBoxNic 'Microsoft.Network/networkInterfaces@2021-05-01' = {
name : jumpBoxNicName
location : location
properties : {
ipConfigurations : [
{
name : 'ipconfig1'
properties : {
privateIPAllocationMethod : 'Dynamic'
publicIPAddress : {
id : jumpBoxPublicIPAddress .id
}
subnet : {
id : jumpBoxSubnetId
}
}
}
]
networkSecurityGroup : {
id : jumpBoxNsg .id
}
}
dependsOn : [
virtualNetwork
]
}
resource ServerNic 'Microsoft.Network/networkInterfaces@2021-05-01' = {
name : serverNicName
location : location
properties : {
ipConfigurations : [
{
name : 'ipconfig1'
properties : {
privateIPAllocationMethod : 'Dynamic'
subnet : {
id : serverSubnetId
}
}
}
]
}
dependsOn : [
virtualNetwork
]
}
resource JumpBoxVM 'Microsoft.Compute/virtualMachines@2021-11-01' = {
name : 'JumpBox'
location : location
tags : {
AzSecPackAutoConfigReady : true
}
properties : {
hardwareProfile : {
vmSize : jumpBoxSize
}
storageProfile : {
imageReference : {
publisher : 'MicrosoftCBLMariner'
offer : 'cbl-mariner'
sku : 'cbl-mariner-2-gen2'
version : 'latest'
}
osDisk : {
osType : 'Linux'
createOption : 'FromImage'
diskSizeGB : 127
}
}
osProfile : {
computerName : 'JumpBox'
adminUsername : adminUsername
adminPassword : adminPassword
linuxConfiguration :{
patchSettings : {
patchMode : 'AutomaticByPlatform'
}
}
}
networkProfile : {
networkInterfaces : [
{
id : JumpBoxNic .id
}
]
}
diagnosticsProfile : {
bootDiagnostics : {
enabled : true
storageUri : storageAccount .properties .primaryEndpoints .blob
}
}
}
}
resource ServerVM 'Microsoft.Compute/virtualMachines@2021-11-01' = {
name : 'Server'
location : location
tags : {
AzSecPackAutoConfigReady : true
}
properties : {
hardwareProfile : {
vmSize : serverSize
}
storageProfile : {
imageReference : {
publisher : 'MicrosoftCBLMariner'
offer : 'cbl-mariner'
sku : 'cbl-mariner-2-gen2'
version : 'latest'
}
osDisk : {
osType : 'Linux'
createOption : 'FromImage'
diskSizeGB : 127
}
}
osProfile : {
computerName : 'Server'
adminUsername : adminUsername
adminPassword : adminPassword
linuxConfiguration :{
patchSettings : {
patchMode : 'AutomaticByPlatform'
}
}
}
networkProfile : {
networkInterfaces : [
{
id : ServerNic .id
}
]
}
diagnosticsProfile : {
bootDiagnostics : {
enabled : true
storageUri : storageAccount .properties .primaryEndpoints .blob
}
}
}
}
resource firewall 'Microsoft.Network/azureFirewalls@2021-05-01' = {
name : firewallName
location : location
zones : ((length(availabilityZones ) == 0 ) ? json('null ' ) : availabilityZones )
properties : {
ipConfigurations : azureFirewallIpConfigurations
applicationRuleCollections : [
{
name : 'appRc1'
properties : {
priority : 101
action : {
type : 'Allow'
}
rules : [
{
name : 'appRule1'
protocols : [
{
port : 80
protocolType : 'Http'
}
{
port : 443
protocolType : 'Https'
}
]
targetFqdns : [
'www.microsoft.com'
]
sourceAddresses : [
'10.0.2.0/24'
]
}
]
}
}
]
networkRuleCollections : [
{
name : 'netRc1'
properties : {
priority : 200
action : {
type : 'Allow'
}
rules : [
{
name : 'netRule1'
protocols : [
'TCP'
]
sourceAddresses : [
'10.0.2.0/24'
]
destinationAddresses : [
'*'
]
destinationPorts : [
'8000-8999'
]
}
]
}
}
]
}
dependsOn : [
virtualNetwork
publicIPAddress
]
}
V souboru Bicep je definováno více prostředků Azure:
Uložte soubor Bicep jako main.bicep
do místního počítače.
Nasaďte soubor Bicep pomocí Azure CLI nebo Azure PowerShellu.
az group create --name exampleRG --location eastus
az deployment group create --resource-group exampleRG --template-file main.bicep --parameters adminUsername= <admin-user>
New-AzResourceGroup -Name exampleRG -Location eastus
New-AzResourceGroupDeployment -ResourceGroupName exampleRG -TemplateFile ./main.bicep -adminUsername "<admin-user>"
Poznámka
Nahraďte <správcem> přihlašovací uživatelské jméno správce virtuálního počítače. Zobrazí se výzva k zadání adminPassword .
Po dokončení nasazení by se měla zobrazit zpráva, že nasazení bylo úspěšné.
Kontrola nasazených prostředků
K ověření nasazení a kontrole nasazených prostředků použijte Azure Portal, Azure CLI nebo Azure PowerShell.
az resource list --resource-group exampleRG
Get-AzResource -ResourceGroupName exampleRG
Informace o syntaxi a vlastnostech brány firewall v souboru Bicep najdete v tématu Microsoft.Network/azureFirewalls .
Pokud je už nepotřebujete, odeberte skupinu prostředků, bránu firewall a všechny související prostředky pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu.
az group delete --name exampleRG
Remove-AzResourceGroup -Name exampleRG
Dál můžete pokračovat monitorováním protokolů brány Azure Firewall.