Azure のサービスタグを活用する

Azure
この記事は約7分で読めます。

Azure の IP フィルタリング

Microsoft Azure ではネットワーク セキュリティの機能としてファイアウォール(IP フィルタリング)が利用できるリソースが多くあります。代表的なものはネットワーク セキュリティ グループ(NSG)と Azure Firewall ですが、それ以外のリソースでも利用できるものは少なくありません。

一般的に IP フィルタリングでファイアウォールを構成する場合、以下の5タプルを使用します。

  • 送信元 IP アドレス
  • 送信元ポート番号
  • 送信先(宛先) IP アドレス
  • 送信先(宛先) ポート番号
  • L4 プロトコル(TCP/UDP)

Azure クラウドで IaaS / PaaS を組み合わせたシステムを構成する際、ファイアウォールのルールとして「Azure のこのサービスとの通信は許可したい」という要件が発生することが少なくありません。そこで上の5タプルでルールを構成する場合、特定の Azure サービスの IP アドレス範囲を特定しなければなりません。しかしクラウドの特性上サービスの IP アドレスが常に固定されることは保証されず、また同じサービスであっても複数の IP アドレス範囲を利用する場合もあります。そのため、IP アドレスを直接指定してファイアウォール ルールを作成することは難しく、また保守も困難です。

このような問題に対応する機能として、「サービス タグ」が用意されています。

Azure のサービス タグとネットワーク セキュリティ グループ

サービス タグとは、指定された Azure サービスからの IP アドレス プレフィックスのグループです。 サービス タグに含まれるアドレス プレフィックスの管理は Microsoft が行い、サービスで利用するアドレスが変化するとサービス タグは自動的に更新されます。そのため、サービス タグを利用すると以下のようなメリットがあります。

  • Azure サービスの IP アドレスを手動で追跡して更新する必要ない
  • Azure サービスの IP 範囲が変更されたときに自動的に更新される
  • セキュリティ規則管理の複雑さが軽減される
  • Azure サービスとの間のネットワーク トラフィックがきめ細かく制御できる

サービス タグを利用する例としてネットワーク セキュリティ グループを見てみましょう。ネットワーク セキュリティ グループを作成すると、既定の受信セキュリティ規則と送信セキュリティ規則が含まれます。

この既定のセキュリティ規則で、VirtualNetwork と AzureLoadBalancer と Internet というサービス タグが利用されていることが分かります。

  • VirtualNetwork は仮想ネットワーク アドレス空間 (仮想ネットワークに対して定義されているすべての IP アドレスの範囲)と、仮想ネットワークに直接接続されているネットワーク(閉域網接続されたオンプレミス ネットワークやピアリングしている仮想ネットワークなど)、ユーザー定義ルートで使用されるネットワークを示すタグです。
  • AzureLoadBalancer は Azure インフラストラクチャのロード バランサーの正常性プローブの送信元を示すタグです。
  • Internet は仮想ネットワークの外部の、パブリック インターネットによってアクセスできる IP アドレス空間(Azure のパブリック IP を含む)を示すタグです。

それを踏まえて既定のセキュリティ規則を確認すると、仮想ネットワークや仮想ネットワークに直接接続されているネットワークの間の通信は受信・送信とも許可され、Azure Load Balancer の正常性プローブの受信とインターネットへの送信も許可されていますが、それ以外の送受信は(DenyAllInBound 規則と DenyAllOutBound 規則で)拒否されることが分かります。
※トラフィックは規則は優先度の高い(番号の小さい)ものから順に評価されます。トラフィックに合致する規則があればそれが適用され、それ以降の優先度の規則は評価されません。

サービス タグを利用した規則の作成

前述のように、VirtualNetwork サービスタグは仮想ネットワークと Express Route などで閉域網接続しているオンプレミスのネットワークも含みますので、既定のルールではオンプレミスのクライアントからこの NSG が適用される仮想マシンへのアクセスは制限を受けません。オンプレミスから仮想マシンへのアクセスは仮想マシンで実行しているワークロード(例えば HTTPS で接続する Web アプリケーション)だけに絞り込みたい場合は、以下のようにします。

  1. ソースのサービスタグ VirtualNetwork に対して HTTPS でのトラフィックを許可する受信セキュリティ規則を作成する
  2. ソースのサービスタグ VirtualNetwork に対して RDP でのトラフィックを許可する受信セキュリティ規則を作成する(オプション)
  3. 「1.」「2.」の規則より低い優先度で、ソースのサービスタグ VirtualNetwork に対するすべてのトラフィックを拒否する受信セキュリティ規則を作成する

「3.」の規則は既定で作成されている優先度 65000 の AllowVnetInBound より優先度が高いので、「1.」に合致しない(HTTPS 以外の)トラフィックは「2.」で拒否されます。
※「2.」の RDP の許可は仮想マシンの管理用です。Linux 仮想マシンであれば SSH を許可してください。またソースは VirtualNetwork ではなく管理を行う特定のクライアント(や Bastion)だけに絞り込むこともできます。

サービスタグには Sql(Azure SQL Database など)や AppServece(Wob App や Function など)のような Azure の PaaS を示すものもありますので、Internet サービスタグへの拒否の送信セキュリティ規則と組み合わせることで、一般のインターネットへのアクセスは禁止・特定の Azure PaaS へのアクセスのみ許可という NSG を構成できます。

オンプレミス ネットワークでのサービス タグ利用

ここまで紹介しているように、Azure の IP フィルタリング(NSG)であればソースや宛先にサービス タグをそのまま利用できます。これと同じように、オンプレミスのネットワークでも上のような NSG と同様に、オンプレミスのネットワークから特定の Azure サービスへのトラフィックに対して、通信の許可やローカル ブレークアウト、プロキシのバイパスを行いたい場合があります。
しかしオンプレミスのネットワーク機器(ファイアウォール、ルーター、プロキシ サーバー)では直接サービス タグを扱うことはできません。サービス タグで示されている実際の IPアドレスを指定して規則を作成する必要があります。

このような場合、サービス タグに含まれる IP アドレス範囲を、PowerShell を利用して調べることが可能です。

PowerShell の利用には、Azure PowerShell モジュールのインストールが必要です。Windows で Azure PowerShell をインストールする方法については以下を参照してください。
Install Azure PowerShell on Windows | Microsoft Learn

以下は、東日本リージョンの「Storage」タグに含まれる IP アドレス範囲を取得して表示しています。

PS > $serviceTags = Get-AzNetworkServiceTag -Location japaneast
PS > $storage = $serviceTags.Values | Where-Object { $_.Name -eq "Storage" }
PS > $storage.Properties.AddressPrefixes

また、REST API を利用して取得することもできます。

GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Network/locations/{location}/serviceTags?api-version=2025-05-01

さらに、サービス タグの現在の一覧と IP アドレス範囲の詳細を含む JSON ファイルをダウンロードできます。このファイルは毎週更新されています。

このようにして取得したサービスタグに対応する IP アドレスを、オンプレミスのネットワーク機器でのルールに反映するよう、プログラムなどで自動化を行うことが可能です。

参考情報:Azure サービス タグの概要 | Microsoft Learn

この記事を書いた人

MurachiAkira
タイトルとURLをコピーしました