This site is called Conditional Access, and yet surprisingly, it has very little advice on what you should do for CA policies. I’ve stayed away from this subject on purpose; it’s very hard to “baseline” CA policies as they are very bespoke to the individual needs of a business, and nobody can ever agree on what’s best.

The word “baseline” holds a lot of weight too. Many frameworks or baselines have become inarguable rulesets for administrators everywhere, even though few of them ever set out to be used in that way.

So, this isn’t a baseline, I’m not even going to call it guidance. These are some policies I use, feel free to take some inspiration.

I’ve copied ideas I’ve seen from Jay Kerai, Ru Campbell and others.

General Approach

Apply broadly, exclude narrowly.

If you assign to static groups, you’ve made yourself a static problem. Even if it’s a dynamic group, there might be times where for whatever reason a user isn’t quite fitting the rule, and it may as well have been an “all users” assignment from the start anyway.

Note: Where specific property types aren't configured, that means it will apply to everything.

In "MFA all users all resources", I'm not configuring any network or conditions. It simply means it applies to all users regardless of other possible login routes.

Policy list

NameCA01: MFA all users all resources
UsersAll users
Target ResourcesAll resources
GrantRequire multifactor authentication

A lot of guides will tell you to do a separate one for admins, which might assist with the gradual rollout of policies like this, but the end goal is everyone gets MFA.


NameCA02: Block Legacy Auth
UsersAll users
Target ResourcesAll resources
ConditionsClient Apps –> Configure = YES
☑️Exchange ActiveSync
☑️Other Clients
GrantBlock access

Time to get rid of those old printers…. and don’t exclude your break glass from this one. In case of emergency, an SMTP email account is not what your Global Admin account is logging into 🙂


NameCA03: Block Unsupported OS Types
UsersAll users
Target ResourcesAll resources
ConditionsDevice Platforms –> Configure = YES
Include = Any Device
Exclude
☑️Android
☑️iOS
☑️Windows
☑️macOS
GrantBlock access

This one is very powerful. Entra doesn’t have listed options for every single user agent. By blocking all, but explicitly allowing the ones we want, we’re greatly reducing attack surface.

If your business doesn’t use macOS, don’t exclude it from the list.


NameCA04: Require App Protection (mobile)
UsersAll users
Target ResourcesAll resources
ConditionsDevice Platforms –> Configure = YES
Include
☑️Android
☑️iOS
GrantRequire app protection policy

This firstly requires an Intune MAM policy. My preferred route is MAM-WE, that’s Mobile Application Management-Without Enrolment. I don’t want people enrolling any personal devices in my tenant.


NameCA05: Require Compliant Desktop
UsersAll users
Target ResourcesAll resources
ConditionsDevice Platforms –> Configure = YES
Include
☑️Windows
☑️macOS
GrantRequire device to be marked as compliant

Probably the most effective way of preventing AiTM breaches, fairly hard to get businesses to understand that business data should only be accessed on business devices. Congrats if you’ve done this!


NameCA06: Block Code Flow
UsersAll users
Target ResourcesAll resources
ConditionsAuthentication flows –> Configure = YES
☑️Device code flow
GrantBlock access

We’re blocking the “netflix” style logins for everyone. Normal end-users typically don’t need to use this, some admin functions require it for certain PowerShell modules etc.


NameCA07: Sign In Risk – Medium/High – MFA
UsersAll users
Target ResourcesAll resources
ConditionsSign-in risk –> Configure = YES
☑️High
☑️Medium
GrantRequire multifactor authentication
SessionSign-in frequency
☑️Every time
^Requires Entra ID P2^

This, in conjunction with the “require compliant device” is why I don’t do location blocking. It might make sense for you to do location blocking to make your logging quieter.


NameCA08: User Risk – High – Reset PW
UsersAll users
Target ResourcesAll resources
ConditionsUser risk –> Configure = YES
☑️High
GrantRequire password change
SessionSign-in frequency
☑️Every time
^Requires Entra ID P2^

NameCA09: Windows Token Protection
UsersAll users
Target ResourcesSelect Resources
Microsoft Teams Services
cc15fd57-2c6c-4117-a88c-83b1d56b4bbe
Office 365 Exchange Online
00000002-0000-0ff1-ce00-000000000000
Office 365 SharePoint Online
00000003-0000-0ff1-ce00-000000000000
ConditionsDevice Platforms –> Configure = YES
☑️Windows
Client apps
☑️Mobile apps and desktop clients
Session
☑️Require token protection for sign-in sessions (Generally available for Windows. Preview for MacOS, iOS)

A slightly less impacting version of “Require Compliant Device” in a way. Most attackers will try and access one of the listed resources as their entry point. Combine them both because why not?


NameCA10: Breakglass Require FIDO2
UsersSpecific users included (BG account only)
Target ResourcesAll resources
GrantRequire Authentication Strength
🔽Phishing-Resistant MFA

A long password in a safe for the Global Admin is not good enough. Use FIDO2 on that account.


NameCA11: Register Security info only in operating countries
UsersAll users
Target Resources🔽User Actions
☑️Register security information
NetworkConfigure –> YES
Include☑️Any network or location
Exclude☑️Selected networks and locations
(need to configure this in “named locations”) Select –> Your list of operating countries
GrantBlock Access

A created account without MFA registration is quite risky. Lower the risk with this restricting policy. If your new starters always start in the office, make that the only location where they can register.


NameCA12: Block Authentication Transfer Flows
UsersAll users
Target ResourcesAll Resources
ConditionsAuthentication Transfer –> Configure = YES
☑️Authentication transfer
GrantBlock Access

This prevents user authentication jumping to devices you might not want them to.


Use the impact analysis

Do not yeet any of these out into customer environments before fully understanding the impact.