NSG の Service Tag を利用して Windows Update の通信を許可する

azure
Published: 2021-08-28

はじめに

Warning

本ブログで取り上げた方法は非推奨となりました。プロキシサーバやファイアウォールを利用して FQDN で通信を許可する方法、または Azure Firewall の WindowsUpdate サービスタグを使う必要があります。

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 を許可できるようになりました。地味ですがとてもうれしいアップデートです。

Note

2023/04/24 追記:インターネットに HTTPS と HTTP を全許可するよりもマシな方法ではありますが、AzureFrontDoor.FirstParty も許可する必要があるため、Windows Update だけが許可されるわけではありません。Windows Update だけを許可したい場合には、引き続き FQDN での通信制御をサポートする方式を利用する必要があります。

検証

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

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 で許可していきましょう。