Service endpoints vs service endpoint policies vs private endpoints vs NSG service tags

Verdict: Service endpoint gives a subnet backbone routing to a whole service. Endpoint policy allowlists specific accounts. Private endpoint scopes reachability to one resource instance. NSG service tag is a coarse allow or deny, with no backbone identity change.

CriterionService endpointService endpoint policyPrivate endpointNSG service tag
What it securesWhole service, any account in itNamed accounts on an already-endpointed subnetOne PaaS resource instanceCoarse allow or deny by service
Configured atSubnet, one Azure service per entrySubnet, requires the matching service endpoint firstThe PaaS resource itselfNSG rule, destination = service tag
Backbone routingYes, private VNet source address to the serviceInherits the endpoint's routingYes, private IP into the resourceNo routing change, filter only
On-premises reachNo, ExpressRoute Microsoft peering needs the NAT IPs allow-listed separatelyNo, same restriction as the underlying endpointYes, if DNS resolves to the private IPN/A, applies inside the VNet
Exfiltration protectionNone, any account in the service is reachableStrong, only listed resource IDs reachableStrong, only the one mapped instance reachableWeak, any account behind the tag's IP ranges is reachable
Choose whenLock a PaaS service to a subnet, no on-prem access neededAllowlist specific accounts on a subnet already using endpointsOne storage account or SQL DB must be unreachable from other tenants/subsBlock internet but keep optimised routing to named Azure services, no new infra

Rules

Traps