Your network can be hardened end to end and still sit one compromised account away from a breach. That sentence is the whole case for Zero Trust, and it explains why the generic Zero Trust architecture picture keeps circulating. Users and devices at the top, an identity provider, MFA, a policy engine, a policy enforcement point, segmentation, protected resources, and a monitoring column on the side. Never trust, always verify, least privilege. This post is about Zero Trust on Azure: which Microsoft service does each job, and where the neat boxes stop matching how the platform behaves.
I like the generic picture. It is the NIST SP 800-207 model with icons, and it summarizes a modern access path fairly. It does not tell you what to switch on in an Azure tenant, though. So I redrew it with Azure icons, one service per box, and wrote down what I had to change to make it accurate.
Zero Trust on Azure: the generic architecture mapped to Microsoft Entra, Intune, Global Secure Access, Azure networking, and Microsoft Sentinel.

Zero Trust on Azure: the same spine, with names on it
The generic flow has eleven steps. Here is what each one is called in a Microsoft tenant.
Steps 1 to 6: identity and policy
- Verify users. Employees, admins, vendors and workloads are all Microsoft Entra ID identities. Vendors come in through External ID (B2B), and workloads through app registrations and managed identities. That last group matters more than the picture suggests, and I will come back to it.
- Check devices. Device trust is an Intune compliance policy plus a Defender for Endpoint risk score, which Entra receives as a device claim. Patch status, encryption, OS health and firewall state are compliance checks, not network checks.
- Verify identity. One identity provider: Entra ID. In a hybrid tenant, Connect Sync or Cloud Sync brings in the on-premises accounts, and the Active Directory authority boundary stays where it was.
- Strengthen authentication. MFA, authentication strengths, passkeys and FIDO2 are Entra features. The policy that demands them lives in the next box.
- Evaluate access. Conditional Access takes the signals: user, group, device compliance, location, sign-in risk and user risk, client app, and the sensitivity of the target app.
- Make policy decisions. Also, Conditional Access. Grant, block, require MFA, require a compliant device, require an authentication strength, or apply session controls.
Steps 7 to 11: enforcement, isolation and visibility
- Enforce access. This is where the picture and the platform part ways. More below. The candidates are Global Secure Access, Front Door and Application Gateway with WAF, API Management validate-jwt, the application itself, and Bastion.
- Isolate workloads. Virtual networks, network security groups, application security groups, Azure Firewall, private endpoints, and private DNS.
- Protect resources. App Service, Functions, API Management, Azure SQL, Storage, Key Vault, and for the Active Directory box, Entra Domain Services or domain controllers behind Entra Private Access.
- Monitor continuously. Microsoft Sentinel for SIEM and SOAR, Defender for Cloud for posture and workload protection, ID Protection for risky sign-ins and users, Log Analytics for everything the rest emits.
- Build the foundation. Key Vault and customer managed keys, Purview labels and DLP, managed identities, Azure Policy, PIM, backup, and a landing zone you segment before the first workload lands.
That mapping is useful on its own. Architecture reviews ask me for it regularly, usually from someone with the generic picture, asking, “so what do we actually buy?” But three of the boxes hide something, and that’s why I’m writing this post.
Policy engine and policy administrator share one box
NIST 800-207 separates the policy engine (decides) from the policy administrator (tells the enforcement point what it decided). The generic picture keeps them apart and gives the administrator its own job list: create a secure session, issue an access token, enforce policy decisions, monitor the session, log and audit.
Zero Trust on Azure does not split them into two services. Conditional Access is Microsoft’s policy engine, and the token service that acts on its verdict is the same Entra ID. The decision and the administration happen in one evaluation at token issuance. There is no separate component you can point at and call the PA.
That collapse is convenient, and it has a cost. Because the decision binds to token issuance, the decision also binds to token lifetime. Which brings me to the enforcement point.
The enforcement point in Zero Trust on Azure is not one gateway
The picture draws a single Policy Enforcement Point, a ZTNA gateway or reverse proxy, and lists four jobs for it: verify every request, decrypt and inspect traffic, enforce least privilege, block unauthorized access.
On Azure, I count at least six places that do some of that for some traffic, and none of them does all of it for all traffic.
- Entra ID itself, at token issuance. Conditional Access enforces here, and for most SaaS and Microsoft 365 traffic this is the only enforcement point there is.
- Global Secure Access, the ZTNA layer. Private Access fronts internal apps and, since January 2026, domain controllers, so Kerberos traffic can finally sit behind a Conditional Access policy. Internet Access is the secure web gateway. TLS inspection for it is still in preview as I write this, so “decrypt and inspect traffic” is a roadmap item for part of the stack, not a given.
- Front Door and Application Gateway, with WAF policies, for public web entry points.
- API Management, where validate-jwt checks the token the app will later trust.
- The application, which validates the token again and applies its own authorization. Microsoft’s own guidance says Conditional Access “doesn’t prevent the app from blocking access on its own”. The app is an enforcement point whether you designed it that way or not.
- Bastion, for the administrative sessions that never pass through any of the above.
The generic picture is not wrong to draw one box. It is wrong if you read it as one product. Every Zero Trust review I have done ended with a table of enforcement points and the traffic each one does not see. The gaps in that table are the architecture.
“Verify every request” means “verify every token issuance”
This is the part I most wanted to write down, because it surprises people when they measure it.
Entra evaluates Conditional Access when it issues a token. Access tokens live 60 to 90 minutes by default. Between issuances, the resource trusts the token, and a policy change, a password reset, a disabled account, or a risk event does nothing to a token already in use. “Verify every request” at the resource means “check the signature and expiry of a token that Entra verified up to an hour and a half ago”.
Continuous Access Evaluation closes that gap, but only for resources and clients that support it. In my earlier post, Microsoft Entra ID under the hood, I measured this on a test tenant. A CAE-aware client received a 1439-minute token, and the resource rejected it four seconds after I revoked its sessions. The non-CAE client next to it kept a 65-minute token and kept receiving 200 responses until it expired. Same tenant, same policy, same user. The only difference was whether the client and resource spoke CAE.
So the “Revoke” decision in the picture’s policy engine box is real, but it depends on the plumbing. For your own APIs on App Service, Functions, or API Management, CAE does nothing unless you build the claims challenge handling yourself. The honest version of the diagram puts a footnote under Revoke, and that is what mine does.
Where this Zero Trust on Azure mapping is the wrong answer
- If most of your estate is not on Azure. Conditional Access and Global Secure Access still apply to a mixed estate, but the segmentation and protected resources rows are Azure-specific. For AWS or on-premises workloads, Entra Private Access gives you an enforcement point in front of them, not segmentation behind them.
- If you have no Intune. Device compliance is the second strongest signal Conditional Access has. Without a device management platform feeding it, “check devices” collapses to “is the device Entra joined”, a weaker test than the picture implies.
- If you are on Entra ID Free or P1 only. Sign-in risk and user risk conditions need P2. Global Secure Access needs the Entra Suite or standalone licenses. The mapping above assumes you have them, and many tenants do not.
- If your apps cannot validate tokens. Legacy applications behind an App Proxy or Private Access get an enforcement point in front of them and nothing inside them. That is still better than nothing, and it is not Zero Trust at the application layer.
- If nobody reads Sentinel. The monitoring column feeds risk back into policy only if someone tunes analytics rules and acts on the incidents. A workspace that ingests everything and alerts no one is a cost, not a control.
The question at the bottom of the picture
The generic post ends with a good question: if an attacker compromised one employee’s account today, how much of your network could they reach?
On Azure, the answer comes from five smaller questions. Does the compromised identity hold standing privileged roles, or does PIM activate them with a window? Does Conditional Access require a compliant device, so a stolen credential on an unmanaged laptop stops at step five? Do the resources sit on private endpoints, behind network security groups that only admit the subnet that should talk to them? Do the workloads that matter speak CAE, so a revoke lands in seconds rather than at the next token expiry? And can Sentinel tell you any of this happened before the attacker finishes?
I have not yet met a tenant where all five answers were yes. The mapping in this post is how I find out which ones are no.
Zero Trust is not a product you install. Zero Trust on Azure is about fifteen services configured to agree with each other, and the diagram only becomes true once they do. If you want the same treatment for the identity layer alone, Microsoft Entra ID goes deeper under the hood, and the API Management for AI workloads series covers the validate-jwt enforcement point in detail.











































