๐ก๏ธ Recipe ยท Security & Compliance
Investigate M365 Security Posture: Secure Score, Risky Users, and Admin MFA
Audit your Microsoft 365 tenant's security posture by reviewing Secure Score, privileged role assignments, admin MFA coverage, and high-privilege app registrations โ then prioritize remediation.
Complexity
Intermediate
Impact
security-posture + privileged-access + mfa-coverage + app-governance + compliance-audit
Context
Why This Matters
Microsoft 365 tenants drift toward insecurity over time: new admin accounts get added, apps accumulate privileged Graph permissions, Secure Score controls fall behind defaults, and MFA coverage gaps appear on the highest-value accounts. A quarterly (or incident-driven) posture review lets you catch these issues before an attacker does.
This recipe walks through the four highest-leverage checks for a standard M365 / Entra ID tenant:
- Secure Score โ Microsoft's aggregate rating of your identity, app, device, and data controls, compared against tenants of similar size.
- Privileged role membership โ who currently holds Global Administrator and other Tier-0 directory roles.
- Admin MFA registration โ confirmation that every privileged account has a phishing-resistant authentication method registered (Microsoft Authenticator, FIDO2, or Windows Hello) rather than just SMS or password.
- App registration permissions โ third-party and internal applications that hold sensitive Microsoft Graph application roles, which represent a major supply-chain and lateral-movement risk.
Run it when onboarding a new tenant, after a suspected incident, on a recurring schedule (monthly/quarterly), or any time leadership asks for a security readout.
Expected Outcomes
What you will have after completing this recipe
- A captured current Secure Score value, max score, and comparative benchmark against similar tenants.
- A list of the lowest-scoring Secure Score controls ranked by remediation impact.
- A complete roster of Global Administrators (and optionally all directory role holders) with account-enabled status.
- A per-admin MFA method inventory identifying any privileged account relying only on password or SMS.
- An app registration report flagging applications with excessive Microsoft Graph application permissions.
- A prioritized remediation list (Critical / High / Medium) you can hand to leadership or execute directly.
Risks & Considerations
Warnings and gotchas
- Premium license dependency. Risky user, risky sign-in, and some authentication-methods-report endpoints require Entra ID P1 or P2. On Entra ID Free tenants these calls return
403 Permission deniedwith a message about premium licensing โ fall back to Secure Score, directory role enumeration, and per-user authentication methods. - Read-only investigation. This recipe only reads data. Do not remediate findings (disable accounts, remove role holders, revoke app consents) without a change ticket and stakeholder sign-off โ removing a legitimate service account can cause outages.
- App registration permissions are the #1 sleeper risk. An app with
RoleManagement.ReadWrite.Directoryor broadDirectory.ReadWrite.Allroles is effectively Global Admin. Treat every high-privilege app as a privileged identity. - Don't leak user data in reports. The outputs contain UPNs, phone numbers, and device identifiers. Store them only in approved secure locations (e.g., encrypted SharePoint site with restricted access).
- Secure Score lag. Control implementation status can take up to 48 hours to reflect recent changes; re-check the next day after remediations.
Required Permissions
| Permission | Why It's Needed |
|---|---|
| SecurityEvents.Read.All | Read Microsoft Secure Score and control recommendations. |
| Directory.Read.All | Enumerate directory roles, role members, and user details. |
| RoleManagement.Read.Directory | Resolve role definitions and assignments for privileged roles. |
| UserAuthenticationMethod.Read.All | Inspect which MFA methods are registered on each administrator account. |
| Application.Read.All | Inventory app registrations and their requested Graph permissions. |
| AuditLog.Read.All | Query sign-in logs and directory audit events (requires Entra ID P1 for full data). |
| IdentityRiskyUser.Read.All | List users flagged as risky by Entra ID Protection (requires Entra ID P2). |
The fastest way to get this done โ just ask Dex. Copy the prompt below and paste it into your Dex conversation.
For IT Admins
Paste into Dex CoAdmin