このクイックスタートでは、Bicep を使用して Azure Firewall とファイアウォール ポリシーを作成します。 ファイアウォール ポリシーには、www.microsoft.com
への接続を許可するアプリケーション ルールと、WindowsUpdate FQDN タグを使用して Windows Update への接続を許可するルールを含めます。 ネットワーク ルールで、タイム サーバー (13.86.101.172) への UDP 接続を許可します。
また、ルールでは、IP グループを使用してソース IP アドレスを定義します。
Bicep は、宣言型の構文を使用して Azure リソースをデプロイするドメイン固有言語 (DSL) です。 簡潔な構文、信頼性の高いタイプ セーフ、およびコードの再利用のサポートが提供されます。 Bicep により、Azure のコード ソリューションとしてのインフラストラクチャに最適な作成エクスペリエンスが実現します。
Azure Firewall Manager については、「Azure Firewall Manager とは」を参照してください。
Azure Firewall については、「Azure Firewall とは」を参照してください。
IP グループについては、「Azure Firewall での IP グループ」を参照してください。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
Bicep ファイルを確認する
この Bicep によって、ハブ仮想ネットワークと、そのシナリオをサポートするために必要なリソースが作成されます。
このクイックスタートで使用される Bicep ファイルは、Azure クイックスタート テンプレートからのものです。
@description('Virtual network name')
param virtualNetworkName string = 'vnet${uniqueString(resourceGroup().id)}'
@description('Azure Firewall name')
param firewallName string = 'fw${uniqueString(resourceGroup().id)}'
@description('Number of public IP addresses for the Azure Firewall')
@minValue(1)
@maxValue(100)
param numberOfPublicIPAddresses int = 2
@description('Zone numbers e.g. 1,2,3.')
param availabilityZones array = []
@description('Location for all resources.')
param location string = resourceGroup().location
param infraIpGroupName string = '${location}-infra-ipgroup-${uniqueString(resourceGroup().id)}'
param workloadIpGroupName string = '${location}-workload-ipgroup-${uniqueString(resourceGroup().id)}'
param firewallPolicyName string = '${firewallName}-firewallPolicy'
var vnetAddressPrefix = '10.10.0.0/24'
var azureFirewallSubnetPrefix = '10.10.0.0/25'
var publicIPNamePrefix = 'publicIP'
var azurepublicIpname = publicIPNamePrefix
var azureFirewallSubnetName = 'AzureFirewallSubnet'
var azureFirewallSubnetId = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, azureFirewallSubnetName)
var azureFirewallPublicIpId = resourceId('Microsoft.Network/publicIPAddresses', publicIPNamePrefix)
var azureFirewallIpConfigurations = [for i in range(0, numberOfPublicIPAddresses): {
name: 'IpConf${i}'
properties: {
subnet: ((i == 0) ? json('{"id": "${azureFirewallSubnetId}"}') : json('null'))
publicIPAddress: {
id: '${azureFirewallPublicIpId}${i + 1}'
}
}
}]
resource workloadIpGroup 'Microsoft.Network/ipGroups@2022-01-01' = {
name: workloadIpGroupName
location: location
properties: {
ipAddresses: [
'10.20.0.0/24'
'10.30.0.0/24'
]
}
}
resource infraIpGroup 'Microsoft.Network/ipGroups@2022-01-01' = {
name: infraIpGroupName
location: location
properties: {
ipAddresses: [
'10.40.0.0/24'
'10.50.0.0/24'
]
}
}
resource vnet 'Microsoft.Network/virtualNetworks@2022-01-01' = {
name: virtualNetworkName
location: location
tags: {
displayName: virtualNetworkName
}
properties: {
addressSpace: {
addressPrefixes: [
vnetAddressPrefix
]
}
subnets: [
{
name: azureFirewallSubnetName
properties: {
addressPrefix: azureFirewallSubnetPrefix
}
}
]
enableDdosProtection: false
}
}
resource publicIpAddress 'Microsoft.Network/publicIPAddresses@2022-01-01' = [for i in range(0, numberOfPublicIPAddresses): {
name: '${azurepublicIpname}${i + 1}'
location: location
sku: {
name: 'Standard'
}
properties: {
publicIPAllocationMethod: 'Static'
publicIPAddressVersion: 'IPv4'
}
}]
resource firewallPolicy 'Microsoft.Network/firewallPolicies@2022-01-01'= {
name: firewallPolicyName
location: location
properties: {
threatIntelMode: 'Alert'
}
}
resource networkRuleCollectionGroup 'Microsoft.Network/firewallPolicies/ruleCollectionGroups@2022-01-01' = {
parent: firewallPolicy
name: 'DefaultNetworkRuleCollectionGroup'
properties: {
priority: 200
ruleCollections: [
{
ruleCollectionType: 'FirewallPolicyFilterRuleCollection'
action: {
type: 'Allow'
}
name: 'azure-global-services-nrc'
priority: 1250
rules: [
{
ruleType: 'NetworkRule'
name: 'time-windows'
ipProtocols: [
'UDP'
]
destinationAddresses: [
'13.86.101.172'
]
sourceIpGroups: [
workloadIpGroup.id
infraIpGroup.id
]
destinationPorts: [
'123'
]
}
]
}
]
}
}
resource applicationRuleCollectionGroup 'Microsoft.Network/firewallPolicies/ruleCollectionGroups@2022-01-01' = {
parent: firewallPolicy
name: 'DefaultApplicationRuleCollectionGroup'
dependsOn: [
networkRuleCollectionGroup
]
properties: {
priority: 300
ruleCollections: [
{
ruleCollectionType: 'FirewallPolicyFilterRuleCollection'
name: 'global-rule-url-arc'
priority: 1000
action: {
type: 'Allow'
}
rules: [
{
ruleType: 'ApplicationRule'
name: 'winupdate-rule-01'
protocols: [
{
protocolType: 'Https'
port: 443
}
{
protocolType: 'Http'
port: 80
}
]
fqdnTags: [
'WindowsUpdate'
]
terminateTLS: false
sourceIpGroups: [
workloadIpGroup.id
infraIpGroup.id
]
}
]
}
{
ruleCollectionType: 'FirewallPolicyFilterRuleCollection'
action: {
type: 'Allow'
}
name: 'Global-rules-arc'
priority: 1202
rules: [
{
ruleType: 'ApplicationRule'
name: 'global-rule-01'
protocols: [
{
protocolType: 'Https'
port: 443
}
]
targetFqdns: [
'www.microsoft.com'
]
terminateTLS: false
sourceIpGroups: [
workloadIpGroup.id
infraIpGroup.id
]
}
]
}
]
}
}
resource firewall 'Microsoft.Network/azureFirewalls@2021-03-01' = {
name: firewallName
location: location
zones: ((length(availabilityZones) == 0) ? null : availabilityZones)
dependsOn: [
vnet
publicIpAddress
workloadIpGroup
infraIpGroup
networkRuleCollectionGroup
applicationRuleCollectionGroup
]
properties: {
ipConfigurations: azureFirewallIpConfigurations
firewallPolicy: {
id: firewallPolicy.id
}
}
}
Bicep ファイルには複数の Azure リソースが定義されています。
- Microsoft.Network/ipGroups
- Microsoft.Network/firewallPolicies
- Microsoft.Network/firewallPolicies/ruleCollectionGroups
- Microsoft.Network/azureFirewalls
- Microsoft.Network/virtualNetworks
- Microsoft.Network/publicIPAddresses
Bicep ファイルをデプロイする
Bicep ファイルを
main.bicep
としてローカル コンピューターに保存します。Azure CLI または Azure PowerShell のどちらかを使用して Bicep ファイルをデプロイします。
az group create --name exampleRG --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep --parameters firewallName=<firewall-name>
注意
<firewall-name> を Azure Firewall の名前に置き換えます。
デプロイが完了すると、デプロイが成功したことを示すメッセージが表示されます。
デプロイされているリソースを確認する
Azure CLI または Azure PowerShell を使用して、デプロイされたリソースを確認します。
az resource list --resource-group exampleRG
リソースをクリーンアップする
ファイアウォールと共に作成したリソースが不要になった場合は、リソース グループを削除します。 ファイアウォールとすべての関連リソースが削除されます。
az group delete --name exampleRG