Conditional Access policy updates can take 20–30 minutes to fully take effect, which is frustrating but somewhat understandable in a large cloud service. The bigger problem is the inconsistent behavior during that window. For example, after excluding a service account from a blocking policy, sign-in attempts may be denied, then allowed, then denied again before eventually stabilizing. Sign-in logs can show the policy being applied inconsistently as well. What causes this apparent on-and-off behavior, and is there anything administrators can do to make policy changes converge more reliably?
3 Answers
A lot of the experience comes down to asynchronous API processing and replication. Updating a policy is not necessarily a single immediate write; the change is queued, replicated, cached, and then used by the sign-in evaluation services. Other cloud components involved in authentication and authorization can have their own propagation delays, so the practical answer is to allow plenty of time before treating a change as successful or failed.
The most likely explanation is distributed propagation. Conditional Access changes have to move through multiple services and endpoints, and those components do not all receive or cache the new policy at the same moment. During the transition, different sign-in requests can be evaluated against different versions of the configuration. The logs may also arrive later than the actual sign-in, which makes the sequence look even more random.
For production changes, plan a propagation window rather than testing immediately. Use a narrowly scoped test account or group, avoid making several policy edits at once, and check token/session conditions as well as the sign-in logs. If the behavior continues well beyond the documented delay, collect timestamps, correlation IDs, and policy details before opening a support case. There is no dependable client-side switch that makes global Conditional Access propagation instant.
It is especially risky to rely on a proxy or trusted-location workaround just to get faster evaluation. That can weaken the security model and still leaves you with propagation and caching issues elsewhere.

That would also explain why repeatedly testing from the same session can be misleading: each request may be handled by a different backend or cached token state.