はじめに
Ignite Fall 2021 にて Azure Virtual Network Manager がプレビューになりました。
https://docs.microsoft.com/en-us/azure/virtual-network-manager/
Azure Virtual Network Manager が提供する機能は次の3つです。
- Hub and Spoke 型 VNet Peering の構築
- フルメッシュ型 VNet Peering の構築
- NSG よりも優先度の高い Security Admin Rule の設定
1と2は、手作業で出来る VNet Peering の作業を簡略化してくれるものです。3は Azure Virtual Network Manager でのみ実現できる機能です。というわけで3を試しました。
Azure Virtual Network Manager の作成
まずは Azure Virtual Network Manager(AVNM) 自体を作ります。作る際に AVNM が管理する対象をスコープとして指定します。
また、AVNM が利用する機能を選択します。Connectivity と Security Admin を選択できます。
今回はサブスクリプションをスコープとして、Connectivity と Security Admin の両方を利用する AVNM を作りました。
Network Group の作成
AVNM の機能を適用する VNet を Network Group として束ねます。束ね方は VNet を指定する静的な割り当てと Azure Policy のような構文で VNet を指定する動的な割り当てがサポートされています。
Excluding elements from dynamic membership in Azure Virtual Network Manager (Preview)
今回は静的な割り当てを利用して、複数の VNet を Network Group として束ねました。
Security admin configuration の作成
Security Admin Rule を VNet に適用するためには、Security Admin Rule と、Security Admin Rule の集合である Rule collections、そして Rule collections の集合体であり VNet に適用する security admin configuration の3つを作る必要があります。
今回は Security admin configuration と Rule collections を Azure Portal から作り、その中に PowerShell で Security Admin Rule を追加しました。
$collection = @{
Name = 'Reject-untrust-traffic'
ResourceGroupName = 'anm'
NetworkManagerName = 'anm'
ConfigName = 'force-nsg'
}
$rulecollection = Get-AzNetworkManagerSecurityAdminRuleCollection @collection
$sourceip = @{
AddressPrefix = 'Internet'
AddressPrefixType = 'ServiceTag'
}
$sourceprefix = New-AzNetworkManagerAddressPrefixItem @sourceip
$destinationip = @{
AddressPrefix = 'VirtualNetwork'
AddressPrefixType = 'ServiceTag'
}
$destinationprefix = New-AzNetworkManagerAddressPrefixItem @destinationip
[System.Collections.Generic.List[string]]$sourcePortList = @()
$sourcePortList.Add("0-65535")
[System.Collections.Generic.List[string]]$destinationPortList = @()
$destinationPortList.Add("3389")
$rule = @{
Name = 'Block_RDP_From_Internet'
ResourceGroupName = 'anm'
NetworkManagerName = 'anm'
SecurityAdminConfigurationName = 'force-nsg'
RuleCollectionName = $rulecollection.Name
Protocol = 'TCP'
Access = 'Deny'
Priority = '100'
Direction = 'Inbound'
Source = $sourceprefix
SourcePortRange = $sourcePortList
Destination = $destinationprefix
DestinationPortRange = $destinationPortList
}
上記のとおり、Internet から VirtualNetwork への RDP を拒否する Security Admin Rule が設定されました。
security admin configuration のデプロイ
作成した security admin configuration を VNet にデプロイします。デプロイする際には、どの security admin configuration をどのリージョンに展開するかを指定します。
今回は作成した force-nsg という security admin configuration を AVNM がサポートする9リージョンに展開しました。Network Group 内に AVNM がサポートしない仮想ネットワークが存在する場合、その仮想ネットワークには security admin rule はデプロイされません。
動作確認
仮想マシンであれば、デプロイされた security admin rule は Network の確認画面に表示されます。今回作成した Internet からの RDP 全拒否 security admin rule が NSG のルールの下に表示されました。
NSG で 特定 IP からの RDP を許可しているにも関わらず、security admin rule で Internet からの RDP が拒否されているため、特定 IP からの RDP ができなくなりました。大成功です。
まとめ
プレビューになった Azure Virtual Network Manager を試しました。AVNM は、すべての NSG に共通のルールを追加したいという要望を実現できるサービスです。セキュリティシステムとの通信を許可したい、C&Cサーバや怪しいグローバル IP アドレスへの通信を拒否したいなどの要件で、ネットワーク管理者やセキュリティ管理者がすべての NSG に同じルールを強制したいケースはあると思います。そんな時に使うと便利なサービスだと思います。