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.

16 May 2026 azureprivate-endpointvnet-integrationapp-servicesecurityarchitecture

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?

text responsibility-map.txt
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.

text app-service-private-design.txt
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.

text gateway-choice.txt
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.

text control-matrix.txt
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.