はじめに
Warning
本ブログで取り上げた方法は非推奨となりました。プロキシサーバやファイアウォールを利用して FQDN で通信を許可する方法、または Azure Firewall の WindowsUpdate サービスタグを使う必要があります。
- Virtual network service tags
- The Azure Update Delivery service tag used for accessing Windows Updates is marked for deprecation and in the future it will be decommissioned.
- Changes coming to the Azure Update Delivery service tag
Service Tag のドキュメントに AzureUpdateDelivery というタグが追加されました。この Service Tag には Windows Update のメタデータサービスで利用されている IP アドレスが含まれているようです。
ただしドキュメントに記載されている通り、この Service Tag だけでは Windows Update は成功せず、Windows Update のファイルをダウンロードさせるためには AzureFrontDoor.FirstParty というサービスタグも追加する必要があります。
今まで、NSG で Windows Update への通信を許可するためには、宛先 Internet で HTTP と HTTPS を許可するルールが必要でした。ですがこのルールは Windows Update だけでなくインターネットへの Web 通信も許可しますので、Windows Update を許可したいという目的に対してやりすぎでした。そして Windows Update “だけ"を許可することが要件の場合には、プロキシサーバやAzure Firewall、FQDN での通信制御をサポートする NVA などのそれなりの費用がかかる実装が必要でした。それが 今回の Service Tag の実装によって、無料の NSG でインターネット全許可よりもマシな形で Windows Update を許可できるようになりました。地味ですがとてもうれしいアップデートです。
Note
2023/04/24 追記:インターネットに HTTPS と HTTP を全許可するよりもマシな方法ではありますが、AzureFrontDoor.FirstParty も許可する必要があるため、Windows Update だけが許可されるわけではありません。Windows Update だけを許可したい場合には、引き続き FQDN での通信制御をサポートする方式を利用する必要があります。
検証
実際に動作確認してみました。
Windows Update を許可するルールが存在しない場合
まずは Outbound 通信を全拒否するルールを設定した NSG で動作確認しました。
この NSG を適用している WIndows Server で Windows Update を実行したら、エラーコード80072ee2で Windows Update が失敗しました。インターネットに全くアクセスできないので想定通りの結果です。
Windows Update を許可するルールが存在する場合
Windows Update を許可するために必要なルールは AzureUpdateDelivery への TCP/443 と AzureFrontDoor.FirstParty への TCP/80 です。2021年8月現在、Azure Portal は AzureUpdateDelivery の Service Tag をサポートしていませんので、今回は PowerShell でルールを追加しました。
$nsg = Get-AzNetworkSecurityGroup -Name stagtest -ResourceGroupName nsgtest
$nsg | Add-AzNetworkSecurityRuleConfig -Name AzureUpdateDelivery -Description "AzureUpdateDelivery" -Access Allow `
-Protocol Tcp -Direction Outbound -Priority 100 -SourceAddressPrefix "*" -SourcePortRange * `
-DestinationAddressPrefix AzureUpdateDelivery -DestinationPortRange 443
$nsg | Add-AzNetworkSecurityRuleConfig -Name AzureFrontDoor.FirstParty -Description "AzureFrontDoor.FirstParty" -Access Allow `
-Protocol Tcp -Direction Outbound -Priority 110 -SourceAddressPrefix "*" -SourcePortRange * `
-DestinationAddressPrefix AzureFrontDoor.FirstParty -DestinationPortRange 80
$nsg | Set-AzNetworkSecurityGroup
コマンド実行後の NSG は次の通りです。
この状態で Windows Update を実行したら、最新の更新が見つかりそのまま無事に適用できました。すばらしい。
まとめ
本エントリでは、ドキュメントに追加された Windows Update を許可するための Service Tag を紹介したうえで、簡単に動作確認しました。
Azure 上で Windows Server を動かしている場合、特にプロキシサーバやファイアウォールが存在しないような環境の場合には、毎月の更新プログラムの適用や Windows Defender の定義ファイルの更新のために必要となる Windows Update への通信だけを許可する方法が悩みの種でした。今回追加された Service Tag によって、NSG だけで宛先を絞った形で Windows Update を許可できるようになりました。積極的に活用して、必要な通信だけを NSG で許可していきましょう。