Azure には仮想ネットワーク (VNet) 内にデプロイ可能なサービス/リソースがいくつか存在します。
VNet 内にデプロイしたサービス/リソースは、パブリック IP アドレスを利用したインターネット (or Microsoft Backbone Network) 経由ではなく、プライベート IP アドレスを利用した VNet 経由での通信が可能となります。
VNet 内にデプロイ可能なサービス/リソースの中には、サブネット内に他のサービス/リソース (VM や VMSS など) と共存することができない専用のサブネットが必要です。
公式ドキュメントには VNet 内へサービス/リソースをデプロイする際に専用サブネットが必要かどうかの表がまとめられていますが、実際に確認、その結果を纏めてみました。
VNet 内にデプロイする際に専用サブネットが必要がサービス/リソース
ネットワーク
Application Gateway (WAF)
VNet 内で何も割り当てられていない空のサブネットを Application Gateway (WAF) の専用サブネットとして使用、もしくは Application Gateway のみが存在する専用サブネットを選択する形となります。
空のサブネットは、Application Gateway とともに新規に VNet を作成、デプロイする場合にはその中で作成することが可能ですが、既存の VNet を用いる場合は予め空のサブネットを作成しておく必要があります。
VPN Gateway
GatewaySubnet という名前の VPN Gateway 専用サブネットが必要になります。
デプロイ時に GatewaySubnet が作成されていない場合は、以下のようにサブネット範囲を指定することでデプロイとともに作成されます。
GatewaySubnet は、Azure ポータルから予め作成することが可能です。
Azure Firewall
AzureFirewallSubnet という名前の Azure Firewall 専用サブネットが必要になります。
Azure Firewall とともに VNet を新規作成する場合は、サブネット アドレス空間を指定して AzureFirewallSubnet 作成することが可能です。
既存の VNet を用いる場合は、予め AzureFirewallSubnet を作成する必要があります。
※2021/08/30 追記。
Azure Firewall で強制トンネリングを有効にする場合、別途 AzureFirewallManagementSubnet 専用サブネットが必要となります。
Azure Bastion
AzureBastionSubnet という Azure Bastion 専用サブネットが必要になります。
新規に VNet を作成する/既存の VNet を利用する、どちらの場合も AzureBastionSubnet を手動で作成する必要があります。
データ
Azure Cache for Redis – Premium SKU
VNet 内で何も割り当てられていない空のサブネットを Azure Cache for Redis の専用サブネットとして使用、もしくは Azure Cache for Redis のみが存在する専用サブネットを選択する形となります。
Azure Cache for Redis とともに VNet を新規に作成することができないため、予め VNet および空のサブネットを作成しておく必要があります。
Azure SQL Managed Instance
新規に VNet を作成する場合には、VNet 名は「vnet-<SQL Managed インスタンス名>」、サブネット名は「ManagedInstance」となります。
※アドレス空間も自動的に設定、作成されます。
既存の VNet の場合は、空のサブネット (事前の作成が必要) もしくは Azure SQL Managed Instance のみが存在する専用サブネットを選択する形となります。
コンテナー
Azure Container Instance (ACI)
VNet 内で何も割り当てられていない空のサブネットを ACI の専用サブネットとして使用、もしくは ACI のみが存在する専用サブネットを選択する形となります。
空のサブネットは、ACI とともに新規に VNet を作成、デプロイする場合にはその中で作成することが可能ですし、既存の VNet を用いる場合でも、追加で作成することが可能となっています。
Azure Functions – 消費量 (サーバーレス) と App Service プランの Free/Shared/Basic 以外の SKU
VNet 内で何も割り当てられていない空のサブネットを Azure Functions (Web Apps) の専用サブネットとして使用、もしくは Azure Functions (Web Apps) のみが存在する (同一 App Service プランの) 専用サブネットを選択する形となります。
Azure Functions (Web Apps) の VNet 統合機能を用いて、空のサブネットを新規作成して利用、もしくは既存の空のサブネットを利用して専用サブネットにすることが可能です。
※VNet 統合機能では、VNet の新規作成は行えません。
Web
API Management (APIM) – developer/premium SKU
VNet 内で何も割り当てられていない空のサブネットを APIM の専用サブネットとして使用、もしくは APIM のみが存在する専用サブネットを選択する形となります。
空のサブネットは、APIM とともに新規に VNet を作成、デプロイする場合にはその中で作成することが可能ですし、既存の VNet を用いる場合も空のサブネットを新規に作成、専用サブネットとして利用することが可能です。
Web Apps – Free/Shared/Basic 以外の App Service プラン SKU
VNet 内で何も割り当てられていない空のサブネットを Web Apps (Azure Functions) の専用サブネットとして使用、もしくは Web Apps (Azure Functions) のみが存在する (同一 App Service プランの) 専用サブネットを選択する形となります。
Web Apps の VNet 統合機能を用いて、空のサブネットを新規作成して利用、もしくは既存の空のサブネットを利用して専用サブネットにすることが可能です。
※VNet 統合機能では、VNet の新規作成は行えません。
App Service Management (ASE) v3
ASEv3 の仮想 IP が [内部]/[外部] に関わらず、VNet 内で何も割り当てられていない空のサブネットを ASEv3 の専用サブネットとして使用する形となります。
※既に存在する ASEv3 の専用サブネットを利用することは可能だとは思いますが、推奨サイズが /24 であるため、新規に別の専用サブネットを作成したほうが幸せになれると思います。
空のサブネットは、ASEv3 とともに新規に VNet を作成、デプロイする場合にはその中で作成することが可能ですし、既存の VNet を用いる場合も空のサブネットを新規に作成、専用サブネットとして利用することが可能です。
Azure Logic Apps – Standard SKU
アクセス エンドポイントが [内部]/[外部] に関わらず、VNet 内で何も割り当てられていない空のサブネットを Azure Logic Apps の専用サブネットとして使用、もしくは Azure Logic Apps のみが存在する専用サブネットを選択する形となります。
Azure Logic Apps の VNet 統合機能を用いて、空のサブネットを新規作成して利用、もしくは既存の空のサブネットを利用して専用サブネットにすることが可能です。
※VNet 統合機能では、VNet の新規作成は行えません。
※画面は Web Apps (Azure Functions) の VNet 統合機能と同じですが、SKU が異なるため、専用サブネットを共存できません。
Azure Logic Apps – Integration Service Environment (ISE)
VNet 内で何も割り当てられていない空のサブネット 4 つを Azure Logic Apps の専用サブネットとして使用する形となります。
空のサブネットは、ISE のデプロイ画面で既存の VNet を選択後、新規作成することはできますが、新規に VNet を作成することはできないので、事前に準備しておく必要があります。
ホステッド サービス
Azure Dedicated HSM
VNet 内で何も割り当てられていない空のサブネットを Azure Dedicated HSM の専用サブネットとして使用する形となります。
Azure Dedicated HSM に専用サブネットを設定する方法については、Azure ポータルではなく、Azure CLI もしくは Azure PowerShell を用いるしかないので、予め VNet や空のサブネットを準備しておく必要があります。
Azure NetApp Files
VNet 内で何も割り当てられていない空のサブネットに対して Microsoft.NetApp を委任した上で Azure NetApp Files 内のボリュームに対して専用サブネットを構成することが可能です。
Java フレームワーク
Azure Spring Cloud – VNet injection (Standard SKU)
Net 内で何も割り当てられていない空のサブネット 2 つを Azure Spring Cloud の専用サブネットとして使用する形となります。
空のサブネットは、Azure Spring Cloud のデプロイ画面で既存の VNet を選択後、新規作成することはできますが、新規に VNet を作成することはできないので、事前に準備しておく必要があります。
まとめ
利用する Azure サービス/リソースによっては専用のサブネットが必要になるので、ネットワーク設計をする際には十分注意してください。
VNet 経由での通信になるメリットはあるものの、Azure をよく知らないネットワーク エンジニアからすれば、Azure の制限と思われてもしょうがない