Azure NSGを使ってVMからの通信をWindows Updateのみに制限してみた

Azure上で仮想マシンをデプロイした場合、デフォルトの設定では仮想マシンからインターネットへのアクセスが許可された状態になります。これだとセキュリティ的にちょっとと言う事もあるかと思いますが仮想マシンからインターネットへのアクセスをすべて閉じてしまうとWindows Updateも出来なくなってしまいます。

そんな利用者向けに簡単にネットワークセキュリティグループ(NSG)の設定で対応できるようにサービスタグが追加されました。それがAzureUpdateDeliveryと言うWindows Update用のサービスタグになります。

今回はこのネットワークセキュリティグループに追加されたWindows Update用のサービスタグを利用して、仮想マシンからインターネットへのアクセスを拒否しながらWindows Updateだけ許可する設定を試してみました。またサービスタグやPowerShellを使ったネットワークセキュリティグループの設定変更内容についても簡単に纏めてみました。

※Azure FirewallでFQDNを利用したアクセス制御を行うと同様の事が可能ですがコスト的にはお高くなります。
※サービスタグはAzure Firewallでも利用されます。

スポンサーリンク

 ネットワークセキュリティグループにWindows Update用のサービスタグが追加された

 サービスタグとは

サービスタグとは指定された Azure サービスからの IP アドレス プレフィックスのグループになります。

仮想ネットワーク サービス タグ(マイクロソフト社公式)

ネットワーク セキュリティ グループまたは Azure Firewallでアクセス制御(許可や拒否)を行う際に使われます。サービス タグに含まれるIPアドレスの管理はAzure側で自動で行われるため、Azureのサービスで利用されるアドレスが変わった場合でもユーザー側で意識する事は必要ありません。

例えばAzureFrontDoor.BackendであればFrontDoorからAzureのリソースへ通信があるIPアドレスのグループになります。FrontDoorからのアクセスのみを許可したい場合は、ネットワークセキュリティグループのサービスタグでAzureFrontDoor.Backendを指定する事で実現出来ます。

※デフォルトの許可設定でもAzureLoadBalancerのサービスタグが利用されています。

AzureUpdateDeliveryがWindows Update用のサービスタグ

AzureUpdateDeliveryがWindows Update用のサービスタグになります。

こちらのサービスタグの解説を見ると、ネットワークセキュリティグループのアウトバウンド設定に以下のルールを追加する事でWindows Updateへの通信許可を行う事が出来そうです。

    • AzureUpdateDelivery: TCP、ポート 443
    • AzureFrontDoor.FirstParty: TCP、ポート 80

※AzureFrontDoor.FirstPartyを組み合わせて利用する必要があるようです。サービスタグAzureUpdateDeliveryについては2021年9月現在ではAzure Portalを利用した設定は実施出来ずPowerShell等を利用してネットワークセキュリティグループの設定を行う必要があるそうです。

ネットワークセキュリティグループにサービスタグを使ってWindows Update用の送信セキュリティ規則を追加

今回は仮想マシンからインターネットへのアクセスを拒否とWindows Updateを許可する送信セキュリティ規則を追加します。

PowerShellを使ったネットワークセキュリティグループへのセキュリティ規則追加方法

ネットワークセキュリティグループへのルール追加はGet-AzNetworkSecurityGroup、Add-AzNetworkSecurityRuleConfig、Set-AzNetworkSecurityGroupを利用して行います。各コマンドの意味は表の通りになります。

コマンド 概要 リンク
Get-AzNetworkSecurityGroup ネットワークセキュリティグループの設定情報を取得します こちら
Add-AzNetworkSecurityRuleConfig ネットワークセキュリティ規則の構成(受信規則や送信規則)をネットワークセキュリティグループの設定情報に追加します こちら
Set-AzNetworkSecurityGroup ネットワークセキュリティグループの設定を更新します こちら

Add-AzNetworkSecurityRuleConfigはルールを追加するだけで実際の設定変更処理はSet-AzNetworkSecurityGroupで実施します。

仮想マシンからインターネットへのアクセスを禁止する送信セキュリティ規則を追加

最初に仮想マシンからインターネットへのアクセスを拒否する送信セキュリティ規則を作成します。

    • 設定値
      • 規則を追加するネットワークセキュリティグループ:Win-Update-Test-NSG
      • 送信規則名:InterNetDeny
      • 優先順位:4096
      • プロトコル:Any
      • 宛先:Internet
      • アクション:拒否
      • 説明:インターネットへのアクセスを拒否
インターネットへのアクセス拒否する

こちらのPowerShellを任意のファイル名.ps1として保存しVisual StudioやPowerShellで実行します。

※事前にAzure PowerShellをインストールしておく必要があります。

#NSGの規則を更新する

$resourceGroupName = “リソースグループ名"
$NSGName ="Win-Update-Test-NSG"

# NSGの設定を取得
$nsg = Get-AzNetworkSecurityGroup -Name $NSGName -ResourceGroupName $resourceGroupName

#Internetへのアクセス拒否を追加
$nsg | Add-AzNetworkSecurityRuleConfig `
    -Name “InterNetDeny" `
    -Description “インターネットへのアクセスを拒否"`
    -Access Deny `
    -Protocol “*" `
    -Direction Outbound `
    -Priority 4096 `
    -SourceAddressPrefix “*"`
    -SourcePortRange “*" `
    -DestinationAddressPrefix “Internet" `
    -DestinationPortRange “*"

#NSGの設定を更新
$nsg | Set-AzNetworkSecurityGroup

※リソースグループ名は$resourceGroupNameとしています。ネットワークセキュリティグループのリソースグループ名を指定します。
※ネットワークセキュリティグループ名は$NSGNameとしています。

InterNetDenyと言う送信セキュリティ規則が追加されている事が分かります。

設定内容を確認すると宛先サービスタグにInternetが指定されてアクセスが拒否されている事が分かります。

仮想マシンからWindows Updateへのアクセス許可する送信セキュリティ規則を追加

次に仮想マシンからWindows Updateへのアクセス許可する送信セキュリティ規則を作成します。先ほど作成したインターネットへのアクセス拒否する送信セキュリティ規則より優先順位を高くします。こちらに記載の通りサービスタグAzureUpdateDeliveryとAzureFrontDoor.FirstPartyの2つの送信セキュリティ規則を追加します。

    • 設定値(AzureUpdateDelivery)
      • 規則を追加するネットワークセキュリティグループ:Win-Update-Test-NSG
      • 送信規則名:WindowsUpdate01
      • 優先順位:1000
      • プロトコル:Tcp
      • ポート番号:443
      • 宛先:AzureUpdateDelivery
      • アクション:許可
      • 説明:WindowsUpdate用
    • 設定値(AzureFrontDoor.FirstParty)
      • 規則を追加するネットワークセキュリティグループ:Win-Update-Test-NSG
      • 送信規則名:WindowsUpdate02
      • 優先順位:1001
      • プロトコル:Tcp
      • ポート番号:80
      • 宛先:AzureFrontDoor.FirstParty
      • アクション:許可
      • 説明:インターネットへのアクセスを拒否
Windows Updateのアクセス許可する

こちらのPowerShellを任意のファイル名.ps1として保存しVisual StudioやPowerShellで実行します。

※事前にAzure PowerShellをインストールしておく必要があります。

#NSGの規則を更新する

$resourceGroupName = “リソースグループ名"
$NSGName ="Win-Update-Test-NSG"
$NSGRuleName1 = “WindowsUpdate01"
$NSGRuleName2 = “WindowsUpdate02"

# NSGの設定を取得
$nsg = Get-AzNetworkSecurityGroup -Name $NSGName -ResourceGroupName $resourceGroupName

#Service TAG(AzureUpdateDelivery)を追加

$nsg | Add-AzNetworkSecurityRuleConfig `
    -Name $NSGRuleName1 `
    -Description “WindowsUpdate用"`
    -Access Allow `
    -Protocol Tcp `
    -Direction Outbound `
    -Priority 1000 `
    -SourceAddressPrefix “*"`
    -SourcePortRange “*" `
    -DestinationAddressPrefix “AzureUpdateDelivery" `
    -DestinationPortRange 443

#Service TAG(AzureFrontDoor.FirstParty)を追加

$nsg | Add-AzNetworkSecurityRuleConfig `
    -Name $NSGRuleName2 `
    -Description “WindowsUpdate用"`
    -Access Allow `
    -Protocol Tcp `
    -Direction Outbound `
    -Priority 1001 `
    -SourceAddressPrefix “*"`
    -SourcePortRange “*" `
    -DestinationAddressPrefix “AzureFrontDoor.FirstParty" `
    -DestinationPortRange 80

#NSGの設定を更新
$nsg | Set-AzNetworkSecurityGroup

※リソースグループ名は$resourceGroupNameとしています。ネットワークセキュリティグループのリソースグループ名を指定します。
※送信セキュリティ規則名は$NSGRuleName1、2としています。

WindowsUpdate01と02の送信セキュリティ規則が追加されている事が分かります。宛先を見るとそれぞれAzureUpdateDeliveryとAzureFrontDoor.FirstPartyが指定されている事が分かります。

設定内容を確認してみます。AzureUpdateDeliveryのサービスタグが存在しない為宛先サービスタグは空白になっています。(テンプレート等で確認すると設定されている事が分かります。)

Azure PortalでAzureFrontDoor.FirstPartyのサービスタグは存在している為、宛先サービスタグに値が設定されている事が分かります。

仮想マシンでWindows Updateを試してみる

ネットワークセキュリティグループにWindows Update用の送信セキュリティ規則を追加する前後でWindows Updateの状況の違いを確認してみます。

Windows Updateの確認

インターネットへのアクセス拒否:追加済み
Windows Updateの許可ルール:追加前

インターネットへのアクセス拒否:追加済み
Windows Updateの許可ルール:追加後

どちらの場合もインターネットのアクセスは出来ていませんが、Windows Update用の送信セキュリティ規則を追加した後のみWindows Updateが成功している事が分かります。

ネットワークセキュリティグループの設定で仮想マシンからインターネットへのアクセスを拒否しながWindows Updateだけ許可する事がとても簡単に出来る事が分かりました。