agentleFS
kaandgnshkaandgnsh/Claude-Blue/skills/azure-security/conditional-access-review/SKILL.md

conditional-access-review

Skill0 starsChanged 12 days agoMITView on GitHub

Review Microsoft Entra Conditional Access for gaps — MFA coverage for all users and apps, phishing-resistant MFA for admins, legacy authentication blocking, device compliance, token protection, risk-based policies, exclusions and report-only policies — using policy exports and sign-in log evidence. Use when assessing Entra ID security, troubleshooting why a sign-in wasn't challenged, or after an account takeover.

The file

Files
SKILL.md

Conditional Access Review

Export policies

Connect-MgGraph -Scopes "Policy.Read.All"
Get-MgIdentityConditionalAccessPolicy -All | ConvertTo-Json -Depth 10 > ca-policies.json

Tools: Microsoft's CA templates / "What If", Maester (Pester-based Entra tests: Invoke-Maester), CISA ScubaGear for M365 baselines (Invoke-SCuBA).

Baseline policy set (Microsoft guidance)

  1. Require MFA for all users, all resources (exclude only break-glass accounts).
  2. Require phishing-resistant MFA (FIDO2, Windows Hello for Business, certificate-based) for privileged roles (authentication strength).
  3. Block legacy authentication (client apps: Exchange ActiveSync, other clients).
  4. Require MFA for Azure management (Windows Azure Service Management API / Microsoft Admin Portals).
  5. Require compliant or hybrid-joined device for sensitive apps or for admins.
  6. Sign-in risk / user risk policies (Entra ID P2): require MFA / password change.
  7. Block or restrict device code flow and authentication transfer where not needed.
  8. Token protection (session binding) for supported apps where licensed.

Gap analysis with sign-in evidence

SigninLogs
| where TimeGenerated > ago(30d) and ResultType == "0"
| where AuthenticationRequirement == "singleFactorAuthentication"
| summarize count(), apps=make_set(AppDisplayName, 20) by UserPrincipalName, ClientAppUsed
| order by count_ desc

Shows real single-factor successes — each is a gap or an intended exclusion. Also check ConditionalAccessStatus == "notApplied".

Common weaknesses

  • Exclusions for groups that grow (e.g., "MFA exclusions" with dozens of users), service accounts used interactively, trusted named locations covering whole ISP ranges, policies left in report-only, guest users excluded, "All cloud apps" missing for some policies, device platform conditions bypassable with unknown platforms.
  • Break-glass accounts without alerting on use.

Output

Policy | State | Users/apps scope | Exclusions (count, justification) | Gap | Evidence (sign-ins) | Recommendation

Related skills

entra-signin-investigation, authentication-policy-review, azure-rbac-review, token-theft-investigation

References

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.