Subnet 設計を理解するための前提
同一VNet内のsubnet間はsystem routeにより既定でroutingされる。isolationにはNSG/Firewall/UDR等が必要。 1 subnetに関連付けられるroute tableは0または1。NSG/NAT Gatewayなどもsubnet単位の重要association。
Azureは各subnetで5 IPv4 addressを予約するため、small subnetほどusable率が下がる。 GatewaySubnet、RouteServerSubnetなどservice-specific subnetは名前/associationに制約がある。
delegated subnetやmanaged PaaS integrationはserviceごとのminimum size・同居可否を確認する。 subnetを環境・役割・trust/routing境界で分け、1 subnetへ無関係な責務を詰め込まない。
Control plane と data plane
仕組み
subnetはVNet address spaceの一部であり、Azure SDNがVNet内routeを提供する。security boundaryは自動では生まれない。
route tableをsubnetへassociateするとUDRがsystem/BGP routesと合成される。NAT GatewayはInternet egress behaviorをsubnet単位で置き換える。
managed service専用subnetでは一般VMと同じpolicyを付けられない場合がある。service documentationをgeneric network ruleより優先する。
private subnet設定は「subnet内resourceがprivate IPしか持てない」意味ではなく、VM default outbound IP生成を抑止する設定として扱う。
Packet path
routing問題は「どのresourceがあるか」ではなく、packetが各hopで何を選ぶかを順に追う。
- source NICが属するsubnetを特定。
- subnetに関連するNSG/route table/NAT/delegation/private settingを取得。
- destination IPに対するeffective routeをNICで確認。
- security decisionをsubnet/NIC両方で確認。
- managed serviceの場合はservice-specific health/logも確認。
設計判断
| 判断点 | 推奨 | 理由 |
|---|---|---|
| Segmentation | workload role + trust + route policyが同じresourceを同一subnetへ。 | policy associationを理解しやすくする。 |
| Dedicated subnet | Microsoftが専用subnetを要求するserviceは混在させない。 | unsupported associationやupgrade failureを防ぐ。 |
| Capacity | scale-out最大値から逆算しreserveを持つ。 | Private Endpointやmanaged instance追加で後から枯渇しやすい。 |
| Egress | explicit outboundをsubnet designの初期項目に含める。 | 2026年以降のprivate subnet defaultへ適合する。 |
確認手順
Azure Portal
- VNet → Subnets → 対象subnetを開き、Address range / Private subnet / NSG / Route table / NAT gateway / Delegationを確認。
- 関連resource側からもassociationが一致することを確認。
- 変更前後で代表NICのEffective routes / Effective security rulesを比較。
Verification discipline
- subscription / resource group / resource IDを記録する。
- 同じsource・destinationでbefore/afterを比較する。
- read-only evidenceを保存してから変更する。
- control-plane successとapplication successを別々に判定する。
az network vnet subnet show -g <rg> --vnet-name <vnet> -n <subnet> -o jsonc
az network vnet subnet list -g <rg> --vnet-name <vnet> -o table$vnet = Get-AzVirtualNetwork -ResourceGroupName <rg> -Name <vnet>
$vnet.Subnets | Format-Table Name,AddressPrefix,NetworkSecurityGroup,RouteTable,NatGateway
障害切り分け
| 症状 | 疑う点 | 証拠 | 次の確認 |
|---|---|---|---|
| subnet間が意図せず通る | 同一VNet system routingをisolationと誤認 | effective route = VirtualNetwork | NSG/Firewall等でsecurity policyを明示 |
| managed service deployment失敗 | 専用subnet/delegation/size条件違反 | service deployment error + subnet config | service-specific requirementsへ合わせる |
| 一部VMだけoutbound不可 | private subnet + explicit egress不足/association差 | subnet/NAT/UDR association | subnet単位のegress contractを統一 |
| scale-outでIP枯渇 | capacity reserve不足 | available IPとscale requirement | larger/new subnetへ計画移行 |
変更時の確認と rollback
- association変更前にNSG/UDR/NATのbefore snapshotを保存。
- route table付替えはcritical destinationごとのnext hopを事前に列挙。
- private subnet化はexisting VMを含むoutbound dependencyを先に検証。
- rollback後はnew connectionで再試験し、stateful session残存に惑わされない。