oeltayeb.com · Microsoft 365 Admin Toolkit

Checklist

Tenant hardening checklist

Based on the article: A Microsoft 365 tenant hardening checklist: Secure Score, admin roles and risky defaults · 5 min read

A Microsoft 365 tenant works on day one, but several defaults and early decisions deserve a second look: who holds admin roles, which apps users can consent to, which legacy protocols still answer and what gets audited. In this checklist I'll use Microsoft Secure Score as the scoreboard, then work through the changes that matter most, each with a way to check it and what good looks like.

Before you start

  • Global Reader for the review, and the specific admin roles, activated just in time, for the changes.
  • The Microsoft Graph PowerShell SDK and Exchange Online PowerShell V3 (see connecting with Exchange Online PowerShell V3).
  • A pilot group and a short change notice for anything users will notice.

Checklist

  1. 1

    Take a Secure Score baseline

    In the Microsoft Defender portal, open Exposure management › Secure score (or go to https://security.microsoft.com/securescore). Recommended actions are grouped into Identity, Device, Apps and Data. Record the starting score so you can show the trend:

    powershell
    Connect-MgGraph -Scopes "SecurityEvents.Read.All"
    Get-MgSecuritySecureScore -Top 1 | Select-Object CreatedDateTime, CurrentScore, MaxScore
  2. 2

    Shrink and protect admin roles

    Keep Global Administrators to fewer than five, including two emergency access accounts. Give everyone else the narrowest role that does the job (Exchange, SharePoint, Teams, User or Helpdesk Administrator, Global Reader for auditors), use separate cloud-only admin accounts without mailboxes, and require phishing-resistant MFA for them. List who holds Global Administrator today:

    See the full script in the source article.

  3. 3

    Lock down app consent

    In the Microsoft Entra admin center, go to Entra ID › Enterprise apps › Consent and permissions › User consent settings. Choose Do not allow user consent, or allow consent only for apps from verified publishers and for low-risk permissions you select. Review what's already granted:

    powershell
    Connect-MgGraph -Scopes "Policy.Read.All","Directory.Read.All"
    $authz = Get-MgPolicyAuthorizationPolicy
    $authz.DefaultUserRolePermissions |
        Format-List PermissionGrantPoliciesAssigned, AllowedToCreateApps, AllowedToCreateTenants
    $authz | Format-List AllowedToSignUpEmailBasedSubscriptions
    
    # Apps with the most user-granted (not admin-granted) delegated permissions
    Get-MgOauth2PermissionGrant -All | Where-Object ConsentType -eq "Principal" |
        Group-Object ClientId | Sort-Object Count -Descending | Select-Object -First 20 |
        ForEach-Object { [pscustomobject]@{
            App    = (Get-MgServicePrincipal -ServicePrincipalId $_.Name).DisplayName
            Grants = $_.Count } }
  4. 4

    Block legacy authentication and SMTP AUTH

    Block legacy authentication with Conditional Access, as in a Conditional Access baseline, or with security defaults if you don't have Microsoft Entra ID P1. Exchange Online has already turned off Basic authentication for most protocols. Find out which devices and apps still use SMTP AUTH, then turn it off for the organization and allow it only on the mailboxes that need it:

    powershell
    Connect-ExchangeOnline
    Set-TransportConfig -SmtpClientAuthenticationDisabled $true
    
    # Mailboxes that override the organization setting and still allow SMTP AUTH
    Get-CASMailbox -ResultSize Unlimited | Where-Object SmtpClientAuthenticationDisabled -eq $false |
        Select-Object PrimarySmtpAddress
  5. 5

    Close risky defaults

    SettingWhereGood looks like
    Non-admins creating tenantsEntra ID › Users › User settingsRestrict non-admin users from creating tenants: Yes
    Users registering appsEntra ID › Users › User settingsUsers can register applications: No; give developers the Application Developer role
    Email-verified self-service sign-upAllowedToSignUpEmailBasedSubscriptionsFalse
    Self-service trials and purchasesMicrosoft 365 admin center › Settings › Org settingsOff, or limited to approved products
    Automatic external forwardingOutbound anti-spam policy in the Defender portalOff; see NDR 550 5.7.520
    External sharingSharePoint, OneDrive and TeamsSpecific people as the default link, reviewed guests; see SharePoint sharing and Teams external access
  6. 6

    Check auditing

    Run these in Exchange Online PowerShell; the expected values are in the comments:

    powershell
    Get-AdminAuditLogConfig | Format-List UnifiedAuditLogIngestionEnabled   # True
    Get-OrganizationConfig | Format-List AuditDisabled                     # False (mailbox auditing on)

Verify

  • A day after each change, the matching recommended actions in Secure Score show as completed and the history chart moves.
  • A standard user who tries to add an unfamiliar app sees a request-approval prompt, and the request reaches your reviewers.
  • In the Entra sign-in logs, legacy client apps such as IMAP4 or Authenticated SMTP appear as failures blocked by Conditional Access.
  • Rerun the scripts above and file the output with the date; it becomes your evidence for the next review.

Tips & gotchas

  • Don't chase points. Use Risk accepted with a written reason when an action doesn't fit, so the decision is visible.
  • Some actions need licences you may not have, such as Entra ID P2 or Defender plans. Plan them rather than ignore them.
  • Exclude emergency access accounts from policies that could lock you out, and alert on every sign-in they make.
  • Give users a path before closing a door. The admin consent workflow and documented SMTP AUTH exceptions stop people finding riskier workarounds.
  • Repeat quarterly. Microsoft adds recommended actions, and settings drift as admins come and go.

Microsoft Learn references