Microsoft Entra ID Administration: Complete Practical Course — Matching the Entra Admin Center & SC-300 Certification
The guide covers the full Entra Admin Center — Users, Groups, External Identities, Devices, Roles & Admins, Conditional Access, Authentication Methods & MFA, Identity Protection, Privileged Identity Management (PIM), Access Reviews, Entitlement Management, Lifecycle Workflows, and Monitoring — including the latest 2025–2026 updates: Entra ID Governance SKU, Passkey (FIDO2) enhancements, Global Secure Access (SSE), and Entra Verified ID integration.
🗺️ Course Module Map
Entra Admin Center Overview
Dashboard, navigation structure, tenant settings, licensing tiers (Free/P1/P2/Governance), Identity Secure Score
Users — All Users & Bulk Management
User properties, create/delete/restore, bulk operations, password reset, user settings, stale account detection
Groups — Security & M365 Groups
Group types, static vs dynamic membership, naming policy, expiration, group settings
External Identities & B2B
Cross-tenant access settings, guest invite settings, identity providers, OTP, B2B Direct Connect
Devices — Registration & Settings
Entra Registered vs Entra Joined vs Hybrid Joined, device settings, stale device cleanup
Roles & Admins (RBAC)
Built-in roles, custom roles (P1), administrative units, scope-limited administration
Conditional Access
CA policy anatomy, named locations, authentication strengths, What If tool, common policy templates
Authentication Methods & MFA
FIDO2 passkeys, Microsoft Authenticator, TOTP, TAP, SSPR, password protection, passwordless
Identity Protection
Sign-in risk, user risk, risk levels, risk detections, risk-based CA policies, risky user remediation
Identity Governance — PIM & Access Reviews
PIM eligible vs active, activation workflow, access reviews, entitlement management, lifecycle workflows
Monitoring — Logs & Health
Sign-in logs, audit logs, provisioning logs, Identity Secure Score, Entra Health, workbooks
SC-300 Certification Alignment
Exam domains, skill weightings, scenario tips, licensing prerequisites, and study resources
🏠 Module 1: Entra Admin Center Overview
The Microsoft Entra Admin Center at entra.microsoft.com is the unified management portal for all identity and access workloads across Microsoft Entra — including Entra ID (formerly Azure Active Directory), Permissions Management, Verified ID, and Global Secure Access. It replaced the older Azure AD blade in the Azure portal as the primary identity management interface.
Entra ID Licensing Tiers
| Tier | Included In | Key Features |
|---|---|---|
| Entra ID Free | All Microsoft 365 plans | User & group management, basic SSO, per-user MFA (legacy), basic self-service password change for cloud users |
| Entra ID P1 | M365 E3, EMS E3, standalone | Conditional Access, dynamic groups, SSPR with on-prem writeback, Administrative units, custom roles, Hybrid Entra Join, Application Proxy, Group-based licensing |
| Entra ID P2 | M365 E5, EMS E5, standalone | Everything in P1 + Identity Protection (risk policies, risky user/sign-in), Privileged Identity Management (PIM), Access Reviews |
| Entra ID Governance | Add-on to M365 E3/E5 or Entra P1/P2 | Entitlement Management (access packages), enhanced Access Reviews, Lifecycle Workflows (Joiner/Mover/Leaver automation), PIM for Groups |
🛡️ Protection
⚖️ Governance
📊 Monitoring & health
🌐 Global Secure Access
🔒 Permissions management
✅ Verified ID
🛠️ Workload identities
💡 Identity Secure Score — Your Governance Health Indicator
The Identity Secure Score (found under Protection → Identity Secure Score) gives your tenant a percentage score based on how many Microsoft-recommended security controls are implemented. It directly maps to SC-300 best practices — enabling MFA, blocking legacy auth, enabling Identity Protection risk policies, and configuring PIM are the highest-impact score improvements. Use it as your implementation checklist.
👤 Module 2: Users — All Users & Bulk Management
The Users blade is the primary identity management interface in Entra ID. Every licensed user, guest account, and service account appears here with full property access, bulk operation support, and password management capabilities.
Key User Properties
| Property | Description | Key Values |
|---|---|---|
| User type | Distinguishes internal org members from external guests | Member (internal), Guest (B2B external), Service principal |
| Account enabled | Whether the user can sign in | True / False — disabling blocks all access immediately without deleting the account |
| Directory synced | Whether the account is synchronised from on-premises AD via Entra Connect or Cloud Sync | Yes (synced — source of authority is on-prem) / No (cloud-only) |
| Assigned licences | Microsoft 365 and Entra licences assigned to the user | Direct assignment or group-based licensing (preferred for scale) |
| Authentication methods | MFA methods registered by the user (Authenticator app, FIDO2, phone, etc.) | Visible per-user under Authentication methods tab — critical for MFA support |
| Sign-in activity | Last interactive and non-interactive sign-in date/time — used to detect stale accounts | Requires Entra ID P1 to view in admin center; available in Graph for all tenants |
Manage Users — Inventory, Create, Disable & Detect Stale Accounts
Export all users, create new cloud-only users, disable inactive accounts, and identify accounts that have not signed in for 90 days using Microsoft Graph PowerShell.
Connect-MgGraph -Scopes "User.ReadWrite.All","AuditLog.Read.All" # Export all users with key properties Get-MgUser -All -Property DisplayName,UserPrincipalName,AccountEnabled,UserType,CreatedDateTime,AssignedLicenses,Department,JobTitle | Select-Object DisplayName,UserPrincipalName,AccountEnabled,UserType,Department,JobTitle | Export-Csv -Path "AllUsers.csv" -NoTypeInformation # Create a new cloud-only user $PasswordProfile = @{ Password = "TempP@ss2026!" ForceChangePasswordNextSignIn = $true } New-MgUser ` -DisplayName "Jane Smith" ` -UserPrincipalName "jane.smith@contoso.com" ` -PasswordProfile $PasswordProfile ` -AccountEnabled $true ` -MailNickname "jane.smith" ` -Department "Finance" ` -JobTitle "Financial Analyst" # Disable a user (blocks sign-in, preserves account and data) Update-MgUser -UserId "jane.smith@contoso.com" -AccountEnabled $false # Detect stale accounts (no sign-in for 90+ days, still enabled) $Cutoff = (Get-Date).AddDays(-90).ToString("yyyy-MM-ddTHH:mm:ssZ") Get-MgUser -All ` -Filter "signInActivity/lastSignInDateTime le $Cutoff and accountEnabled eq true" ` -Property DisplayName,UserPrincipalName,SignInActivity,AccountEnabled | Select-Object DisplayName,UserPrincipalName,@{N="LastSignIn";E={$_.SignInActivity.LastSignInDateTime}} | Export-Csv -Path "StaleUsers.csv" -NoTypeInformation # Export all guest users for access review Get-MgUser -All -Filter "userType eq 'Guest'" -Property DisplayName,UserPrincipalName,ExternalUserState,CreatedDateTime | Export-Csv -Path "GuestUsers.csv" -NoTypeInformation
👥 Module 3: Groups — Security & Microsoft 365 Groups
Groups in Entra ID control access assignment, licence management, policy targeting, and collaboration scope. Understanding the four group types and the difference between static and dynamic membership is foundational for both daily operations and the SC-300 exam.
Group Types in Entra ID
| Group Type | Security Enabled | Mail Enabled | Use Case |
|---|---|---|---|
| Security group | Yes | No | Assign access to apps, resources, SharePoint sites, Intune policies, CA policies, and licences |
| Microsoft 365 Group | Yes (optional) | Yes | Collaboration workspaces — teams, shared mailbox, SharePoint site, Planner board, OneNote |
| Mail-enabled security group | Yes | Yes | Assign resource access AND send email to the group; hybrid/on-prem origin only — cannot be created in Entra ID directly |
| Distribution group | No | Yes | Email distribution only — no security function; managed in Exchange Online |
Static vs Dynamic Membership
| Feature | Static (Assigned) | Dynamic (Rule-based) |
|---|---|---|
| Member management | Admins or owners add/remove members manually | Entra ID evaluates membership rule automatically (up to 24hr delay) |
| Rule example | N/A — manual management | (user.department -eq "Sales") and (user.accountEnabled -eq true) |
| Licence requirement | Free | Entra ID P1 — required for dynamic groups |
| Best for | Small, well-defined groups that change infrequently | Attribute-driven groups (all users in a dept, all users with a specific licence) |
| Limitation | Manual process — access may lag user changes | Up to 24-hour processing delay after attribute changes; complex rules can be slow |
Manage Groups — Create Security Groups, M365 Groups & Dynamic Groups
Create security and M365 groups, configure dynamic membership rules based on user attributes, and audit group membership for governance reviews.
Connect-MgGraph -Scopes "Group.ReadWrite.All","Directory.ReadWrite.All" # Export all groups with type and membership info Get-MgGroup -All -Property DisplayName,GroupTypes,SecurityEnabled,MailEnabled,MembershipRule,MembershipRuleProcessingState | Select-Object DisplayName,GroupTypes,SecurityEnabled,MailEnabled,MembershipRule | Export-Csv -Path "AllGroups.csv" -NoTypeInformation # Create a static security group New-MgGroup ` -DisplayName "Finance Team" ` -SecurityEnabled $true ` -MailEnabled $false ` -MailNickname "FinanceTeam" # Create a Microsoft 365 Group (collaboration workspace) New-MgGroup ` -DisplayName "Project Phoenix" ` -GroupTypes @("Unified") ` -SecurityEnabled $false ` -MailEnabled $true ` -MailNickname "ProjectPhoenix" # Create a dynamic security group (requires Entra ID P1) New-MgGroup ` -DisplayName "All Sales Users" ` -SecurityEnabled $true ` -MailEnabled $false ` -MailNickname "AllSalesUsers" ` -MembershipRule "(user.department -eq 'Sales') and (user.accountEnabled -eq true)" ` -MembershipRuleProcessingState "On" # Add a member to a static group $Group = Get-MgGroup -Filter "DisplayName eq 'Finance Team'" $User = Get-MgUser -Filter "UserPrincipalName eq 'user@contoso.com'" New-MgGroupMember -GroupId $Group.Id -DirectoryObjectId $User.Id # Find empty (orphan) groups Get-MgGroup -All | ForEach-Object { $Count = (Get-MgGroupMember -GroupId $_.Id -All).Count if ($Count -eq 0) { Write-Host "EMPTY GROUP: $($_.DisplayName)" } }
🌐 Module 4: External Identities & B2B Collaboration
External Identities in Entra ID governs how your organisation collaborates with users from outside your tenant. The Cross-tenant access settings blade (introduced as part of Entra External ID) provides granular control over inbound and outbound B2B collaboration, replacing the older blanket Allow/Block domain list approach.
Cross-Tenant Access Settings — Inbound vs Outbound
| Direction | What It Controls | Key Settings |
|---|---|---|
| Inbound B2B Collaboration | Whether external users from other Entra tenants can be invited as guests into your tenant | Allow/Block per-tenant or globally; MFA trust (trust MFA from home tenant); device compliance trust |
| Outbound B2B Collaboration | Whether your users can accept invitations and collaborate in external Entra tenants | Allow/Block per-tenant or globally; controls which external orgs your users can join as guests |
| Inbound B2B Direct Connect | Whether external users can join your Teams Shared channels without a guest account (Azure B2B Direct Connect) | Required for Teams Shared channels with external participants; separate from B2B Collaboration |
| Outbound B2B Direct Connect | Whether your users can participate in external Teams Shared channels via B2B Direct Connect | Allow per-tenant for specific partner organisations |
Manage External Identities — Cross-Tenant Access & Guest User Audit
Review cross-tenant access settings, configure MFA trust for specific partner tenants, and audit all guest users including their last sign-in and external user state.
Connect-MgGraph -Scopes "Policy.ReadWrite.CrossTenantAccess","User.Read.All" # Get default cross-tenant access policy $Default = Get-MgPolicyCrossTenantAccessPolicyDefault Write-Host "B2B Collaboration Inbound: $($Default.B2BCollaborationInbound.UsersAndGroups.AccessType)" Write-Host "B2B Collaboration Outbound: $($Default.B2BCollaborationOutbound.UsersAndGroups.AccessType)" # Get all specific partner tenant configurations Get-MgPolicyCrossTenantAccessPolicyPartner | Select-Object TenantId,IsServiceProvider | Format-Table -AutoSize # Set guest invite restriction to admins + Guest Inviter role only # Options: none | adminsAndGuestInviters | adminsGuestInvitersAndAllMembers | everyone Update-MgPolicyAuthorizationPolicy -AllowInvitesFrom "adminsAndGuestInviters" # Audit all guest users with sign-in activity Get-MgUser -All -Filter "userType eq 'Guest'" ` -Property DisplayName,UserPrincipalName,ExternalUserState,CreatedDateTime,SignInActivity | Select-Object DisplayName,UserPrincipalName,ExternalUserState,CreatedDateTime, @{N="LastSignIn";E={$_.SignInActivity.LastSignInDateTime}} | Export-Csv -Path "GuestUserAudit.csv" -NoTypeInformation
💻 Module 5: Devices — Registration & Settings
Entra ID tracks every device that registers with or joins the tenant. Understanding device join types is critical — the join type determines what identity the device uses to authenticate to cloud resources and whether it can be targeted by device-based Conditional Access policies.
Device Join Types
| Join Type | OS Support | Device Identity | Sign-in Account | CA Device Filter |
|---|---|---|---|---|
| Entra Registered | Windows, macOS, iOS, Android | Device object in Entra ID; certificate-based device identity | Personal/work account — BYOD scenario | Yes — but limited trust level |
| Entra Joined | Windows 10/11 | Full Entra ID device identity; Primary Refresh Token (PRT) issued | Work/school (Entra) account — user signs in with cloud identity | Yes — strongest trust; required for compliantDevice filter |
| Hybrid Entra Joined | Windows 7/8/10/11, Server | Synced from on-prem AD via Entra Connect; both AD computer object and Entra device object | On-premises domain account + Entra ID SSO via PRT | Yes — requires Entra Connect sync and seamless SSO |
Manage Devices — Inventory, Stale Device Detection & Cleanup
Export all registered devices, identify stale devices that have not checked in for 90 days, and disable or delete them to maintain a clean device inventory.
Connect-MgGraph -Scopes "Device.ReadWrite.All" # Export all registered devices Get-MgDevice -All -Property DisplayName,DeviceId,OperatingSystem,OperatingSystemVersion,IsManaged,IsCompliant,TrustType,ApproximateLastSignInDateTime,AccountEnabled | Select-Object DisplayName,DeviceId,OperatingSystem,OperatingSystemVersion,IsManaged,IsCompliant,TrustType,ApproximateLastSignInDateTime | Export-Csv -Path "AllDevices.csv" -NoTypeInformation # Find stale devices (not signed in for 90+ days) $Cutoff = (Get-Date).AddDays(-90) Get-MgDevice -All -Property DisplayName,DeviceId,OperatingSystem,ApproximateLastSignInDateTime,AccountEnabled | Where-Object {$_.ApproximateLastSignInDateTime -lt $Cutoff -and $_.AccountEnabled -eq $true} | Export-Csv -Path "StaleDevices.csv" -NoTypeInformation # Count devices by join type (TrustType) # Workplace=Entra Registered, AzureAd=Entra Joined, ServerAd=Hybrid Joined Get-MgDevice -All -Property TrustType | Group-Object TrustType | Select-Object Name,Count | Format-Table -AutoSize # Disable then delete a stale device $Device = Get-MgDevice -Filter "DisplayName eq 'STALE-LAPTOP-01'" | Select-Object -First 1 Update-MgDevice -DeviceId $Device.Id -AccountEnabled $false Remove-MgDevice -DeviceId $Device.Id
🔐 Module 6: Roles & Admins (Entra RBAC)
Entra ID Role-Based Access Control provides over 100 built-in directory roles covering every administrative function. The principle of least privilege demands using the most targeted role available — never Global Administrator for routine tasks. Custom roles (Entra ID P1 required) allow organisations to create roles with precise permission sets.
Key Built-in Entra ID Roles
| Role | What It Can Do | Principle |
|---|---|---|
| Global Administrator | Full control of all Entra ID settings and all M365 services — the highest-privilege role | Maximum 5 permanent Global Admins; all others via PIM eligible only |
| User Administrator | Create, read, update, delete users and groups; reset non-admin passwords; manage licences | Day-to-day user lifecycle management — helpdesk Tier 2+ |
| Conditional Access Administrator | Full control of Conditional Access policies, named locations, and authentication strengths | Dedicated to CA policy management — keep separate from user management |
| Security Administrator | Manage Identity Protection, Conditional Access, MFA settings, security reports | Security operations team — broad read/write on security workloads |
| Security Reader | Read-only access to all security features — Identity Protection, CA policies, risk reports | SOC analysts, auditors — view without making changes |
| Authentication Administrator | Reset passwords and authentication methods for non-admin users; validate MFA registration | Helpdesk Tier 1 — limited scope, cannot modify admin accounts |
| Privileged Role Administrator | Manage role assignments, configure PIM settings, approve PIM activation requests | Highly sensitive — can escalate any user to any role; must be PIM-eligible only |
| Reports Reader | Read-only access to usage reports, sign-in logs, and audit logs | Management reporting, compliance auditing without admin access |
Audit All Admin Role Assignments & Detect Excessive Privilege
Report on every active directory role assignment, identify users assigned Global Administrator permanently (vs PIM eligible), and find admin accounts without MFA registered.
Connect-MgGraph -Scopes "RoleManagement.Read.Directory","User.Read.All","AuditLog.Read.All" # Audit all active directory role assignments $RoleReport = @() Get-MgDirectoryRole -All | ForEach-Object { $Role = $_ $Members = Get-MgDirectoryRoleMember -DirectoryRoleId $Role.Id -All foreach ($Member in $Members) { $User = Get-MgUser -UserId $Member.Id -ErrorAction SilentlyContinue $RoleReport += [PSCustomObject]@{ Role = $Role.DisplayName MemberName = $User.DisplayName MemberUPN = $User.UserPrincipalName } } } $RoleReport | Export-Csv -Path "AllRoleAssignments.csv" -NoTypeInformation # Count permanent Global Admins (flag if more than 5) $GARole = Get-MgDirectoryRole -Filter "DisplayName eq 'Global Administrator'" $GACount = (Get-MgDirectoryRoleMember -DirectoryRoleId $GARole.Id -All).Count Write-Host "Permanent Global Admins: $GACount (Recommended: 5 or fewer)" # Check MFA registration for all admins Get-MgReportAuthenticationMethodUserRegistrationDetail -All | Where-Object {$_.IsAdmin -eq $true} | Select-Object UserDisplayName,UserPrincipalName,IsMfaRegistered,IsPasswordlessCapable,MethodsRegistered | Format-Table -AutoSize
🔒 Module 7: Conditional Access
Conditional Access (CA) is the policy engine of Zero Trust — it evaluates every sign-in against a set of conditions (who, what app, what device, what location, what risk level) and decides whether to grant access, block access, or grant access with additional controls like MFA or compliant device. CA policies require Entra ID P1 at minimum.
Conditional Access Policy Anatomy
| Component | Options | Notes |
|---|---|---|
| Assignments — Users | All users, specific users/groups, directory roles; exclude specific users | Always exclude at least one break-glass account from all CA policies |
| Assignments — Target resources | All cloud apps, specific apps, User actions (register security info, register/join devices) | “All cloud apps” is the broadest and most secure choice for baseline policies |
| Assignments — Conditions | Sign-in risk (P2), User risk (P2), Device platforms, Locations, Client apps, Device filter | Conditions narrow when the policy applies — all conditions must be true (AND logic) |
| Grant controls | Block access; Grant: require MFA, compliant device, Hybrid Joined device, approved app, app protection policy, authentication strength | Grant controls can be combined with AND (all required) or OR (any one required) |
| Session controls | Sign-in frequency (force re-auth), persistent browser session, app enforced restrictions, MCAS conditional access app control, continuous access evaluation | Session controls apply after initial grant — do not replace grant controls |
| Policy state | On (enforced), Report-only (audit without enforcing), Off (disabled) | Always start new policies in Report-only mode and review logs before setting to On |
Audit All CA Policies & Identify Report-Only & Disabled Policies
List all Conditional Access policies with their state, export a full audit report, and use the What If tool equivalent in PowerShell to evaluate which policies would apply to a specific sign-in scenario.
Connect-MgGraph -Scopes "Policy.Read.ConditionalAccess","Policy.ReadWrite.ConditionalAccess" # Get all CA policies with state Get-MgIdentityConditionalAccessPolicy -All | Select-Object DisplayName,State,CreatedDateTime,ModifiedDateTime | Sort-Object State,DisplayName | Format-Table -AutoSize # Export CA policy audit report Get-MgIdentityConditionalAccessPolicy -All | Select-Object DisplayName,State,Id, @{N="IncludeUsers";E={$_.Conditions.Users.IncludeUsers}}, @{N="IncludeApps";E={$_.Conditions.Applications.IncludeApplications}} | Export-Csv -Path "CAPolicies.csv" -NoTypeInformation # Find policies still in Report-only (not yet enforced) Get-MgIdentityConditionalAccessPolicy -All | Where-Object {$_.State -eq "enabledForReportingButNotEnforced"} | Select-Object DisplayName,State,ModifiedDateTime | Format-Table -AutoSize # Get all named locations (trusted IPs and countries) Get-MgIdentityConditionalAccessNamedLocation -All | Select-Object DisplayName,OdataType,IsTrusted | Format-Table -AutoSize
⚠️ Break-Glass Accounts — Exclude from ALL CA Policies
Always maintain two emergency access (break-glass) accounts that are excluded from every Conditional Access policy. These accounts must: be cloud-only (not synced), use a very strong password stored securely (not in a password manager), NOT have MFA registered (since MFA failure is a common lockout scenario), and be in the Global Administrator role permanently (not via PIM). Monitor them with alerts — any sign-in to these accounts should trigger an immediate security investigation.
🔒 Module 8: Authentication Methods & MFA
The Authentication Methods blade is the modern, policy-based approach to managing MFA and authentication across the tenant. It replaces the legacy per-user MFA settings (in the old MFA portal) and the legacy SSPR method configuration. All new authentication configuration should use the Authentication Methods Policy only.
Available Authentication Methods (2025–2026)
| Method | Type | Phishing Resistant | Passwordless | Licence |
|---|---|---|---|---|
| FIDO2 security key (Passkey) | Hardware token / Device passkey | ✅ Yes | ✅ Yes | Free |
| Microsoft Authenticator (Passwordless) | Push notification + number matching | ✅ Yes (with number match) | ✅ Yes | Free |
| Windows Hello for Business | Biometric / PIN on Windows device | ✅ Yes | ✅ Yes | Free |
| Microsoft Authenticator (MFA push) | Push notification | ✗ No (MFA fatigue risk) | ✗ No | Free |
| TOTP (Authenticator app / third-party) | Time-based one-time password | ✗ No | ✗ No | Free |
| Temporary Access Pass (TAP) | Time-limited bypass code for onboarding | N/A — temporary use only | ✗ No | Free (P1 for SSPR) |
| SMS / Voice call | OTP via text or phone call | ✗ No (SIM swap risk) | ✗ No | Free — avoid for admins |
Audit MFA Registration & Identify Unregistered Users
Report on MFA registration status across all users, identify users with no MFA method registered, and find users who are passwordless-capable, to prioritise the passwordless rollout.
Connect-MgGraph -Scopes "UserAuthenticationMethod.Read.All","Reports.Read.All" # Get MFA registration status for all users $MFAReport = Get-MgReportAuthenticationMethodUserRegistrationDetail -All | Select-Object UserDisplayName,UserPrincipalName,IsAdmin,IsMfaRegistered,IsMfaCapable,IsPasswordlessCapable,IsSsprRegistered,MethodsRegistered # Export full MFA registration report $MFAReport | Export-Csv -Path "MFARegistrationReport.csv" -NoTypeInformation # Users with NO MFA registered (sorted admins first — highest risk) $MFAReport | Where-Object {$_.IsMfaRegistered -eq $false} | Select-Object UserDisplayName,UserPrincipalName,IsAdmin | Sort-Object IsAdmin -Descending | Format-Table -AutoSize # Summary dashboard Write-Host "Total Users: $($MFAReport.Count)" Write-Host "MFA Registered: $(($MFAReport | Where-Object {$_.IsMfaRegistered}).Count)" Write-Host "No MFA Registered: $(($MFAReport | Where-Object {-not $_.IsMfaRegistered}).Count)" Write-Host "Passwordless Capable: $(($MFAReport | Where-Object {$_.IsPasswordlessCapable}).Count)"
🛡️ Module 9: Identity Protection
Microsoft Entra ID Protection (formerly Azure AD Identity Protection) uses machine learning and Microsoft’s global threat intelligence to detect identity-based risks in real time. It classifies risks as sign-in risk (suspicious properties of the current sign-in) or user risk (probability that a user’s account is compromised). Requires Entra ID P2.
Risk Levels & Common Risk Detections
| Detection | Type | Risk Level | What It Means |
|---|---|---|---|
| Atypical travel | Sign-in risk | Medium | Sign-ins from two locations physically impossible to travel between in the elapsed time |
| Anonymous IP address | Sign-in risk | Medium | Sign-in originating from Tor exit node, anonymising VPN, or known proxy service |
| Malware-linked IP | Sign-in risk | High | Sign-in from IP address associated with active botnet command-and-control traffic |
| Unfamiliar sign-in properties | Sign-in risk | Low–Medium | Sign-in from device, location, or browser not seen for this user before |
| Leaked credentials | User risk | High | User’s credentials found in dark web dumps or paste sites by Microsoft’s threat intel |
| Entra ID threat intelligence | Sign-in / User risk | High | Sign-in pattern matches known attack techniques from Microsoft’s global threat database |
| Password spray | Sign-in risk | High | Multiple users targeted with the same password in a brute-force pattern |
Review Risky Users & Risky Sign-ins — Remediate & Dismiss
Export all risky users and risky sign-ins, confirm compromised accounts for immediate response, and dismiss false-positive risk detections after investigation.
Connect-MgGraph -Scopes "IdentityRiskyUser.ReadWrite.All","IdentityRiskEvent.Read.All" # Get all risky users (Entra ID P2 required) Get-MgRiskyUser -All | Select-Object UserDisplayName,UserPrincipalName,RiskLevel,RiskState,RiskDetail,RiskLastUpdatedDateTime | Sort-Object RiskLevel -Descending | Format-Table -AutoSize # Export high-risk users for immediate incident response Get-MgRiskyUser -All -Filter "riskLevel eq 'high'" | Export-Csv -Path "HighRiskUsers.csv" -NoTypeInformation # Confirm a user as compromised (forces password reset + revokes sessions) $RiskyUser = Get-MgRiskyUser -Filter "UserPrincipalName eq 'compromised@contoso.com'" Invoke-MgConfirmRiskyUserCompromised -UserIds @($RiskyUser.Id) Write-Host "User confirmed compromised. Password reset required on next sign-in." # Dismiss risk for false positive after investigation $RiskyUser2 = Get-MgRiskyUser -Filter "UserPrincipalName eq 'falsepositive@contoso.com'" Invoke-MgDismissRiskyUser -UserIds @($RiskyUser2.Id) # Get all risk detections for SIEM export Get-MgRiskDetection -All -Top 50 | Select-Object UserDisplayName,DetectionTimingType,RiskEventType,RiskLevel,IpAddress,Location | Format-Table -AutoSize
⚖️ Module 10: Identity Governance — PIM & Access Reviews
Identity Governance (requiring Entra ID P2 or the Entra ID Governance add-on) implements the principle of Just-In-Time and Just-Enough-Access across admin roles, group membership, and application access. The four key capabilities are PIM, Access Reviews, Entitlement Management, and Lifecycle Workflows.
PIM — Eligible vs Active Assignments
| Assignment Type | Description | Access State | When to Use |
|---|---|---|---|
| Eligible | User has the right to activate the role but does NOT have it active permanently — must activate through PIM portal or Entra admin center | Inactive until activated; activation requires justification, optional approval, optional MFA | All sensitive roles — Global Admin, Privileged Role Admin, Security Admin, etc. |
| Active (time-bound) | User has the role active for a specified duration (max configurable, typically 1–8 hours) | Fully active for the duration; auto-expires without manual revocation | During a specific maintenance window or incident response period |
| Active (permanent) | User has the role permanently active — no time limit, no activation required | Always active — equivalent to legacy direct role assignment | Break-glass accounts only; avoid for all other admin accounts |
Manage PIM — Eligible Assignments & Role Activation Requests
Audit all PIM eligible role assignments, review active role activations, and programmatically activate a PIM-eligible role assignment for a time-limited administrative task.
Connect-MgGraph -Scopes "RoleManagement.ReadWrite.Directory","RoleEligibilitySchedule.ReadWrite.Directory" # Get all PIM eligible role assignments Get-MgRoleManagementDirectoryRoleEligibilityScheduleInstance -All | ForEach-Object { $Principal = Get-MgUser -UserId $_.PrincipalId -ErrorAction SilentlyContinue $Role = Get-MgRoleManagementDirectoryRoleDefinition -UnifiedRoleDefinitionId $_.RoleDefinitionId [PSCustomObject]@{ User = $Principal.UserPrincipalName Role = $Role.DisplayName StartTime = $_.StartDateTime EndTime = $_.EndDateTime } } | Format-Table -AutoSize # Get all currently ACTIVE PIM activations Get-MgRoleManagementDirectoryRoleAssignmentScheduleInstance -All | Where-Object {$_.AssignmentType -eq "Activated"} | ForEach-Object { $Principal = Get-MgUser -UserId $_.PrincipalId -ErrorAction SilentlyContinue $Role = Get-MgRoleManagementDirectoryRoleDefinition -UnifiedRoleDefinitionId $_.RoleDefinitionId [PSCustomObject]@{ User=$Principal.UserPrincipalName; Role=$Role.DisplayName; Start=$_.StartDateTime; End=$_.EndDateTime } } | Format-Table -AutoSize # Self-activate a PIM eligible role for a time-limited task $Params = @{ Action = "selfActivate" PrincipalId = "your-user-object-id" RoleDefinitionId = "role-definition-id" DirectoryScopeId = "/" Justification = "Password reset task - INC001234" ScheduleInfo = @{ StartDateTime = Get-Date Expiration = @{ Type = "AfterDuration"; Duration = "PT4H" } } } New-MgRoleManagementDirectoryRoleAssignmentScheduleRequest -BodyParameter $Params Write-Host "PIM role activation requested for 4 hours."
📊 Module 11: Monitoring — Sign-in Logs, Audit Logs & Identity Health
Entra ID generates three primary log streams available in the Monitoring section: Sign-in logs (every authentication attempt), Audit logs (every admin action and object change), and Provisioning logs (app provisioning activity). These logs are retained for 30 days in the portal (7 days for free tenants) and should be exported to Log Analytics / Microsoft Sentinel for long-term retention and SIEM integration.
Sign-in Log Categories
| Log Type | What It Captures | Volume |
|---|---|---|
| Interactive sign-ins | User-initiated sign-ins where the user directly provides credentials — includes browser, desktop app, and mobile app sign-ins | Highest volume — every user session |
| Non-interactive sign-ins | Token refresh operations and silent sign-ins performed without user interaction — background app authentication | Very high — often 10x interactive volume |
| Service principal sign-ins | Sign-ins performed by app identities (service principals) accessing resources — app-to-app authentication via OAuth client credentials | Medium — API and automation calls |
| Managed identity sign-ins | Sign-ins by Azure managed identities — workloads running in Azure authenticating to other Azure services without credentials | Low to medium — Azure workload authentication |
Query Sign-in & Audit Logs for Security Investigation
Retrieve recent sign-in failures, find sign-ins from outside expected countries, and export audit logs for user management events for a compliance evidence package.
Connect-MgGraph -Scopes "AuditLog.Read.All" # Get sign-in failures in the last 24 hours $Since = (Get-Date).AddHours(-24).ToString("yyyy-MM-ddTHH:mm:ssZ") Get-MgAuditLogSignIn ` -Filter "createdDateTime ge $Since and status/errorCode ne 0" ` -All -Top 200 | Select-Object UserDisplayName,UserPrincipalName,AppDisplayName, @{N="ErrorCode";E={$_.Status.ErrorCode}}, @{N="FailureReason";E={$_.Status.FailureReason}}, IpAddress,CreatedDateTime | Export-Csv -Path "SignInFailures24h.csv" -NoTypeInformation # Get audit log for user management events (last 7 days) $Since7 = (Get-Date).AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ssZ") Get-MgAuditLogDirectoryAudit ` -Filter "activityDateTime ge $Since7 and category eq 'UserManagement'" ` -All -Top 500 | Select-Object ActivityDisplayName,ActivityDateTime, @{N="InitiatedBy";E={$_.InitiatedBy.User.UserPrincipalName}}, @{N="Target";E={$_.TargetResources[0].UserPrincipalName}},Result | Export-Csv -Path "UserManagementAudit.csv" -NoTypeInformation # Top 10 users with most sign-in failures (brute force detection) Get-MgAuditLogSignIn -Filter "createdDateTime ge $Since7 and status/errorCode ne 0" -All | Group-Object UserPrincipalName | Sort-Object Count -Descending | Select-Object Name,Count -First 10 | Format-Table -AutoSize
🎓 Module 12: SC-300 Certification Alignment
The SC-300: Microsoft Identity and Access Administrator certification validates your ability to design, implement, and operate identity and access management solutions using Microsoft Entra ID. It is one of the most respected M365/Azure security certifications and a prerequisite for the SC-100 (Microsoft Cybersecurity Architect) expert certification.
Implement Identities in Microsoft Entra ID
Tenant configuration, user & group management, external identities (B2B/B2C), hybrid identity (Entra Connect, Cloud Sync), custom security attributes — Modules 2, 3, 4, 5
Implement Authentication and Access Management
MFA planning & implementation, Conditional Access policies, Identity Protection risk policies, authentication methods (FIDO2, passwordless, TAP), SSPR, password protection — Modules 7, 8, 9
Implement Access Management for Applications
Enterprise app registration, SAML/OIDC SSO, app permissions & consent, Application Proxy for on-prem app access, managed identities, workload identities — (Enterprise Apps blade — not covered in this guide; see dedicated App Integration course)
Plan and Implement Identity Governance
PIM (eligible vs active, activation, settings, access reviews for roles), Entitlement Management (access packages, catalogs), Lifecycle Workflows (Joiner/Mover/Leaver), Access Reviews for groups & apps — Module 10
Monitor and Maintain Microsoft Entra ID
Sign-in logs, audit logs, Identity Secure Score, Entra Health, Log Analytics/Sentinel integration, Entra Workbooks — Module 11
✅ SC-300 Exam Study Tips
- Understand Conditional Access policy anatomy precisely — know every Assignment option (users, target resources, conditions) and every Grant/Session control, including the difference between “require all selected controls” vs “require one of the selected controls”
- Study CA Named Locations — the difference between IP-range locations (trust level can be configured) and country locations (no trust flag); know that “Trusted Location” requires IP range, not country
- Know all three PIM assignment types — eligible (must activate), active time-bound (activated for duration), and active permanent (break-glass only) — and the PIM activation workflow including MFA, justification, and optional approval
- Understand Entra ID P1 vs P2 vs Governance licencing — Dynamic Groups needs P1; Identity Protection and PIM need P2; Entitlement Management and Lifecycle Workflows need the Governance add-on
- Know the break-glass account requirements — cloud-only, excluded from all CA policies, Global Admin permanently (not via PIM), no MFA registered (to avoid being locked out during MFA service outage), monitored with sign-in alerts
- Study Identity Protection risk types — sign-in risk (this specific sign-in is suspicious) vs user risk (this account appears compromised); know that CA user risk policy forces password change, CA sign-in risk policy forces MFA or blocks
- Understand Entra Connect vs Cloud Sync — Cloud Sync is the newer, agent-based sync with support for multi-forest; Entra Connect uses the full sync engine on a server; Cloud Sync doesn’t support all features (no Exchange hybrid writeback)
- Practice every PowerShell command in a Microsoft 365 Developer Tenant — the SC-300 exam includes scenario-based questions that require understanding the exact Graph API and PowerShell operations for each identity management task
💡 Best Practices Summary
- Require MFA for all users with no exceptions via a Conditional Access policy — excluding only break-glass accounts; eliminate per-user MFA settings which are the legacy approach
- Place all privileged admin accounts in PIM as eligible-only — no permanent active assignments except for a maximum of 5 break-glass accounts with monitoring alerts on any sign-in
- Run quarterly Access Reviews for all admin roles (especially Global Administrator and Privileged Role Administrator) and all guest user access — automate approval workflows where possible
- Enable Identity Protection risk-based CA policies for both user risk and sign-in risk — set medium and above to require MFA (sign-in risk) or password change (user risk)
- Block legacy authentication protocols (Basic Auth, NTLM, IMAP, POP, SMTP AUTH) via Conditional Access — these protocols cannot perform MFA and are the source of the majority of credential compromise attacks
- Use dynamic groups for licence assignment and policy targeting — static group membership goes stale when users change departments or leave; dynamic groups follow user attributes automatically
- Integrate Entra ID sign-in and audit logs with Microsoft Sentinel or Log Analytics for 90–365 day retention — the 30-day in-portal retention is insufficient for compliance and security investigations
- Implement Temporary Access Pass (TAP) for new user onboarding and MFA recovery — TAP eliminates the need to share initial passwords and gives users a secure time-limited way to register their first MFA method
- Enable FIDO2/passkey authentication for admin accounts first — passkeys are phishing-resistant and eliminate the risk of MFA fatigue attacks against high-value targets
- Implement Lifecycle Workflows (Entra ID Governance) for Joiner, Mover, and Leaver automation — automated provisioning and deprovisioning reduces the window between an employee leaving and their account being disabled
📚 References & Further Reading
- 🔗 Microsoft Entra ID Documentation — Microsoft Learn
- 🔗 SC-300: Identity and Access Administrator Certification — Microsoft Learn
- 🔗 Conditional Access Documentation — Microsoft Learn
- 🔗 Microsoft Entra ID Protection — Microsoft Learn
- 🔗 Privileged Identity Management (PIM) — Microsoft Learn
- 🔗 Entitlement Management Overview — Microsoft Learn
- 🔗 Microsoft Graph PowerShell SDK — Microsoft Learn
- 🔗 Microsoft Entra Admin Center — entra.microsoft.com
- 🔗 Microsoft 365 Developer Program (Free Lab Tenant) — developer.microsoft.com
