Twitterで「NSGでWindows Updateを許可する方法」という記事を見つけたので検証を行った結果をまとめました。
まずはNSGでできることとWindows Updateの通信の説明を簡単に行い、問題点、解決法、実装、をまとめました。
実装は2021年10月31日時点でGUIとCLI(PowerShell)を組み合わせて行うしかありません。
#NSGでできること
5タプル(条件)により通信を制御できます。
##5タプルとは
1.Source IP Address
2.Destination IP Address
3.Protocol
4.Source Port
5.Destination Port
の5つです。
#Windows Upadateの通信
以下の2つの手順を自動で行います。
1.Updateを行う対象マシンが、自身に必要なWindows UpdateのメタデータをTCP443番ポート(https)を使いFQDN宛に通信し取得する
2.実際に必要なUpdateのデータをTCP80番(http)を使いFQDN宛に通信しダウンロードしてインストールを行う
#問題点
NSGは前述の通り5タプルでの通信制御なのでFQDNでの通信制御ができません。
現状FQDNでの通信をAzure上のサービスで自由に制御しようと思うとAzure Firewallが必要です。
Azure Firewallは通信負荷を自動で検出しスケールアウトしてくれる非常に便利なサービスですが、利用の有無に関わらずデプロイ直後から月10万円近くかかる機能ですのでWindows Updateの制御のみで費用対効果は出にくいサービスと思います。
NSGで制御できれば良いのですが、Windows Updateで利用する宛先のIPアドレスは公表されていないので実質不可能である、というのが問題点です。
#解決策
NSGの通信制御方法、5タプルのSource IP AddressとDestination IP Addressですが、ここはIPアドレス以外にAzure独自の機能のサービスタグをいう機能があり、このサービスタグにWindows Updateに必要なFQDN郡が追加されました!
この新たなサービスタグを利用してWindows UpdateをNSGで許可すること(=本記事)がこの問題点の解決策です。
#実装
それでは実装していきますが、まずは前提の設定から確認します。
##前提
NSGで送信方向がロックダウン(Any Any Deny)されている状況を前提とします。
送信方向がAny Any Allowの場合であればそもそもWindows Updateも許可されているので今回の記事には当てはまりません。
送信方向ロックダウンとは具体的には以下の状況です。
赤字で囲まれた部分、[名前:DenyAllOutBound]が送信方向ロックダウンの設定値です。
インターネットへの不要な通信をできないようにしたい、というセキュリティポリシーのある環境でよく見る設定です。
この状況でWindows Updateを行うと当然失敗します。
Azure上のWindows VMはデプロイ直後は英語なので日本語化(ローカライズ)作業が発生することもありますが、この送信方向ロックダウンのサブネット上のVMでは日本語の言語パックのダウンロードも失敗します。
##GUI実装
送信セキュリティ規則の[+ 追加]をクリックし、以下の図のように設定します。
赤枠の部分がポイントです。
この設定はWindows Updateでも80番の通信を許可する設定になります。
正しく設定できると以下のような画面になります。
##CLI実装
次はPowerShellでしか実装できない部分です。
PowerShellを管理者権限じ起動し、以下のコマンドを実行します。
$nsgName="[設定追加対象NSG名]"
$rgName="[NSGの存在するリソースグループ名]"
$nsg=Get-AzNetworkSecurityGroup -Name $nsgName -ResourceGroupName $rgName
$nsg | Add-AzNetworkSecurityRuleConfig -Name AllowAzureUpdateDeliveryHttpsOutBound -Access Allow -Protocol TCP -Direction Outbound -Priority 202 -SourceAddressPrefix "*" -SourcePortRange "*" -DestinationAddressPrefix AzureUpdateDelivery -DestinationPortRange "443"
$nsg | Set-AzNetworkSecurityGroup
これにてWindows Update、ローカライズが送信方向をロックダウンしていても行えるようになりました。
検証としてWindows Server 2022、Windows 10、Windows 11をこのNSG設定で日本語化を行いましたが、すべてうまくいきました。
今回はここまで。