Private Endpoint Securityを理解するための前提
Private Endpointの存在はserviceのpublic endpoint無効化を自動的に意味しない。対象serviceのpublic network access/firewall設定を別に確認する。 Private Endpoint connectionはApprovedでなければdata trafficを送れない。cross-owner構成ではapproval workflowそのものがsecurity boundary。
PE subnetではnetwork policiesが既定で無効。NSG/UDRをPEへ適用したい場合はsubnetのPrivate Endpoint network policyを明示的に有効化する。 network policyはNSGのみ、UDRのみ、両方を有効にできるAPI/PowerShell表現がある。Azure CLIの該当flagはtrue/falseでselective enableを表現しない点に注意する。
UDRでPEの/32 system routeを上書きしてinspectionへ送るには、PE subnet policyを有効化したうえで、VNet address spaceと同等以上にspecificなprefixが必要。0.0.0.0/0だけでは/32を上書きしない。 network isolationとapplication authorizationは補完関係。Private Linkを通ったrequestでも、managed identity/RBAC/key/token等のservice認証を維持する。
Control plane / DNS plane / Data plane
service public network access/firewall、Private Link approval。どの入口を許すか。
DNSでPEへ誘導し、PE subnetのNSG/UDR policy、inspection path、return symmetryを制御。
service固有RBAC、identity、TLS、secret/key policy。private IPから来たことを認証の代替にしない。
Query / packet path
- resource ownerがpublic endpointの扱いとPrivate Link connection approval policyを決める。
- PEをsubnetへ作成し、必要ならsubnetのPrivate Endpoint network policiesをNSG/route table向けに有効化する。
- DNSがservice FQDNをPE private IPへ解決する。
- source subnet/NIC側policyとroute、PE subnet policy、必要なNVA/Firewall inspectionを順に評価する。
- Private Link mappingでserviceへ到達後、service firewall/public accessとidentity/data-plane authorizationを評価する。
- logはnetwork layerとservice layerをcorrelationし、private connectivity成功とauthorization failureを切り分ける。
仕組みを分解する
Private Endpoint trafficのinspectionで最も誤りやすいのはroute specificityです。PEはprivate endpoint routeとして/32が現れ、単純なdefault route 0.0.0.0/0はlongest-prefix matchで勝てません。Microsoft Learnは、network policiesを有効化したうえでVNet address spaceと同等以上にspecificなUDRを使う要件を示しています。設計図には「source→firewall→PE」と「PE→return」の両方向を描き、stateful deviceを跨ぐ非対称化を避けます。
設計判断
| 判断軸 | 設計方針 |
|---|---|
| Public surface | Private Endpoint導入後もpublic endpointが必要かをserviceごとに決める。不要ならpublic network accessをdenyし、例外は期限付きにする。 |
| PE subnet policy | NSG/UDRを適用する目的を明示。inspectionをしないのに複雑なUDRを追加してblast radiusを増やさない。 |
| Approval governance | manual connection requestのrequester/resource ID/groupIdをreviewし、名前だけで承認しない。 |
| Logging | NSG/Firewall/flow telemetry、PE connection state、service audit/auth logを同じincident timelineへ残す。 |
確認手順
Read-only verification
- PE subnetのprivateEndpointNetworkPolicies設定を取得し、NSG/route tableが意図どおり対象になっているか確認する。
- source NICのeffective routeでPE private IP宛のwinning routeを確認し、0/0を「PEもfirewall経由」と誤認しない。
- NSG/Firewall logで新規flowが想定inspection pointを通過した証拠を取り、既存sessionを再利用しない。
- service側public accessを外部/非許可networkからnegative testし、Private Link clientからはpositive testする。
Evidence to keep
- resource ID / subscription / region / VNet / subnetを固定し、同名resource取り違えを防ぐ。
- DNS queryはresolver IP、query name、answer/CNAME、TTL、timestampを一緒に保存する。
- network testはsource、resolved destination IP、protocol/port、winning route/security decisionを保存する。
- 変更前後で同じquery/application journeyを再実行し、cache/既存sessionでの見かけ上成功を避ける。
az network vnet subnet show -g <rg> --vnet-name <vnet> -n <pe-subnet> -o jsonc
az network private-endpoint show -g <rg> -n <private-endpoint> -o jsonc
az network private-endpoint ip-config list -g <rg> --endpoint-name <private-endpoint> -o table
az network nic show-effective-route-table -g <rg> -n <source-nic> -o table
az network nic list-effective-nsg -g <rg> -n <source-nic> -o jsonc$vnet = Get-AzVirtualNetwork -ResourceGroupName <rg> -Name <vnet>
$vnet.Subnets | Where-Object Name -eq '<pe-subnet>' | Format-List *
Get-AzPrivateEndpoint -ResourceGroupName <rg> -Name <private-endpoint>
障害切り分け
| 症状 | 第一候補 | 証拠 | 次の確認 |
|---|---|---|---|
| Firewallを通る想定なのに直行 | PE /32がUDRよりspecific | effective route | network policyとUDR prefixを見直す |
| NSG ruleを入れても効かない | PE network policy無効 | subnet property | NSG policyを有効化 |
| Private Linkは通るがpublicも通る | public access未disable | service network setting | public access/firewallを別変更 |
| PE接続が突然使えない | connection Rejected/Disconnected | PE connection state/service owner log | approval lifecycleを確認 |
| inspection後だけsession不安定 | return path非対称 | 両方向route/firewall session | symmetric routingへ修正 |
変更時の確認と rollback
- policy有効化前にsubnet設定、route table、NSG、effective routeをexportする。
- inspection追加は代表PE/代表sourceから段階導入し、全PE subnetへ一括適用しない。
- public accessをdenyする変更はPrivate Link positive testを先に成立させ、rollback条件を明確にする。
- rollback後もnegative/positive testを両方実施し、security controlが意図した元状態へ戻ったか確認する。
Current notes — 2026-09-11
現在のPrivate Endpoint network policyはNSGとroute tableの両方をサポートします。ただし既定無効であり、UDR overrideにはlongest-prefixの条件があります。古い「Private EndpointにはNSG/UDRが一切効かない」という知識で運用しないよう明記します。