NSG の Service Tag を利用して Windows Update の通信を許可する
azure
Published: 2021-08-28

はじめに

Service Tag のドキュメントに AzureUpdateDelivery というタグが追加されました。この Service Tag には Windows Update のメタデータサービスで利用されている IP アドレスが含まれているようです。

参考:https://github.com/MicrosoftDocs/azure-docs/compare/eb23601..b854e93#diff-633ac72c1050041992f47f68aeb66f0c3af17354544b0c867cea9e7177b52c77

ただしドキュメントに記載されている通り、この 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 を許可できるようになりました。地味ですがとてもうれしいアップデートです。

検証

実際に動作確認してみました。

Windows Update を許可するルールが存在しない場合

まずは Outbound 通信を全拒否するルールを設定した NSG で動作確認しました。

全拒否の NSG

この NSG を適用している WIndows Server で Windows Update を実行したら、エラーコード80072ee2で Windows Update が失敗しました。インターネットに全くアクセスできないので想定通りの結果です。

全拒否時の 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 に必要なルールを追加した NSG

この状態で Windows Update を実行したら、最新の更新が見つかりそのまま無事に適用できました。すばらしい。

見つかった更新

適用後の状態

まとめ

本エントリでは、ドキュメントに追加された Windows Update を許可するための Service Tag を紹介したうえで、簡単に動作確認しました。

Azure 上で Windows Server を動かしている場合、特にプロキシサーバやファイアウォールが存在しないような環境の場合には、毎月の更新プログラムの適用や Windows Defender の定義ファイルの更新のために必要となる Windows Update への通信だけを許可する方法が悩みの種でした。今回追加された Service Tag によって、NSG だけで宛先を絞った形で Windows Update を許可できるようになりました。積極的に活用して、必要な通信だけを NSG で許可していきましょう。