Cloud
Do not confuse private exposure, outbound networking and application security on Azure
Clarify the roles of Private Endpoint, VNet Integration, Application Gateway, API Management, DNS, routing and application authentication in a private Azure architecture.
In many Azure designs, the word private ends up covering several different things. An application is no longer exposed to the Internet. A Function can reach an internal network. A backend answers through Private Endpoint. A flow goes through Application Gateway. A service validates a managed identity. Each piece improves something, but none of them covers the whole model.
That confusion creates designs that are hard to explain. One team thinks an application became private because VNet Integration is enabled. Another thinks Private Endpoint replaces backend authentication. A third publishes an application behind Application Gateway without clarifying the TLS path to the server. The issue is not the Azure feature. The issue is mixing responsibilities.
Three different questions
A private architecture must answer three separate questions. Inbound exposure: who can call the service? Outbound networking: which resources can the application initiate connections to? Application security: which identity, secret, certificate or business rule authorizes the action?
Inbound exposure
Private Endpoint
Application Gateway
Internal API Management
Internal Load Balancer
Outbound networking
App Service or Function VNet Integration
Routes and UDRs
NAT Gateway
DNS used by the application
Application security
Microsoft Entra ID
Managed identity
Client certificate
Application secret
RBAC, ACL or business logic This map prevents a component from being asked to solve the wrong problem. VNet Integration does not privately expose an application. Private Endpoint does not give the application permission to read a secret. Application Gateway does not replace backend authorization.
VNet Integration is not private exposure
For App Service and Azure Functions, VNet Integration is primarily outbound. It lets the application initiate connections toward a private network: database, internal API, Key Vault, Storage, DNS server or on-premises service. It does not mean clients call the application through a private address.
If the goal is private inbound access, the design must handle inbound exposure: Private Endpoint on the application, internal APIM, internal Application Gateway or another frontend depending on the need. Both topics can coexist, but they are not interchangeable.
Need: the application calls an internal API
Use VNet Integration
Validate routes, DNS, NSGs and application identity
Need: clients call the application without Internet exposure
Use Private Endpoint or an internal frontend
Validate private DNS, public access, TLS and application control
Need: govern an internal API
Use internal APIM if API policies are required
Validate private backend and backend authentication Private Endpoint closes a path, not every risk
Private Endpoint moves network access to a PaaS service into a private network. It is a strong control for reducing exposure, but it does not replace service security. A Storage Account reached through Private Endpoint still needs RBAC, keys, SAS or appropriate policies. A Key Vault still validates identity. A private Function still needs to control who can call its endpoint.
A good test must therefore prove two things: the name resolves to the private address from the expected source, and the application action succeeds only with the expected identity. An anonymous test returning 403 is not always a failure. It may prove that the network path exists and authorization is working.
Application Gateway and API Management serve different needs
Application Gateway is often a good fit for publishing an HTTP or HTTPS application with listeners, certificates, probes, WAF and backend routing. API Management fits when the need is API governance: policies, products, subscriptions, transformations, quotas, versions, developer portal or API consumer management.
Both can be used together, but the design must say why. Adding APIM only as a reverse proxy may create more complexity than control. Using Application Gateway for an API lifecycle need can become limiting. The right choice depends on the role expected in the flow.
Application Gateway is natural when
The main topic is controlled HTTPS publication of an application
WAF, probes and listeners are central controls
The backend is a web app or reverse proxy
API Management is natural when
The main topic is API governance
Policies, quotas, products or transformations are required
The consumer must be managed as an API client Document responsibilities as a matrix
To avoid misunderstandings, the architecture note should include a simple responsibility matrix. Each component is associated with what it guarantees, what it does not guarantee, and how to validate it.
Component Guarantees Does not guarantee
Private Endpoint Private network path to PaaS Application authorization
VNet Integration Private outbound from app Private inbound from clients
Application Gateway Controlled HTTP publication Full API governance
Internal APIM Private API entry point Automatic backend security
Private DNS Name to expected address Right to access the service Conclusion
A reliable private Azure architecture starts with clear boundaries. Separate inbound, outbound and authorization. Accept that network does not replace identity, DNS does not replace routing, and a frontend does not replace application decisions.
The useful question is not only whether the service is private. It is which path is private, from which source, to which name, with which identity, and which control proves that the action is authorized. That precision turns an Azure design into an operable architecture.