A naming convention for policies
On this page
Policy naming convention
benchmark guidance does not prescribe one. Microsoft does specify what a name must convey, and the
scheme below implements it. The agent's "inconsistent naming" finding (Low severity) needs
something concrete to recommend instead of a complaint.
Microsoft's requirement
A policy name should let you understand it without opening it, showing:
- A sequence number — so admins can say "open CA01" on a phone call
- The cloud apps it applies to
- The response (the control)
- Who it applies to
- When it applies (the conditions)
Microsoft also notes that Conditional Access policies have no built-in owner attribute.
Ownership must be encoded in the name (e.g. a team prefix) and tracked in an out-of-band
registry mapping each policy to a responsible admin or team. The registry is not optional —
it is the only place ownership can actually live.
Pattern
CA<nnn>-<Persona>-<Resource>-<Control>[-<Condition>][-Report]
| Segment | Purpose | Examples |
|---|---|---|
CA<nnn> | Stable sort and unambiguous reference in tickets and change records | CA001, CA110 |
Persona | Who it applies to | AllUsers, Admins, Guests, Workloads, Pilot |
Resource | What is protected | AllResources, Exchange, IntuneEnroll, SecurityInfoReg |
Control | The security outcome | RequireMFA, Block, RequireCompliant, PhishResistant, SessionLimit |
Condition | Only when it disambiguates | LegacyAuth, DeviceCode, HighRisk, Untrusted |
Report | Suffix while in report-only | -Report |
Number blocks
Grouping by number band makes the estate readable at a glance and leaves room to grow:
| Band | Purpose |
|---|---|
CA0xx | Baseline blocks — legacy auth, device code, authentication transfer |
CA1xx | Identity — MFA and authentication strength |
CA2xx | Device — compliance, hybrid join, registration |
CA3xx | Session — sign-in frequency, persistent browser, token protection |
CA4xx | Risk-based (P2) |
CA5xx | Location and network |
CA6xx | Guest and external identities |
CA7xx | Workload identities |
CA9xx | Temporary, pilot and exception policies — must carry a review date |
EMnnn | Contingency policies, held in report-only for outage scenarios — see below |
Contingency policy naming — Microsoft's scheme
For the disabled/report-only policies held in reserve for an outage:
EMnnn - ENABLE IN EMERGENCY: [Disruption][i/n] - [Apps] - [Controls] [Conditions]
ENABLE IN EMERGENCY goes at the start so the policy stands out in a list of 200. The
[i/n] sequence tells an administrator, mid-incident, what order to enable them in.
Microsoft's own example:
EM001 - ENABLE IN EMERGENCY: MFA Disruption[1/4] - Exchange SharePoint - Require Microsoft Entra hybrid join
EM002 - ENABLE IN EMERGENCY: MFA Disruption[2/4] - Exchange SharePoint - Block access except Windows
EM003 - ENABLE IN EMERGENCY: MFA Disruption[3/4] - Exchange SharePoint - Block access except Corporate Network
EM004 - ENABLE IN EMERGENCY: MFA Disruption[4/4] - Exchange - Block EAS for all users
Microsoft-managed policies
These are named Microsoft-managed: <name> and cannot be renamed or deleted. Do not
attempt to bring them into a house naming standard — the prefix is useful anyway, because it
filters cleanly in the audit log. Note them in the policy registry as Microsoft-owned.
Worked examples against the baseline
| # | Policy name |
|---|---|
| 1 | CA001-AllUsers-AllResources-Block-LegacyAuth |
| 2 | CA101-Admins-AllResources-RequireMFA |
| 3 | CA102-AllUsers-AllResources-RequireMFA |
| 4 | CA301-Admins-AllResources-SessionLimit-4h |
| 5 | CA002-AllUsers-AllResources-Block-DeviceCode |
| 6 | CA003-AllUsers-AllResources-Block-AuthTransfer |
| 7 | CA201-AllUsers-AllResources-RequireCompliant |
| 8 | CA202-AllUsers-SecurityInfoReg-RequireCompliant |
| 9 | CA203-AllUsers-IntuneEnroll-RequireMFA-EveryTime |
| 10 | CA302-AllUsers-AllResources-SessionLimit-7d |
| 11 | CA401-AllUsers-AllResources-RequireMFA-SignInRisk |
| 12 | CA402-AllUsers-AllResources-RequireMFA-UserRisk |
Level 2 additions: CA103-Admins-AllResources-PhishResistant,
CA403-AllUsers-AllResources-Block-HighRisk,
CA501-AllUsers-AllResources-Block-Untrusted,
CA303-AllUsers-M365Core-TokenProtection.
Description field
The name says what. The description must say why, and carry the accountability that
makes exclusion review possible. Required content:
Purpose: <the security outcome, one line>
benchmark guidance: <section number, or "beyond benchmark guidance">
Owner: <team or role, not a person's name>
Created: <YYYY-MM-DD>
Report-only: <start> to <end>
Enforced: <YYYY-MM-DD>
Exclusions: <who, why, review date>
Change ref: <ticket>
The Exclusions line is the one that matters. Every finding of "temporary exclusions that
became permanent" traces back to an exclusion with no recorded reason and no review date.
Migration advice
Renaming a policy does not change its behaviour or its GUID, so renaming is safe. But:
- Existing runbooks, alert rules and documentation reference the old names — update them
in the same change.
- Rename in one batch, not gradually. A half-renamed estate is harder to read than a
consistently badly-named one.
- Record the old-to-new mapping for anyone reading historical sign-in logs, which retain
the name as it was at the time of the sign-in.