Your Conditional Access Policy Has Trust Issues: We Need To Talk
This episode explains how to “calm down” a messy Conditional Access setup by removing blind spots and setting clear boundaries. It walks through three main trust problems—overbroad exclusions, unclear device compliance, and token theft—and shows how to replace permanent exceptions with time-bound authentication contexts, stronger MFA, and clear device tiers (compliant, hybrid joined, Azure AD joined, registered). The host outlines a simple baseline of five inclusive policies (all-users MFA, unmanaged device step-up, strong auth for admins, emergency bypass via auth context, and token hygiene/CAE) plus a safe rollout plan using report-only mode, waves, and rollback. Finally, it stresses ongoing monitoring with a few KPIs and alerts (coverage, strength, exclusion changes, high-risk sign-ins without CA) so Conditional Access stays consistent, visible, and predictable instead of chaotic.
It’s not misbehaving; it’s overwhelmed. Your Conditional Access is trying to protect you while juggling mixed messages and unresolved exceptions. It’s been asked to trust without boundaries.Here’s the plan. We’ll diagnose three trust wounds—over-broad exclusions, device compliance gaps, and token theft paths—and give you a calming baseline, a safe test plan, and monitoring alerts. If you’re running “allow-by-default,” you’re leaking trust and inviting silent bypasses. There’s a mistake that locks out everyone, and one that leaves attackers invisible—both are fixable. Let’s help it set healthy boundaries so it can find its rhythm again, starting with exclusions.Diagnose Trust Wound #1: Over-Broad Exclusions (650 words)Exclusions feel kind. You didn’t want to stress the system or the people in it, so you carved out “break glass,” VIPs, and that partner domain. But boundaries drift. The exceptions harden. And Conditional Access starts doubting itself. It’s not misbehaving; it’s living with an ever-growing list of “not you, not now,” and that invites bypasses attackers adore.The thing most people miss is that exclusions are invisible in day-to-day flow. You won’t see a banner that says, “We skipped protection for the CFO.” You’ll just see “Not applied” in a log, and that’s it. So we start by mapping scope. List every exclusion across users, groups, applications, locations, and authentication contexts. Nested groups are the quiet leakers here—what looked like one exception is actually five layers deep, including contractors, test accounts, and legacy sync artifacts.This clicked for me when I pulled a tenant’s sign-in logs and filtered for Conditional Access → Not applied. The pattern wasn’t random. Most bypasses sourced from two places: a VIP group attached to three policies, and a named location that had grown from one corporate CIDR to “anywhere our vendor might be.” It wasn’t malice. It was comfort. The policy was trying to keep the peace by saying yes too often.Here’s the better pattern. Move from “exclude VIPs” to “include all” and authorize exceptions through time-bound authentication context. That shift sets healthy boundaries. You keep policies broad and inclusive—All users, All cloud apps—and when someone truly needs to step around a control, they request the Emergency context, which has approval, a one-hour lifetime, and audit trails. The trust becomes explicit, visible, and short-lived.Let me show you exactly how to see your leaks. In Entra sign-in logs, add columns for Conditional Access, Policy name, Result, and Details. Filter Result for Not applied. Now slice by User, then by App, and finally by Location. You’re looking for clusters, not one-offs. The big red flags: permanent exclusions for executives or service accounts, entire federated domains marked safe, and named locations that mix “trusted” with “convenience” networks. If you remember nothing else, remember this: a permanent exclusion is a permanent invitation.What should the policy logic feel like before and after? Before: multiple policies with include groups and broad exclude lists—VIPs, break glass, certain apps, and a “safe” location. The engine spends energy deciding who not to protect. After: fewer, inclusive policies with no user or location exclusions. Exceptions route via a specific authentication context, presented only when an approver grants it, and it expires quickly. The engine can breathe. It protects first, then allows controlled, visible relief when needed.Here’s a quick win you can do today. Create an authentication context called Emergency Bypass. Set it with grant controls that still require MFA and device risk checks, and cap session to one hour. Add an approval workflow outside the policy—change ticket or documented approver—and log its use weekly. Now replace hard-coded exclusions in your existing policies with “Require authentication context: Emergency Bypass.” You haven’t taken away safety. You’ve given it a safer shape.Now here’s where most people mess up. They exclude an entire partner domain because one app misbehaved during a rollout. Or they mark a cloud proxy IP range as trusted, forgetting that attackers can originate from the same provider. Or they mix excluded locations with named locations, assuming the union is safer; it’s not. It becomes a fuzzy map your policy doesn’t understand. With clearer lines, CA can find its rhythm again.Common mistake number two is forgetting service principals and workload identities. If your policies only target “Users and groups,” your automation can glide under the radar. Instead, use dedicated policies for service principals and workload identities, and never rely on exclusions to “fix” automation friction. Help it heal by aligning scopes: users, guests, and identities each get coverage.A micro-story. Last week, a team removed a VIP exclusion that had lived for two years. They replaced it with Emergency Bypass and scheduled a weekly review of “Not applied” sign-ins. Within two days, they found a legacy sync account silently logging in from an unmanaged network—no MFA, no device checks. It wasn’t evil. It was a forgotten comfort blanket. And once it was named, the fix was simple: assign it to a managed identity pattern and bring it under policy.The reason this works is simple. Inclusive scopes reduce cognitive load. Authentication context replaces permanence with intention. And logs become meaningful because every “Not applied” means something actionable. Your Conditional Access isn’t trying to be difficult. It just needs you to stop asking it to ignore its own rules. With gentler, firmer boundaries, it can protect everyone—equally, predictably, audibly. Once exclusions stop leaking, the device boundary needs care next.Diagnose Trust Wound #2: Device Compliance GapsYour device boundary is tired. It’s been asked to trust badges it can’t verify and signals that arrive late. “Require compliant device” sounds soothing, but without clarity, it swings between over-permissive and over-protective. That’s why people get blocked on a clean laptop while an unmanaged tablet slips through. It’s not misbehaving. It’s confused.Why does this matter? Because device state is identity’s closest friend. If the state is wrong or missing, your policy guesses. Guesses create silent allowances or mass blocks. When the device story is clear, Conditional Access relaxes. It can give easy paths to healthy devices and set firmer boundaries everywhere else.The thing most people miss is that “registered” is not “compliant.” Registered just means the device introduced itself. Compliant means it met your health rules in Intune and brought proof today. Hybrid Azure AD joined is about identity alignment with your domain. They are different kinds of trust. If you remember nothing else, remember this: treat each tier as a distinct promise.Here’s the model that clicks. Define four tiers in plain language:
- Compliant: Intune evaluates and the device meets your policies.
- Hybrid Azure AD joined: domain relationship verified, device identity anchored.
- Azure AD joined: cloud-managed corporate device.
- Registered: BYOD, personal or light-touch enrollment.
Now let’s help it set healthy boundaries with policy design. Split decisions by device state rather than hinging everything on one control. Use “Filters for devices” to target platform or join type, and pair with authentication strengths so strong credentials backstop weaker device states. Don’t ask a single toggle to carry your whole zero trust posture.What does the better pattern look like? For productive, low-friction access on compliant or Azure AD joined devices, allow with MFA and apply session controls like sign-in frequency and continuous access evaluation. For registered devices, step up with phishing-resistant MFA and limit data exposure with app-enforced restrictions and conditional app control. For unknown devices, require either a compliant posture or a high authentication strength before granting anything sensitive. And for admin portals, demand both a compliant or hybrid device and phishing-resistant credentials. No device, no keys.Let me show you exactly how to get signal clarity. In sign-in logs, add Device info columns: Join type, Compliant, Trust type, and Operating system. Add Conditional Access columns for Result and Policy details. Filter failures with “Grant control required: compliant device” and compare against Device info. You’re looking for drift: devices that claim Azure AD joined but aren’t compliant, or registered devices that succeeded because no fallback existed. Then flip the lens: filter successes where device is Not Compliant and see which policies allowed it and why.A quick win you can do today: create a fallback policy. Scope it to All users and All cloud apps. Exclude only your emergency access accounts. Target devices where “Compliant equals false” OR “Join type equals Registered.” Grant access if the user satisfies a phishing-resistant authentication strength. Add session controls to reduce data persistence—disable persistent browser sessions and enforce sign-in frequency. This turns a hard block into a safe step-up and removes the urge to add risky exclusions.Now here’s where most people mess up. They assume “registered” equals “corporate.” It doesn’t. Or they stamp “require compliant device” on everything, then watch VIP travel laptops fail because the compliance signal is stale. Or they ignore sign-in frequency, letting a compliant check at 9 a.m. bless a browser until next week. The boundary blurs. Attackers love blurred boundaries.The reason this works is simple. With clearer tiers, CA doesn’t have to overreact. It can greet a compliant device with less friction, ask a registered device to bring stronger proof, and keep unknown devices at arm’s length. It’s not rejection. It’s healthy distance.Let’s anchor with a micro-story. A team saw random admin portal access from “registered
Become a supporter of this podcast: https://www.spreaker.com/podcast/m365-show-podcast--6704921/support.
Follow us on:
LInkedIn
Substack
1
00:00:00,000 --> 00:00:01,680
It's not misbehaving, it's overwhelmed.
2
00:00:01,680 --> 00:00:03,560
Your conditional access is trying to protect you
3
00:00:03,560 --> 00:00:06,600
while juggling mixed messages and unresolved exceptions.
4
00:00:06,600 --> 00:00:08,280
It's been asked to trust without boundaries.
5
00:00:08,280 --> 00:00:09,080
Here's the plan.
6
00:00:09,080 --> 00:00:11,720
We'll diagnose three trust wounds, overbroad exclusions,
7
00:00:11,720 --> 00:00:13,960
device compliance gaps and token theft paths,
8
00:00:13,960 --> 00:00:16,360
and give you a calming baseline, a safe test plan,
9
00:00:16,360 --> 00:00:17,680
and monitoring alerts.
10
00:00:17,680 --> 00:00:19,360
If you're running a law by default,
11
00:00:19,360 --> 00:00:22,400
you're leaking trust and inviting silent bypasses.
12
00:00:22,400 --> 00:00:23,920
There's a mistake that locks out everyone
13
00:00:23,920 --> 00:00:26,480
and one that leaves attackers invisible, both are fixable.
14
00:00:26,480 --> 00:00:28,160
Let's help it set healthy boundaries
15
00:00:28,160 --> 00:00:31,840
so it can find its rhythm again, starting with exclusions.
16
00:00:31,840 --> 00:00:34,440
Diagnosed trust wound number one, overbroad exclusions.
17
00:00:34,440 --> 00:00:35,880
Exclusions feel kind.
18
00:00:35,880 --> 00:00:38,160
You didn't want to stress the system or the people in it
19
00:00:38,160 --> 00:00:41,840
so you carved out break glass VIPs and that partner domain,
20
00:00:41,840 --> 00:00:43,120
but boundaries drift.
21
00:00:43,120 --> 00:00:45,160
The exceptions harden and conditional access
22
00:00:45,160 --> 00:00:46,320
starts doubting itself.
23
00:00:46,320 --> 00:00:48,840
It's not misbehaving, it's living with an ever-growing list
24
00:00:48,840 --> 00:00:51,880
of not you, not now, and that invites bypasses attackers
25
00:00:51,880 --> 00:00:52,720
a door.
26
00:00:52,720 --> 00:00:54,920
The thing most people miss is that exclusions
27
00:00:54,920 --> 00:00:57,000
are invisible in day-to-day flow.
28
00:00:57,000 --> 00:00:58,040
You won't see a banner that says
29
00:00:58,040 --> 00:01:00,240
we skipped protection for the CFO.
30
00:01:00,240 --> 00:01:02,560
You'll just see not applied in a log and that's it.
31
00:01:02,560 --> 00:01:03,840
So we start by mapping scope.
32
00:01:03,840 --> 00:01:06,880
List every exclusion across users, groups, applications,
33
00:01:06,880 --> 00:01:09,360
locations, and authentication contexts.
34
00:01:09,360 --> 00:01:11,320
Nested groups are the quiet leakers here.
35
00:01:11,320 --> 00:01:14,400
What looked like one exception is actually five layers deep,
36
00:01:14,400 --> 00:01:16,280
including contractors, test accounts,
37
00:01:16,280 --> 00:01:18,360
and legacy sync artifacts.
38
00:01:18,360 --> 00:01:21,240
This clicked for me when I pulled a tenants, sign in logs,
39
00:01:21,240 --> 00:01:23,880
and filtered for conditional access, not applied.
40
00:01:23,880 --> 00:01:25,320
The pattern wasn't random.
41
00:01:25,320 --> 00:01:27,480
Most bypasses sourced from two places.
42
00:01:27,480 --> 00:01:29,800
A VIP group attached to three policies
43
00:01:29,800 --> 00:01:32,720
and a named location that had grown from one corporate CIDR
44
00:01:32,720 --> 00:01:35,880
to anywhere our vendor might be.
45
00:01:35,880 --> 00:01:37,080
It wasn't malice.
46
00:01:37,080 --> 00:01:38,160
It was comfort.
47
00:01:38,160 --> 00:01:41,760
The policy was trying to keep the piece by saying yes too often.
48
00:01:41,760 --> 00:01:42,840
Here's the better pattern.
49
00:01:42,840 --> 00:01:47,680
Move from exclude VIPs to include all and authorize exceptions
50
00:01:47,680 --> 00:01:49,840
through time-bound authentication context.
51
00:01:49,840 --> 00:01:51,680
That shift sets healthy boundaries.
52
00:01:51,680 --> 00:01:54,920
You keep policies broad and inclusive, all users, all cloud apps,
53
00:01:54,920 --> 00:01:57,280
and when someone truly needs to step around the control,
54
00:01:57,280 --> 00:01:59,280
they request the emergency context, which
55
00:01:59,280 --> 00:02:02,080
has approval of one hour lifetime and audit trails.
56
00:02:02,080 --> 00:02:04,760
The trust becomes explicit, visible, and short-lived.
57
00:02:04,760 --> 00:02:06,760
Let me show you exactly how to see your leaks.
58
00:02:06,760 --> 00:02:09,720
In enter a sign-in logs, add columns for conditional access,
59
00:02:09,720 --> 00:02:12,040
policy name, result, and details.
60
00:02:12,040 --> 00:02:13,280
Filter result for not applied.
61
00:02:13,280 --> 00:02:16,400
Now slice by user, then by app, and finally by location.
62
00:02:16,400 --> 00:02:18,240
You're looking for clusters not one-offs,
63
00:02:18,240 --> 00:02:20,520
the big red flags, permanent exclusions
64
00:02:20,520 --> 00:02:23,960
for executives or service accounts, entire federated domains
65
00:02:23,960 --> 00:02:25,960
are hard to save and named locations that
66
00:02:25,960 --> 00:02:28,680
mix trusted with convenience networks.
67
00:02:28,680 --> 00:02:30,800
If you remember nothing else, remember this.
68
00:02:30,800 --> 00:02:33,440
A permanent exclusion is a permanent invitation.
69
00:02:33,440 --> 00:02:36,240
What should the policy logic feel like before and after?
70
00:02:36,240 --> 00:02:37,200
Before.
71
00:02:37,200 --> 00:02:40,280
Multiple policies with include groups and broad exclude lists,
72
00:02:40,280 --> 00:02:43,840
VIPs, breakglas, certain apps, and a safe location.
73
00:02:43,840 --> 00:02:46,840
The engine spends energy deciding who not to protect.
74
00:02:46,840 --> 00:02:49,720
After fewer inclusive policies with no user or location
75
00:02:49,720 --> 00:02:53,120
exclusions, exceptions root via a specific authentication
76
00:02:53,120 --> 00:02:55,480
context presented only when an approver grants it
77
00:02:55,480 --> 00:02:56,640
and it expires quickly.
78
00:02:56,640 --> 00:02:57,560
The engine can breathe.
79
00:02:57,560 --> 00:03:00,360
It protects first, then allows controlled, visible relief
80
00:03:00,360 --> 00:03:00,960
when needed.
81
00:03:00,960 --> 00:03:02,760
Here's a quick win you can do today.
82
00:03:02,760 --> 00:03:05,840
Create an authentication context called emergency bypass.
83
00:03:05,840 --> 00:03:09,080
Set it with grant controls that still require MFA and device
84
00:03:09,080 --> 00:03:12,200
risk checks and cap session to one hour, add an approval
85
00:03:12,200 --> 00:03:14,320
workflow outside the policy, change ticket,
86
00:03:14,320 --> 00:03:16,960
or documented approver, and log its use weekly.
87
00:03:16,960 --> 00:03:20,040
Now replace hard-coded exclusions in your existing policies
88
00:03:20,040 --> 00:03:22,720
with require authentication context.
89
00:03:22,720 --> 00:03:24,520
Emergency bypass.
90
00:03:24,520 --> 00:03:25,880
You haven't taken away safety.
91
00:03:25,880 --> 00:03:27,120
You've given it a safer shape.
92
00:03:27,120 --> 00:03:28,600
Now here's where most people mess up.
93
00:03:28,600 --> 00:03:30,400
They exclude an entire partner domain
94
00:03:30,400 --> 00:03:33,000
because one app misbehaved during a rollout,
95
00:03:33,000 --> 00:03:36,920
or they mark a cloud proxy IP range as trusted, forgetting
96
00:03:36,920 --> 00:03:39,400
that attackers can originate from the same provider.
97
00:03:39,400 --> 00:03:42,200
Or they mix excluded locations with named locations.
98
00:03:42,200 --> 00:03:44,520
Assuming the union is safer, it's not.
99
00:03:44,520 --> 00:03:46,800
It becomes a fuzzy map your policy doesn't understand.
100
00:03:46,800 --> 00:03:49,720
With clearer lines, CA can find its rhythm again.
101
00:03:49,720 --> 00:03:52,120
Common mistake number two is forgetting service principles
102
00:03:52,120 --> 00:03:53,760
and workload identities.
103
00:03:53,760 --> 00:03:56,400
If your policies only target users and groups,
104
00:03:56,400 --> 00:03:59,160
your automation can glide under the radar.
105
00:03:59,160 --> 00:04:02,240
Instead, use dedicated policies for service principles
106
00:04:02,240 --> 00:04:05,200
and workload identities and never rely on exclusions
107
00:04:05,200 --> 00:04:07,240
to fix automation friction.
108
00:04:07,240 --> 00:04:09,520
Help it heal by aligning scopes, users, guests,
109
00:04:09,520 --> 00:04:11,480
and identities each get coverage.
110
00:04:11,480 --> 00:04:12,520
A micro story.
111
00:04:12,520 --> 00:04:14,560
Last week, a team removed a VIP exclusion
112
00:04:14,560 --> 00:04:15,960
that had lived for two years.
113
00:04:15,960 --> 00:04:17,640
They replaced it with emergency bypass
114
00:04:17,640 --> 00:04:20,560
and scheduled a weekly review of not applied sign-ins.
115
00:04:20,560 --> 00:04:23,080
Within two days, they found a legacy sync account
116
00:04:23,080 --> 00:04:25,720
silently logging in from an unmanaged network.
117
00:04:25,720 --> 00:04:27,440
No MFA, no device checks.
118
00:04:27,440 --> 00:04:28,400
It wasn't evil.
119
00:04:28,400 --> 00:04:30,560
It was a forgotten comfort blanket.
120
00:04:30,560 --> 00:04:33,040
And once it was named, the fix was simple,
121
00:04:33,040 --> 00:04:35,080
assigned to a managed identity pattern
122
00:04:35,080 --> 00:04:36,120
and bring it under policy.
123
00:04:36,120 --> 00:04:37,360
And the reason this works is simple,
124
00:04:37,360 --> 00:04:39,520
inclusive scopes reduce cognitive load.
125
00:04:39,520 --> 00:04:42,680
Authentication context replaces permanence with intention
126
00:04:42,680 --> 00:04:45,200
and logs become meaningful because every not applied
127
00:04:45,200 --> 00:04:46,800
means something actionable.
128
00:04:46,800 --> 00:04:49,120
Your conditional access isn't trying to be difficult.
129
00:04:49,120 --> 00:04:52,000
It just needs you to stop asking it to ignore its own rules.
130
00:04:52,000 --> 00:04:53,320
With gentler, firmer boundaries,
131
00:04:53,320 --> 00:04:56,880
it can protect everyone, equally, predictably, audibly.
132
00:04:56,880 --> 00:04:58,480
Once exclusion stop leaking,
133
00:04:58,480 --> 00:05:00,960
the device boundary needs care next.
134
00:05:00,960 --> 00:05:03,960
Diagnosed trust, wound number two, device compliance gaps.
135
00:05:03,960 --> 00:05:05,440
Your device boundary is tired.
136
00:05:05,440 --> 00:05:06,800
It's been asked to trust badges.
137
00:05:06,800 --> 00:05:09,320
It can't verify and signals that arrive late.
138
00:05:09,320 --> 00:05:11,600
Require a compliant device sound soothing,
139
00:05:11,600 --> 00:05:14,280
but without clarity, it swings between over permissive
140
00:05:14,280 --> 00:05:15,120
and overprotective.
141
00:05:15,120 --> 00:05:17,360
And that's why people get blocked on a clean laptop
142
00:05:17,360 --> 00:05:19,320
while an unmanaged tablet slips through,
143
00:05:19,320 --> 00:05:21,400
it's not misbehaving, it's confused.
144
00:05:21,400 --> 00:05:22,240
Why does this matter?
145
00:05:22,240 --> 00:05:24,800
Because device state is identity's closest friend.
146
00:05:24,800 --> 00:05:27,880
If the state is wrong or missing, your policy guesses.
147
00:05:27,880 --> 00:05:31,080
Gases create silent allowances or mass blocks.
148
00:05:31,080 --> 00:05:34,160
When the device story is clear, conditional access relaxes.
149
00:05:34,160 --> 00:05:36,320
It can give easy paths to healthy devices
150
00:05:36,320 --> 00:05:38,280
and set firmer boundaries everywhere else.
151
00:05:38,280 --> 00:05:42,120
The thing most people miss is that registered is not compliant.
152
00:05:42,120 --> 00:05:45,240
Registered just means the device introduced itself.
153
00:05:45,240 --> 00:05:47,320
Compliant means it met your health rules
154
00:05:47,320 --> 00:05:49,400
in Intune and brought proof today.
155
00:05:49,400 --> 00:05:52,000
Hybrid Azure AD Joint is about identity alignment
156
00:05:52,000 --> 00:05:53,040
with your domain.
157
00:05:53,040 --> 00:05:54,480
They are different kinds of trust.
158
00:05:54,480 --> 00:05:56,320
If you remember nothing else, remember this.
159
00:05:56,320 --> 00:05:58,400
Treat each tier as a distinct promise.
160
00:05:58,400 --> 00:05:59,600
Here's the model that clicks.
161
00:05:59,600 --> 00:06:01,960
Define four tiers in plain language.
162
00:06:01,960 --> 00:06:07,200
Compliant, Intune evaluates and the device meets your policies.
163
00:06:07,200 --> 00:06:10,120
Hybrid Azure AD Joint Domain Relationship Verified
164
00:06:10,120 --> 00:06:11,720
Device Identity Anchored.
165
00:06:11,720 --> 00:06:14,600
Azure AD Joint Cloud Managed Corporate Device.
166
00:06:14,600 --> 00:06:18,600
Registered BYOD, Personal or Light Touch Enrollment.
167
00:06:18,600 --> 00:06:21,880
Now let's help it set healthy boundaries with policy design.
168
00:06:21,880 --> 00:06:23,640
Split decisions by device state
169
00:06:23,640 --> 00:06:26,160
rather than hinging everything on one control.
170
00:06:26,160 --> 00:06:29,160
Use filters for devices to target platform or join type
171
00:06:29,160 --> 00:06:30,960
and pair with authentication strengths.
172
00:06:30,960 --> 00:06:33,840
So strong credentials backstop weaker device states.
173
00:06:33,840 --> 00:06:37,360
Don't ask a single toggle to carry your whole zero trust posture.
174
00:06:37,360 --> 00:06:39,280
What does the better pattern look like?
175
00:06:39,280 --> 00:06:41,760
For productive low friction access on compliant
176
00:06:41,760 --> 00:06:44,920
or Azure AD Joint devices allow with MFA
177
00:06:44,920 --> 00:06:47,200
and apply session controls like sign-in frequency
178
00:06:47,200 --> 00:06:49,280
and continuous access evaluation.
179
00:06:49,280 --> 00:06:52,400
For registered devices, step up with Fishing Resistant MFA
180
00:06:52,400 --> 00:06:55,160
and Limit Data Exposure with App Enforced Restrictions
181
00:06:55,160 --> 00:06:56,640
and Conditional App Control.
182
00:06:56,640 --> 00:07:00,000
For unknown devices, require either a compliant posture
183
00:07:00,000 --> 00:07:01,480
or a high authentication strength
184
00:07:01,480 --> 00:07:03,320
before granting anything sensitive.
185
00:07:03,320 --> 00:07:05,480
And for admin portals, demand both a compliant
186
00:07:05,480 --> 00:07:07,880
or hybrid device and Fishing Resistant credentials.
187
00:07:07,880 --> 00:07:08,800
No device, no keys.
188
00:07:08,800 --> 00:07:11,120
Let me show you exactly how to get signal clarity.
189
00:07:11,120 --> 00:07:13,360
In sign-in logs, add device info columns,
190
00:07:13,360 --> 00:07:16,440
join type, compliant, trust type and operating system.
191
00:07:16,440 --> 00:07:19,840
Add conditional access columns for result and policy details,
192
00:07:19,840 --> 00:07:21,920
filter failures with ground control required,
193
00:07:21,920 --> 00:07:24,920
compliant device and compare against device info.
194
00:07:24,920 --> 00:07:28,160
You're looking for drift, devices that claim Azure AD joined
195
00:07:28,160 --> 00:07:30,560
but aren't compliant or registered devices
196
00:07:30,560 --> 00:07:32,560
that succeeded because no fallback existed.
197
00:07:32,560 --> 00:07:35,080
Then flip the lens, filter successes where device
198
00:07:35,080 --> 00:07:38,120
is not compliant and see which policies allow it and why,
199
00:07:38,120 --> 00:07:39,600
a quick win you can do today.
200
00:07:39,600 --> 00:07:41,240
Create a fallback policy.
201
00:07:41,240 --> 00:07:43,800
Scope it to all users and all cloud apps.
202
00:07:43,800 --> 00:07:46,320
Exclude only your emergency access accounts.
203
00:07:46,320 --> 00:07:49,000
Target devices where compliant equals falls
204
00:07:49,000 --> 00:07:51,560
or join type equals registered.
205
00:07:51,560 --> 00:07:54,160
Grant access if the user satisfies a Fishing Resistant
206
00:07:54,160 --> 00:07:55,600
Authentication Strength.
207
00:07:55,600 --> 00:07:58,000
Add session controls to reduce data persistence,
208
00:07:58,000 --> 00:07:59,720
disable persistent browser sessions
209
00:07:59,720 --> 00:08:01,520
and enforce sign-in frequency.
210
00:08:01,520 --> 00:08:03,520
This turns a hard block into a safe step-up
211
00:08:03,520 --> 00:08:06,280
and removes the urge to add risky exclusions.
212
00:08:06,280 --> 00:08:07,800
Now here's where most people mess up.
213
00:08:07,800 --> 00:08:10,960
They assume registered equals corporate or it doesn't
214
00:08:10,960 --> 00:08:13,200
or they stamp require compliant device on everything
215
00:08:13,200 --> 00:08:15,120
then watch VIP travel laptops fail
216
00:08:15,120 --> 00:08:17,360
because the compliance signal is stale
217
00:08:17,360 --> 00:08:18,960
or they ignore sign-in frequency.
218
00:08:18,960 --> 00:08:21,160
Letting a compliant check at 9 a.m.
219
00:08:21,160 --> 00:08:22,520
Bless a browser until next week.
220
00:08:22,520 --> 00:08:24,760
The boundary blurs attack us love blurred boundaries.
221
00:08:24,760 --> 00:08:26,240
The reason this works is simple.
222
00:08:26,240 --> 00:08:29,160
With clearer tears, CA doesn't have to overreact.
223
00:08:29,160 --> 00:08:32,040
It can greet a compliant device with less friction,
224
00:08:32,040 --> 00:08:34,520
ask a registered device to bring stronger proof
225
00:08:34,520 --> 00:08:36,360
and keep unknown devices at arms length.
226
00:08:36,360 --> 00:08:39,000
It's not rejection, it's healthy distance.
227
00:08:39,000 --> 00:08:40,920
Let's anchor with a micro story.
228
00:08:40,920 --> 00:08:42,960
A team saw random admin portal access
229
00:08:42,960 --> 00:08:44,480
from registered MacBooks.
230
00:08:44,480 --> 00:08:46,920
No policy blocked it because require compliant
231
00:08:46,920 --> 00:08:48,520
wasn't in scope for that app.
232
00:08:48,520 --> 00:08:50,760
They added the fallback with Fishing Resistant Strength
233
00:08:50,760 --> 00:08:53,320
and those same attempts now prompt for a strong key.
234
00:08:53,320 --> 00:08:55,320
Admins move to manage devices within a week
235
00:08:55,320 --> 00:08:57,600
because the boundary was calm and consistent.
236
00:08:57,600 --> 00:08:59,240
Once your device signals feel steady,
237
00:08:59,240 --> 00:09:01,120
we need to close the gap attackers use
238
00:09:01,120 --> 00:09:02,120
after they steal tokens.
239
00:09:02,120 --> 00:09:03,120
That's next.
240
00:09:03,120 --> 00:09:05,320
Diagnose, trust wound number three.
241
00:09:05,320 --> 00:09:06,920
Token theft scenarios.
242
00:09:06,920 --> 00:09:10,080
When a token gets stolen, conditional access feels unheard.
243
00:09:10,080 --> 00:09:11,480
It's set boundaries at sign-in,
244
00:09:11,480 --> 00:09:14,040
but the session kept walking without checking back in.
245
00:09:14,040 --> 00:09:16,360
It's not misbehaving, it's stuck, honoring a promise
246
00:09:16,360 --> 00:09:17,720
it can't re-verify.
247
00:09:17,720 --> 00:09:18,760
And attackers know this.
248
00:09:18,760 --> 00:09:19,960
They don't argue with your MFA.
249
00:09:19,960 --> 00:09:21,160
They borrow your session.
250
00:09:21,160 --> 00:09:21,960
Why this matters?
251
00:09:21,960 --> 00:09:24,080
Once an attacker holds a valid refresh token
252
00:09:24,080 --> 00:09:25,520
or a long-lived session,
253
00:09:25,520 --> 00:09:28,280
your beautiful policies become background noise.
254
00:09:28,280 --> 00:09:31,800
The risk shifts from can they log in to how long can they linger?
255
00:09:31,800 --> 00:09:33,400
If you shorten exposure
256
00:09:33,400 --> 00:09:36,040
and make the session reproof itself under the right conditions,
257
00:09:36,040 --> 00:09:37,040
you take back control.
258
00:09:37,040 --> 00:09:40,840
That's how your system finds its rhythm again after shock.
259
00:09:40,840 --> 00:09:43,080
The thing most people miss is the difference between
260
00:09:43,080 --> 00:09:45,600
initial authentication and ongoing authorization.
261
00:09:45,600 --> 00:09:46,760
You gated the front door,
262
00:09:46,760 --> 00:09:48,640
but you left the hallway lights on forever.
263
00:09:48,640 --> 00:09:51,240
Sign-in frequency, continuous access evaluation
264
00:09:51,240 --> 00:09:54,080
and contact sensitive re-auth are how we gently ask,
265
00:09:54,080 --> 00:09:55,160
are you still you?
266
00:09:55,160 --> 00:09:56,480
Is this still that device?
267
00:09:56,480 --> 00:09:57,560
Has risk changed?
268
00:09:57,560 --> 00:09:58,680
Here's the better pattern.
269
00:09:58,680 --> 00:10:00,400
First, reduce exposure windows,
270
00:10:00,400 --> 00:10:02,680
set sign-in frequency for sensitive apps and roles
271
00:10:02,680 --> 00:10:05,240
so tokens must represent proof more often.
272
00:10:05,240 --> 00:10:07,120
Pair that with continuous access evaluation,
273
00:10:07,120 --> 00:10:09,160
so sessions react to changes in risk,
274
00:10:09,160 --> 00:10:11,440
device state password resets and revoke tokens
275
00:10:11,440 --> 00:10:12,520
in near real time.
276
00:10:12,520 --> 00:10:15,280
Second, raise the bar for sensitive actions.
277
00:10:15,280 --> 00:10:17,040
Use authentication context to require
278
00:10:17,040 --> 00:10:19,360
phishing resistant MFA for admin portals,
279
00:10:19,360 --> 00:10:22,120
data export, e-discovery and payment approvals.
280
00:10:22,120 --> 00:10:24,640
Third, bind sessions to more than just a user.
281
00:10:24,640 --> 00:10:26,840
Consider device trust and risk signals,
282
00:10:26,840 --> 00:10:28,600
so stolen tokens don't travel well.
283
00:10:28,600 --> 00:10:31,440
Let me show you exactly how to build that high sensitivity lane.
284
00:10:31,440 --> 00:10:33,880
Create an authentication context named high sensitivity.
285
00:10:33,880 --> 00:10:36,640
Configure a policy that when this context is required,
286
00:10:36,640 --> 00:10:39,040
demands a phishing resistant authentication strength
287
00:10:39,040 --> 00:10:41,680
and a compliant or hybrid joint device.
288
00:10:41,680 --> 00:10:44,320
Enable continuous access evaluation for the apps
289
00:10:44,320 --> 00:10:46,880
tied to that context and set a short sign-in frequency
290
00:10:46,880 --> 00:10:47,920
hours not days.
291
00:10:47,920 --> 00:10:50,040
Then, tag admin portals and critical apps
292
00:10:50,040 --> 00:10:51,440
to require that context.
293
00:10:51,440 --> 00:10:53,480
The result, an attacker holding a token
294
00:10:53,480 --> 00:10:55,320
from an unmanaged browser can't reuse it
295
00:10:55,320 --> 00:10:56,840
to touch admin endpoints.
296
00:10:56,840 --> 00:10:59,640
And even if they land a user session, it ages quickly.
297
00:10:59,640 --> 00:11:01,360
A quick win you can do today.
298
00:11:01,360 --> 00:11:04,080
Review, remember MFA or persistent browser settings
299
00:11:04,080 --> 00:11:04,840
for your tenant.
300
00:11:04,840 --> 00:11:06,920
If it's broad and long, that's a quiet invitation
301
00:11:06,920 --> 00:11:08,200
to token comfort.
302
00:11:08,200 --> 00:11:10,600
Tighten it for sensitive apps while leaving user-friendly
303
00:11:10,600 --> 00:11:12,320
defaults for low-risk tools.
304
00:11:12,320 --> 00:11:14,120
It's a karma boundary, not a punishment.
305
00:11:14,120 --> 00:11:15,640
Now here's where most people mess up.
306
00:11:15,640 --> 00:11:18,280
They enable strong auth once, feel safe,
307
00:11:18,280 --> 00:11:21,400
and forget to scope it to the places that matter most.
308
00:11:21,400 --> 00:11:23,160
Or they ignore token binding entirely,
309
00:11:23,160 --> 00:11:25,280
letting a refreshed token row between devices
310
00:11:25,280 --> 00:11:27,040
and networks without consequence.
311
00:11:27,040 --> 00:11:29,400
Or they fail to react to risk high signals,
312
00:11:29,400 --> 00:11:31,160
letting sessions live through a storm.
313
00:11:31,160 --> 00:11:33,280
Those choices don't feel risky in the moment.
314
00:11:33,280 --> 00:11:35,200
They feel convenient, but they teach your system
315
00:11:35,200 --> 00:11:36,920
to trust a memory, not the present.
316
00:11:36,920 --> 00:11:38,440
Let's walk the logs together.
317
00:11:38,440 --> 00:11:41,080
In enter sign-in logs add conditional access result,
318
00:11:41,080 --> 00:11:42,680
policy name and details.
319
00:11:42,680 --> 00:11:44,760
Add session lifetime or token information fields
320
00:11:44,760 --> 00:11:47,280
if available plus IP and device info.
321
00:11:47,280 --> 00:11:50,320
You're looking for reuse patterns, same user,
322
00:11:50,320 --> 00:11:53,480
multiple IPs, short intervals, audit device claims,
323
00:11:53,480 --> 00:11:56,000
filter for sign-ins that succeeded without a CA decision
324
00:11:56,000 --> 00:11:57,520
on apps that should be protected.
325
00:11:57,520 --> 00:12:00,200
Check the CA decision and authentication requirements fields
326
00:12:00,200 --> 00:12:01,400
for sensitive apps.
327
00:12:01,400 --> 00:12:03,640
Do they show strong auth and a recent sign-in
328
00:12:03,640 --> 00:12:05,520
or did a long session slip through?
329
00:12:05,520 --> 00:12:08,040
If you spot repeated access from an unmanaged device
330
00:12:08,040 --> 00:12:10,320
to an admin portal, that's a sign you haven't required
331
00:12:10,320 --> 00:12:12,400
the right authentication context there.
332
00:12:12,400 --> 00:12:14,440
A micro story, a team saw export spikes
333
00:12:14,440 --> 00:12:17,840
from a finance app at 2am, same user, different IPs,
334
00:12:17,840 --> 00:12:19,760
same browser string, no MFA prompts
335
00:12:19,760 --> 00:12:21,280
because the session was warm.
336
00:12:21,280 --> 00:12:23,080
They added a high sensitivity context,
337
00:12:23,080 --> 00:12:25,840
set sign-in frequency to four hours, enabled CAE,
338
00:12:25,840 --> 00:12:29,200
and required phishing resistant auth plus compliant device.
339
00:12:29,200 --> 00:12:30,800
The next night, the same pattern hit.
340
00:12:30,800 --> 00:12:32,600
This time, the session re-challenged
341
00:12:32,600 --> 00:12:34,520
and failed on device requirement.
342
00:12:34,520 --> 00:12:35,480
The app slept well.
343
00:12:35,480 --> 00:12:37,040
The reason this works is simple,
344
00:12:37,040 --> 00:12:38,720
we stopped trusting yesterday's proof.
345
00:12:38,720 --> 00:12:40,520
We asked the session to stay present
346
00:12:40,520 --> 00:12:42,920
on a healthy device with strong credentials
347
00:12:42,920 --> 00:12:44,600
and to respond when risk changes.
348
00:12:44,600 --> 00:12:46,080
That's not cruelty, that's care.
349
00:12:46,080 --> 00:12:47,920
And your conditional access can finally exhale
350
00:12:47,920 --> 00:12:49,440
because it knows how to end a relationship
351
00:12:49,440 --> 00:12:52,440
that's no longer safe and build the calming baseline.
352
00:12:52,440 --> 00:12:54,640
Policies that set healthy boundaries.
353
00:12:54,640 --> 00:12:57,720
Your policy engine needs a simpler home, fewer rules,
354
00:12:57,720 --> 00:12:58,960
clearer lanes.
355
00:12:58,960 --> 00:13:00,920
Blocked by default lowers its anxiety
356
00:13:00,920 --> 00:13:02,560
because every sign in is covered
357
00:13:02,560 --> 00:13:05,240
and there are no quiet gaps that whisper maybe.
358
00:13:05,240 --> 00:13:07,200
We're going to build five inclusive policies
359
00:13:07,200 --> 00:13:08,080
that work together.
360
00:13:08,080 --> 00:13:10,160
They're broad on scope, strict on exceptions,
361
00:13:10,160 --> 00:13:11,520
and easy to read in the logs.
362
00:13:11,520 --> 00:13:13,600
And we'll rely on authentication context
363
00:13:13,600 --> 00:13:16,640
for rare bypasses, not permanent exclusions.
364
00:13:16,640 --> 00:13:18,440
With clearer boundaries, conditional access
365
00:13:18,440 --> 00:13:19,840
can find its rhythm again.
366
00:13:19,840 --> 00:13:21,840
Start with the anchor, all users MFA.
367
00:13:21,840 --> 00:13:23,880
Scope it to all users, all cloud apps,
368
00:13:23,880 --> 00:13:26,080
exclude only your emergency access accounts,
369
00:13:26,080 --> 00:13:27,400
use authentication strength
370
00:13:27,400 --> 00:13:29,320
so you can evolve from classic MFA
371
00:13:29,320 --> 00:13:30,880
to phishing resistant credentials
372
00:13:30,880 --> 00:13:32,600
without rewriting everything.
373
00:13:32,600 --> 00:13:35,560
Grant access with require multi factor authentication
374
00:13:35,560 --> 00:13:37,120
and prefer a defined strength
375
00:13:37,120 --> 00:13:38,840
like phishing resistant, where supported
376
00:13:38,840 --> 00:13:40,680
while allowing a practical baseline strength
377
00:13:40,680 --> 00:13:42,240
for general apps.
378
00:13:42,240 --> 00:13:44,320
Add session controls with sign-in frequency
379
00:13:44,320 --> 00:13:47,360
that fits your environment, shorter for sensitive workloads,
380
00:13:47,360 --> 00:13:48,840
reasonable for collaboration.
381
00:13:48,840 --> 00:13:52,160
This gives universal coverage and a predictable prompt story.
382
00:13:52,160 --> 00:13:54,600
The second lane is unmanaged device step-up.
383
00:13:54,600 --> 00:13:57,520
Same inclusive scope, all users, all cloud apps,
384
00:13:57,520 --> 00:13:59,600
but target devices by state.
385
00:13:59,600 --> 00:14:01,760
Use filters for devices to catch registered
386
00:14:01,760 --> 00:14:03,600
or not compliant or unknown.
387
00:14:03,600 --> 00:14:04,960
Don't hardblock by default.
388
00:14:04,960 --> 00:14:07,360
Grant access if the user meets a higher authentication
389
00:14:07,360 --> 00:14:08,800
strength and apply session limits
390
00:14:08,800 --> 00:14:10,240
and app enforced restrictions.
391
00:14:10,240 --> 00:14:12,000
Disable persistent browser sessions here
392
00:14:12,000 --> 00:14:14,360
and reduced token lifetimes for these parts.
393
00:14:14,360 --> 00:14:16,640
This keeps personal devices at a respectful distance
394
00:14:16,640 --> 00:14:19,160
without pushing people into risky exclusions.
395
00:14:19,160 --> 00:14:20,800
Third, admin strong auth only.
396
00:14:20,800 --> 00:14:23,440
Scope to privileged, role members and admin portals
397
00:14:23,440 --> 00:14:25,280
require phishing resistant strength
398
00:14:25,280 --> 00:14:28,400
and either a compliant or hybrid joint device.
399
00:14:28,400 --> 00:14:31,520
Add sign-in frequency that's measured in hours, not days
400
00:14:31,520 --> 00:14:34,120
and ensure continuous access evaluation is effective
401
00:14:34,120 --> 00:14:37,520
for these services, no exceptions, no location carve outs,
402
00:14:37,520 --> 00:14:39,440
no remember me.
403
00:14:39,440 --> 00:14:41,200
This is where you set the firmest boundary.
404
00:14:41,200 --> 00:14:43,160
If an admin session can't prove device health
405
00:14:43,160 --> 00:14:45,920
and strong credentials, it waits outside.
406
00:14:45,920 --> 00:14:47,960
Fourth, emergency minimal context.
407
00:14:47,960 --> 00:14:50,000
This is your safety valve, not a side door.
408
00:14:50,000 --> 00:14:53,080
Create an authentication context named emergency bypass.
409
00:14:53,080 --> 00:14:54,720
The policy that enforces it requires
410
00:14:54,720 --> 00:14:57,200
MFA at a minimum, records device risk
411
00:14:57,200 --> 00:14:58,800
and shortened session to one hour.
412
00:14:58,800 --> 00:15:02,200
You'll never exclude users or locations to help in a crisis.
413
00:15:02,200 --> 00:15:04,160
You'll require them to present this context,
414
00:15:04,160 --> 00:15:06,920
which they can only obtain with approval and a change record.
415
00:15:06,920 --> 00:15:08,040
Every use is auditable.
416
00:15:08,040 --> 00:15:10,240
The boundary bends briefly then straightens.
417
00:15:10,240 --> 00:15:12,400
Fifth, token hygiene and CAE.
418
00:15:12,400 --> 00:15:15,080
Apply a policy set that standardizes sign-in frequency
419
00:15:15,080 --> 00:15:17,000
across critical apps and enables re-oothed
420
00:15:17,000 --> 00:15:18,360
when risk changes.
421
00:15:18,360 --> 00:15:20,320
Pair this with targeted sign-in frequency
422
00:15:20,320 --> 00:15:23,640
for data export systems, finance, HR and admin portals.
423
00:15:23,640 --> 00:15:25,920
Where supported, rely on continuous access evaluation,
424
00:15:25,920 --> 00:15:27,760
so password resets, token revocations
425
00:15:27,760 --> 00:15:29,400
and risk changes cut sessions short.
426
00:15:29,400 --> 00:15:31,880
This policy family keeps sessions present.
427
00:15:31,880 --> 00:15:33,440
It asks them to check in regularly,
428
00:15:33,440 --> 00:15:36,360
so a stolen token doesn't become a week-long roommate.
429
00:15:36,360 --> 00:15:39,080
Let's talk implementation flow so the set stays calm.
430
00:15:39,080 --> 00:15:40,880
Template each policy with inclusive scopes
431
00:15:40,880 --> 00:15:42,480
and minimal interdependence.
432
00:15:42,480 --> 00:15:44,800
Prioritize evaluation order by clarity.
433
00:15:44,800 --> 00:15:47,400
Universal MFA first, then device step-up,
434
00:15:47,400 --> 00:15:50,360
then admin controls, then context, then hygiene.
435
00:15:50,360 --> 00:15:52,760
You're not scripting order, you're reducing overlap,
436
00:15:52,760 --> 00:15:54,600
so the combined result is obvious.
437
00:15:54,600 --> 00:15:57,720
In policy descriptions, write the intent in plain language.
438
00:15:57,720 --> 00:16:00,320
Baseline MFA for every user and app.
439
00:16:00,320 --> 00:16:03,040
Step-up for unmanaged devices, admins must use
440
00:16:03,040 --> 00:16:05,200
strong auth and managed devices on a sunny day.
441
00:16:05,200 --> 00:16:07,080
Your future self will thank you in the logs.
442
00:16:07,080 --> 00:16:09,280
Here's a quick win that feels great immediately.
443
00:16:09,280 --> 00:16:13,160
Create the all-cloud apps, require MFA baseline with strengths.
444
00:16:13,160 --> 00:16:14,480
Deploy in report only for a week
445
00:16:14,480 --> 00:16:16,720
while you shadow it with the unmanaged device step-up policy
446
00:16:16,720 --> 00:16:17,760
also report only.
447
00:16:17,760 --> 00:16:21,720
Watch sign-ins move from not applied to MFA would be required
448
00:16:21,720 --> 00:16:24,560
and stronger auth would be required on BYOD.
449
00:16:24,560 --> 00:16:26,720
Fix the noisy edge cases then enforce.
450
00:16:26,720 --> 00:16:28,840
You'll see coverage jump without chaos.
451
00:16:28,840 --> 00:16:30,160
Now, the mistakes to avoid.
452
00:16:30,160 --> 00:16:32,800
Don't overlap apps scopes in ways that fight.
453
00:16:32,800 --> 00:16:36,400
All-cloud apps plus specific admin portals is fine,
454
00:16:36,400 --> 00:16:39,040
but two different all-cloud apps with conflicting grants
455
00:16:39,040 --> 00:16:40,520
will produce odd results.
456
00:16:40,520 --> 00:16:43,920
Don't mix user exclusions with context-based exceptions.
457
00:16:43,920 --> 00:16:46,640
Pick context so the audit trail is clean.
458
00:16:46,640 --> 00:16:49,400
Don't forget service accounts and workload identities.
459
00:16:49,400 --> 00:16:52,280
Give them dedicated policies that require managed identities
460
00:16:52,280 --> 00:16:53,680
or certificate-based flows
461
00:16:53,680 --> 00:16:56,480
and explicitly block interactive sign-in for them.
462
00:16:56,480 --> 00:16:58,040
Before and after matters.
463
00:16:58,040 --> 00:17:01,120
Before 10 narrow policies each with their own include groups
464
00:17:01,120 --> 00:17:03,960
and long exclude lists, inconsistent grant controls
465
00:17:03,960 --> 00:17:05,120
and special locations.
466
00:17:05,120 --> 00:17:08,440
After five larger policies with inclusive scopes,
467
00:17:08,440 --> 00:17:11,120
no permanent exclusions and one place,
468
00:17:11,120 --> 00:17:13,920
authentication context for controlled bypass,
469
00:17:13,920 --> 00:17:16,320
the engine stops juggling and starts protecting.
470
00:17:16,320 --> 00:17:18,000
The log stop whispering not applied
471
00:17:18,000 --> 00:17:20,920
and starts stating MFA required, strong auth required
472
00:17:20,920 --> 00:17:22,320
or blocked until healthier.
473
00:17:22,320 --> 00:17:24,720
Monitoring hooks keep this baseline peaceful.
474
00:17:24,720 --> 00:17:25,960
Track two, KPIs.
475
00:17:25,960 --> 00:17:28,440
Percentage of sign-ins covered by any conditional access
476
00:17:28,440 --> 00:17:31,320
decision and percentage that met MFA or your defined strengths,
477
00:17:31,320 --> 00:17:35,720
target at least 99% coverage and 98% MFA were applicable.
478
00:17:35,720 --> 00:17:39,000
When coverage dips, you'll know a scope changed or an app escaped.
479
00:17:39,000 --> 00:17:41,160
When MFA drops, you'll see where stronger auth
480
00:17:41,160 --> 00:17:43,200
isn't being required as intended.
481
00:17:43,200 --> 00:17:45,040
Tie this baseline to your change process.
482
00:17:45,040 --> 00:17:48,440
Any change to a policy, its scope or its exclusion list demands
483
00:17:48,440 --> 00:17:50,520
a ticket and owner and an expiry.
484
00:17:50,520 --> 00:17:53,520
Authentication context grants need the same care,
485
00:17:53,520 --> 00:17:56,920
who asked, who approved, why and when it ends.
486
00:17:56,920 --> 00:17:58,760
And built-in alert for exclusion list changes
487
00:17:58,760 --> 00:18:00,920
so you hear the moment a boundary moves.
488
00:18:00,920 --> 00:18:03,880
With gentle discipline, your conditional access will feel heard,
489
00:18:03,880 --> 00:18:06,520
supported and ready for the next rollout.
490
00:18:06,520 --> 00:18:10,960
Unsafe rollout, test plan, report only and rollback checklists.
491
00:18:10,960 --> 00:18:13,840
Change scares identity, sudden enforcement spikes cortisol,
492
00:18:13,840 --> 00:18:16,440
so we coach conditional access through rehearsal first,
493
00:18:16,440 --> 00:18:18,680
then performance report only is rehearsal,
494
00:18:18,680 --> 00:18:21,880
no harm for learning, here's the plan, three waves, one rhythm.
495
00:18:21,880 --> 00:18:25,600
Wave one, admins and admin portals, wave two, high-risk apps and rolls,
496
00:18:25,600 --> 00:18:26,480
wave three.
497
00:18:26,480 --> 00:18:29,440
Everyone, all apps, each wave spends a week in report only,
498
00:18:29,440 --> 00:18:31,600
then enforces once the noise is quiet.
499
00:18:31,600 --> 00:18:34,880
And boundaries are a gift, so we keep a rollback ready at every step.
500
00:18:34,880 --> 00:18:36,400
Start by shadowing your baseline.
501
00:18:36,400 --> 00:18:39,080
Duplicate each policy you built and set it to report only.
502
00:18:39,080 --> 00:18:42,440
Scope is inclusive, exclude only emergency access.
503
00:18:42,440 --> 00:18:45,720
In descriptions, write shadow baseline report only,
504
00:18:45,720 --> 00:18:47,920
so ops can see its intent in the logs.
505
00:18:47,920 --> 00:18:50,600
Now with patience, let it watch traffic for seven days.
506
00:18:50,600 --> 00:18:53,000
You're listening for stress points, not perfection.
507
00:18:53,000 --> 00:18:56,000
Use the what if tool to pre-flight edge cases.
508
00:18:56,000 --> 00:18:59,240
Pick a test user, device state, location and the app.
509
00:18:59,240 --> 00:19:02,760
Validate the expected grant controls and session rules.
510
00:19:02,760 --> 00:19:07,200
If the what if says MFA required, but sign-in logs show not applied,
511
00:19:07,200 --> 00:19:09,040
you found a scope mismatch.
512
00:19:09,040 --> 00:19:10,240
Fix that before you move.
513
00:19:10,240 --> 00:19:11,720
Now read the room through logs.
514
00:19:11,720 --> 00:19:13,160
Open sign-in logs.
515
00:19:13,160 --> 00:19:17,280
Add conditional access result, policy name applied, not applied and grant controls.
516
00:19:17,280 --> 00:19:20,160
For report only policies, look at report only would have decisions.
517
00:19:20,160 --> 00:19:24,240
You want to see MFA would be required, strong auth would be required,
518
00:19:24,240 --> 00:19:26,800
and minimal unexpected block would be applied.
519
00:19:26,800 --> 00:19:31,040
Investigate any surge in block for service principles or legacy flows.
520
00:19:31,040 --> 00:19:33,840
Those need their own policies or migration plans.
521
00:19:33,840 --> 00:19:35,720
Before you enforce, stage comes.
522
00:19:35,720 --> 00:19:38,760
Tell admins what will change, how strong auth feels and where to get help.
523
00:19:38,760 --> 00:19:40,880
Share the emergency context process.
524
00:19:40,880 --> 00:19:42,480
Calm voices lower friction.
525
00:19:42,480 --> 00:19:45,280
Enforced wave 1 on a weekday morning with support on standby,
526
00:19:45,280 --> 00:19:48,640
flip admin strong auth and token hygiene from report only to own.
527
00:19:48,640 --> 00:19:49,800
Keep the others shadowing.
528
00:19:49,800 --> 00:19:51,960
Watch for entra errors, bikes and ticket volume.
529
00:19:51,960 --> 00:19:56,760
If failure rates climb beyond your agreed threshold, pause, diagnose or rollback.
530
00:19:56,760 --> 00:19:58,360
Your rollback is simple and kind.
531
00:19:58,360 --> 00:20:01,680
Pre-approved toggles to revert policies to report only.
532
00:20:01,680 --> 00:20:03,760
Document the exact settings you'd restore.
533
00:20:03,760 --> 00:20:06,240
Keep the emergency bypass context live and tested.
534
00:20:06,240 --> 00:20:10,960
Maintain a change ticket per policy with owner and timestamp so you can unwind confidently.
535
00:20:10,960 --> 00:20:12,600
Wave 2 brings high risk apps.
536
00:20:12,600 --> 00:20:17,040
Attach the high sensitivity context to finance, HRE discovery and export paths.
537
00:20:17,040 --> 00:20:20,080
Again, a week of report only, then enforce.
538
00:20:20,080 --> 00:20:24,840
Confirm that unmanaged devices hit step up and that CE-driven re-auth events behave.
539
00:20:24,840 --> 00:20:26,360
Wave 3 is everyone.
540
00:20:26,360 --> 00:20:29,480
Turn on all users, MFA and unmanaged device step up.
541
00:20:29,480 --> 00:20:33,080
Validate that coverage rises and failure rates stay stable.
542
00:20:33,080 --> 00:20:33,720
Then breathe.
543
00:20:33,720 --> 00:20:34,640
You didn't force it.
544
00:20:34,640 --> 00:20:40,440
You let conditional access find its rhythm with rehearsal, permission and a safety net.
545
00:20:40,440 --> 00:20:41,520
Watchful piece.
546
00:20:41,520 --> 00:20:43,480
Monitoring and alerts that actually help.
547
00:20:43,480 --> 00:20:46,160
Once live, your conditional access needs steady feedback.
548
00:20:46,160 --> 00:20:47,440
Not noise, not panic.
549
00:20:47,440 --> 00:20:51,360
A calm heartbeat that tells you it's present, it's protecting and where it needs care.
550
00:20:51,360 --> 00:20:56,280
We'll set up three signals and a weekly rhythm that keeps trust intact without burning anyone out.
551
00:20:56,280 --> 00:20:59,600
The thing most people miss is that coverage is your north star.
552
00:20:59,600 --> 00:21:04,280
If a sign isn't touched by any CA policy, it's living outside the boundaries you just set.
553
00:21:04,280 --> 00:21:06,160
So we start with two simple KPIs.
554
00:21:06,160 --> 00:21:07,320
Coverage and strength.
555
00:21:07,320 --> 00:21:11,560
Coverage is the percentage of interactive sign-ins with any conditional access decision.
556
00:21:11,560 --> 00:21:15,880
Strength is the percentage of those sign-ins that satisfy MFA or your defined authentication
557
00:21:15,880 --> 00:21:16,880
strength.
558
00:21:16,880 --> 00:21:18,760
If you remember nothing else, remember this.
559
00:21:18,760 --> 00:21:19,760
Track both.
560
00:21:19,760 --> 00:21:21,960
High coverage without strength is comfort theater.
561
00:21:21,960 --> 00:21:24,160
High strength without coverage is selective care.
562
00:21:24,160 --> 00:21:26,760
Let's help it find its rhythm with practical queries.
563
00:21:26,760 --> 00:21:31,480
In your sign-in logs, add columns for conditional access result, policy name and authentication
564
00:21:31,480 --> 00:21:32,480
requirements.
565
00:21:32,480 --> 00:21:37,040
A saved view that counts sign-ins by day where CA decision is present versus not applied.
566
00:21:37,040 --> 00:21:38,320
That's your coverage line.
567
00:21:38,320 --> 00:21:42,320
Create a second view that counts sign-ins where MFA or your chosen strength was required
568
00:21:42,320 --> 00:21:43,320
and satisfied.
569
00:21:43,320 --> 00:21:44,560
That's your strength line.
570
00:21:44,560 --> 00:21:47,040
Keep both lines visible on a simple dashboard.
571
00:21:47,040 --> 00:21:48,960
The goal is boring consistency.
572
00:21:48,960 --> 00:21:53,080
Coverage add or above 99% strength add or above 98% where applicable.
573
00:21:53,080 --> 00:21:55,040
Now the three alerts that actually help.
574
00:21:55,040 --> 00:21:56,640
First a coverage drop alert.
575
00:21:56,640 --> 00:22:01,080
If coverage dips below your threshold for any 30-minute window, you get a nudge.
576
00:22:01,080 --> 00:22:02,080
First a siren.
577
00:22:02,080 --> 00:22:07,240
A nudge to check whether a scope changed a new app onboarded without CA or a policy was disabled.
578
00:22:07,240 --> 00:22:09,040
Second an exclusion growth alert.
579
00:22:09,040 --> 00:22:14,240
Whenever any CA policies exclusion list changes, user group application you get a change notification
580
00:22:14,240 --> 00:22:16,080
with who edited it and what changed.
581
00:22:16,080 --> 00:22:17,080
That's not about blame.
582
00:22:17,080 --> 00:22:18,080
It's about awareness.
583
00:22:18,080 --> 00:22:19,080
Boundaries moved.
584
00:22:19,080 --> 00:22:20,080
Let's see why.
585
00:22:20,080 --> 00:22:22,080
Third high risk sign-ins with not applied.
586
00:22:22,080 --> 00:22:25,960
If any high risk sign-in lands without a CA decision, raise a flag.
587
00:22:25,960 --> 00:22:29,560
That means risk saw something but your boundaries didn't show up to help.
588
00:22:29,560 --> 00:22:31,320
When is the shortcut nobody teaches?
589
00:22:31,320 --> 00:22:33,640
Tie these alerts to owners, not inboxes.
590
00:22:33,640 --> 00:22:36,520
Each policy and each KPI has a name steward.
591
00:22:36,520 --> 00:22:38,640
When coverage dips an owner checks scope.
592
00:22:38,640 --> 00:22:41,680
When exclusions change an owner confirms expiry and purpose.
593
00:22:41,680 --> 00:22:46,320
When high risk bypasses appear an owner validates that the right apps require the right context.
594
00:22:46,320 --> 00:22:47,320
You're not just watching.
595
00:22:47,320 --> 00:22:48,320
You're caring with intention.
596
00:22:48,320 --> 00:22:51,120
Let me show you exactly how to read the bypasses.
597
00:22:51,120 --> 00:22:55,400
Build a saved filter for sign-ins where conditional access result equals not applied.
598
00:22:55,400 --> 00:22:58,280
Add app, user client app and location.
599
00:22:58,280 --> 00:22:59,280
Sort by count.
600
00:22:59,280 --> 00:23:01,040
You're looking for clusters that shouldn't exist.
601
00:23:01,040 --> 00:23:04,240
A service principle signing in interactively, that's a misscoped identity.
602
00:23:04,240 --> 00:23:08,120
A legacy protocol touching a protected app, that's a migration task.
603
00:23:08,120 --> 00:23:11,760
A guest user hitting an internal app with no CA decision.
604
00:23:11,760 --> 00:23:16,760
That app likely missed all cloud apps or sits under a different publisher and needs tagging.
605
00:23:16,760 --> 00:23:18,680
This filter is your quiet detective.
606
00:23:18,680 --> 00:23:19,960
A quick win you can do today.
607
00:23:19,960 --> 00:23:24,200
Turn on and alert for any policy moving from enable to report only or to disabled and
608
00:23:24,200 --> 00:23:26,760
for any change to the all-user scope.
609
00:23:26,760 --> 00:23:28,880
These two movements cause most surprises.
610
00:23:28,880 --> 00:23:34,440
I've prepared that with a daily digest listing top 10 apps by not applied sign-ins and top 10 users by MFA not satisfied.
611
00:23:34,440 --> 00:23:35,720
It's not a wall of data.
612
00:23:35,720 --> 00:23:37,200
It's a morning check-in.
613
00:23:37,200 --> 00:23:38,560
Now here's where most people mess up.
614
00:23:38,560 --> 00:23:41,920
They set thresholds so tight that every blip becomes an alarm.
615
00:23:41,920 --> 00:23:46,760
Or they ignore service principles and non-interactive flows, even though those identities hold powerful keys.
616
00:23:46,760 --> 00:23:49,840
Or they never review the report only would have lines.
617
00:23:49,840 --> 00:23:52,440
So there are shadow policies drift from reality.
618
00:23:52,440 --> 00:23:54,320
We want to avoid learned helplessness.
619
00:23:54,320 --> 00:23:56,680
If the system cries wolf people stop listening.
620
00:23:56,680 --> 00:23:58,800
Keep alert scarce, specific and owned.
621
00:23:58,800 --> 00:24:01,160
Let's anchor with the KPI board you'll actually use.
622
00:24:01,160 --> 00:24:05,080
Top row, coverage percentage, strength percentage and exclusions count trend.
623
00:24:05,080 --> 00:24:06,720
Info flatlines at healthy levels.
624
00:24:06,720 --> 00:24:13,240
Second row, top bypassing apps, top bypassing locations and changes in CA policy scopes over the last seven days.
625
00:24:13,240 --> 00:24:18,760
Third row, high risk sign-ins without CA decision and admin sign-ins that lack strong auth.
626
00:24:18,760 --> 00:24:19,920
Review weekly.
627
00:24:19,920 --> 00:24:22,120
Investigate deviations within 24 hours.
628
00:24:22,120 --> 00:24:23,960
Not with blame with curiosity.
629
00:24:23,960 --> 00:24:26,360
Why did coverage dip yesterday at noon?
630
00:24:26,360 --> 00:24:27,560
Maybe a new app launched.
631
00:24:27,560 --> 00:24:28,080
Great.
632
00:24:28,080 --> 00:24:31,120
Tag it, bring it under all cloud apps, confirm the right context.
633
00:24:31,120 --> 00:24:32,760
Close the loop with change management.
634
00:24:32,760 --> 00:24:38,280
Every policy edit requires an owner, a reason and an expiry when it's a temporary exception.
635
00:24:38,280 --> 00:24:41,040
Your exclusion growth alert isn't just a notification.
636
00:24:41,040 --> 00:24:43,840
It's a prompt to add that expiry and book a review.
637
00:24:43,840 --> 00:24:45,800
Your coverage drop alert isn't a failure.
638
00:24:45,800 --> 00:24:47,960
It's the system asking for alignment.
639
00:24:47,960 --> 00:24:51,360
This is how you keep conditional access in therapy, not triage.
640
00:24:51,360 --> 00:24:53,560
It gets to be transparent, consistent and hurt.
641
00:24:53,560 --> 00:24:54,720
And boundaries are a gift.
642
00:24:54,720 --> 00:24:57,000
With gentle monitoring, you're not micromanaging.
643
00:24:57,000 --> 00:25:00,720
You're holding a steady container so CA can keep doing the quiet work protecting everyone
644
00:25:00,720 --> 00:25:02,800
all day without drama.
645
00:25:02,800 --> 00:25:04,120
Here's the takeaway.
646
00:25:04,120 --> 00:25:06,040
Your conditional access wasn't broken.
647
00:25:06,040 --> 00:25:08,360
It was trusting without boundaries.
648
00:25:08,360 --> 00:25:12,560
Inclusive scopes, time-bound contexts and steady monitoring restore its balance.
649
00:25:12,560 --> 00:25:17,160
If this helped, try the baseline template, shadow it in report only for seven days and
650
00:25:17,160 --> 00:25:20,120
wire the three alerts so changes never go silent.
651
00:25:20,120 --> 00:25:24,560
Subscribe and watch the next episode on authentication context patterns and token binding hardening.