Conditional access is a policy, not a prayer
Keep front-door access policies versioned, roll them out in monitor mode and put blast-radius controls around them.
part 1 of 4 · Identity security, from the ground upthe ideaChange access policies the way you'd ship code: report-only, then rings, rollback at hand.
after reading, you can- Put conditional access policies under version control so every change has a diff, an author and someone who reviewed it.
- Read report-only results, looking for the service accounts and devices the policy would wrongly block.
- Explain how a bad policy is kept small by ring rollouts and alarmed break-glass, plus a rollback you've rehearsed.
Conditional accessdefinitionRules evaluated at each sign-in that look at conditions such as user, device or location, and then allow, block or demand more proof. policies decide, on every sign-in, who gets into everything you run. In most tenants they're still edited by hand, in production, with no history and no test. The control guarding your front door deserves at least the engineering discipline you give a config file. Put it in version control, stage the rollout and rehearse the rollback. Anything less is hoping the last admin clicked the right box.
We've argued before that zero trust is a proof obligation: every access decision is a claim you should be able to evidence. Conditional access is where that gets mechanical, since the policies are the claims. This note is about keeping them provable while you change them, which mostly comes down to three disciplines.
Policies are production code, so give them a repository
A tenant's CA configuration should live in version control, exported as code and deployed through review, so nobody has to reconstruct it from memory after an incident. Every change gets a diff, an author, a reviewer and a reason, and every past state can be restored. After any access incident someone asks what changed, and what the policy said at the time. A portal edit history can't answer that. A git log makes it trivial. Policy-as-codedefinitionKeeping policies in version control as files and deploying through review. That way each change is tracked and can be undone. also kills the classic driftdefinitionWhen a live configuration slowly wanders away from what you intended, often through emergency edits nobody tracked. failure, where the emergency exclusion added at 2 a.m. quietly becomes permanent because nothing tracked it. Exclusions deserve the same rigor. Each one carries a named owner, a written justification and an expiry date, and gets reviewed on a schedule, because an exclusion list that only ever grows is a policy quietly repealing itself. If a firewall change needs a peer review, the rule set that gates your identity provider needs one more.
Report-only mode is your staging environment, so use it like one
No policy should enforce on day one. Entra’s report-only modedefinitionA setting where the policy runs against real sign-ins and logs what it would have done. Nobody actually gets blocked. evaluates a policy against real sign-in traffic and logs what it would have done. That makes it a staging environment for access decisions, fed by production load. Run new policies there for a full business cycle, not a quiet weekend: month-end batch jobs, the quarterly finance crunch and that one legacy client that can’t satisfy a device claim all need to appear in the would-be-blocked data before enforcement. Then read the results like a test report. Would-be blocks against service accounts mean you’ve found automation that authenticates like a human; would-be blocks against an executive’s unmanaged tablet mean a conversation is cheaper now than a lockout later. Enforce only when the projected impact matches the intended impact. That match is the evidence the policy is correct.
Nobody has tested a conditional access policy that has never run in report-only mode. People have just taken it on faith.
# require-compliant-device: staged enforcement policy: require-compliant-device // v7, in git phase 1: report-only · all users · 30 days · review would-be blocks phase 2: enforce · pilot ring (IT + volunteers) phase 3: enforce · staged rings → all users excluded: break-glass ×2 · alarmed on any use rollback: revert to v6 · rehearsed · < 5 min ✓ lockout-rate alert armed before every phase
Engineer the blast radius before you need it
The worst CA failure is self-inflicted: a policy that locks out the administrators who could fix it. Engineering the blast radiusdefinitionHow many people or systems a single bad change can affect before it is caught. prevents it. Roll out in rings, starting with a pilot group that includes the people who wrote the policy and then moving through staged cohorts, so a bad interaction burns one team and the tenant stays up. Keep at least two break-glass accountsdefinitionEmergency admin accounts excluded from normal access policies. You only use them when everything else has failed, and you watch them closely. excluded from every conditional access policy. Secure them with long random credentials in a vault and alarm them so loudly that any use triggers an immediate investigation. An exclusion nobody watches is a backdoor. Then rehearse the rollback. Know which version you revert to, who is authorized at 3 a.m., and how long propagation takes, and measure that last one rather than guessing. Sign-in failure telemetry with alerting on lockout spikes closes the loop. With that in place you hear about a lockout from your alerts first, and the burning help desk just confirms it.
What to take from this
- 01
Keep conditional access policies in version control and peer-review the changes. Incident questions then turn into plain git queries.
- 02
Leave it in report-only for a full business cycle. Don't enforce until the projected impact matches what you intended.
- 03
Engineer the blast radius before the bad deploy. That means ring rollouts and alarmed break-glass exclusions, plus a rehearsed rollback.
Three questions, about a minute
Pick an answer and we'll tell you if it's right, and why it is or isn't. The score stays in this browser.
-
Q1A new policy ran in report-only all of a quiet weekend, and there wasn't a single would-be block. Ready to enforce?
show the answer
B. No, it should run across a full business cycle first Month-end jobs, the quarterly finance crunch and odd legacy clients have to show up in the would-be-blocked data first. Only enforce once projected impact matches intended impact.
-
Q2Report-only shows would-be blocks against several service accounts. What has the team likely run into here?
show the answer
D. Automation that authenticates like a human The post says to read report-only results like a test report. Here the blocks on service accounts point to automation that signs in like a person. That needs handling before enforcement.
-
Q3Two break-glass accounts sit outside every policy. What stops them turning into a backdoor?
show the answer
A. Long random vaulted credentials and an alarm on any use An exclusion nobody watches is a backdoor. Break-glass accounts need long random credentials in a vault and alarms loud enough that any use triggers an investigation.