Advanced ✓ Completed Microsoft 365 Administrator

Zero Trust Identity Perimeter

Enterprise-grade Zero Trust Identity implementation using Microsoft Entra ID Conditional Access, Privileged Identity Management, Identity Protection, MFA, and FIDO2 — deployed across 7 implementation phases with full Report-Only → Enforced evidence.

7Implementation Phases
5CA Policies
30Evidence Screenshots
4Auth Methods

📄 Project Overview

Objective

Implement the Identity pillar of Microsoft Zero Trust by replacing Security Defaults with a layered Conditional Access policy framework integrating Entra ID Protection risk signals.

Deployment Pattern

Every policy was first deployed in Report-Only mode, monitored via Sign-in Logs, validated for impact, then switched to Enabled (Enforced) — zero-disruption rollout.

Environment

Live Microsoft 365 tenant using Business Premium / E3 licensing. Entra ID P2 features (Identity Protection + PIM) required. All configurations validated with portal screenshots.

Core Principle

“Verify explicitly, use least privilege access, assume breach.” Applied across all identity-driven access decisions in the Microsoft 365 environment.

⚠️ Business Problem

Modern enterprises face an identity-centric threat landscape. Without a structured Conditional Access framework, organisations rely entirely on password strength — a fundamentally insufficient control against modern credential-based attacks.

🔐
Over 99% of account compromise attacks can be prevented by enabling MFA — yet many organisations still rely on Security Defaults alone.
🚫
Legacy authentication protocols (SMTP AUTH, POP3, IMAP, Basic Auth) bypass modern authentication controls and cannot enforce MFA.
👑
Privileged accounts with standing access represent a critical blast radius — if compromised, attackers have unlimited, time-unrestricted access.
🌐
Risky sign-ins from anonymous IPs, unfamiliar locations, and atypical travel go unchallenged without intelligent risk-based policies.

💡 Solution Overview

This implementation replaces Microsoft Security Defaults with a layered Conditional Access policy framework, integrating Entra ID Protection signals to create an adaptive, risk-aware access control plane.

ACCESS REQUESTUser + Device + Location + Application
CONDITIONAL ACCESS POLICY ENGINE
Baseline MFA PolicyRisk-Based PoliciesNamed LocationsBlock Legacy AuthAuthentication Methods
✅ Grant Access
🔒 Block Access
⚠️ Require MFA / Password Reset

Key Design Decisions

  • Security Defaults disabled in favour of granular Conditional Access policies
  • All policies staged in Report-Only mode before enforcement (zero-disruption rollout)
  • Microsoft Authenticator push notifications as the primary MFA method with number matching enabled
  • FIDO2 security keys enabled for privileged accounts (phishing-resistant)
  • PIM configured for Just-In-Time privileged access (zero standing access)
  • Identity Protection integrated to feed real-time risk signals into Conditional Access

🏛️ Architecture

👤 Identity Layer

Microsoft Entra ID as the identity provider with Entra ID P2 features. Centralised authentication method management replacing legacy per-user MFA settings.

🔓 Access Control Layer

5 Conditional Access policies covering baseline MFA, risk-based access, legacy auth blocking, named location policies, and authentication method requirements.

🤴 Intelligence Layer

Entra ID Protection processing 30+ trillion signals daily, feeding User Risk and Sign-in Risk scores directly into the Conditional Access policy engine.

👑 Privileged Access Layer

Privileged Identity Management converting all permanent Global Admin assignments to Eligible (JIT) assignments with MFA, justification, and optional approval workflow.

Lab Environment

ComponentDetails
Tenant TypeMicrosoft 365 Business Premium / E3
Identity ProviderMicrosoft Entra ID (Azure AD P2 features)
Licensing RequiredEntra ID P2 (Identity Protection + PIM)
Admin Portalentra.microsoft.com
PowerShell ModuleMicrosoft.Graph (v2.x)
Deployment MethodAzure Portal GUI + PowerShell validation
Evidence FormatPortal screenshots at each configuration stage

🛠️ Technologies Used

☁️Microsoft Entra IDIdentity & Access Management platform
🔓Conditional AccessPolicy-based access control engine
🤖Entra ID ProtectionML-driven risk detection
👑Privileged Identity ManagementJust-In-Time role activation
📱Microsoft AuthenticatorPrimary MFA method with push notifications
🔑FIDO2 Security KeysPhishing-resistant MFA for privileged accounts
🌏Named LocationsTrusted IP ranges & country allowlists
📊Microsoft Graph APIPowerShell automation & reporting

📅 Implementation Phases

Every Conditional Access policy was first deployed in Report-Only mode, monitored via Sign-in Logs, validated for impact, and only then switched to Enabled (Enforced). This pattern is mandatory for enterprise deployments to prevent accidental lockouts.

Phase 1.1

Baseline MFA for All Users

Replace Security Defaults with a granular Conditional Access policy requiring MFA for all users across all cloud applications. Security Defaults are disabled first as both cannot be active simultaneously.

1 Disable Security Defaults in Entra ID Properties
2 Configure Authentication Methods Policy (Push + SMS + FIDO2)
3 Create CA Policy in Report-Only mode: All users → All cloud apps → Require MFA
4 Validate MFA registration coverage (>95% required before enforcement)
5 Switch policy from Report-Only to Enabled
Phase 1.2

Risk-Based Access Policies

Integrate Microsoft Entra ID Protection risk signals into Conditional Access. Two policies: User Risk (High → Password change + MFA) and Sign-in Risk (Medium+ → MFA).

Phase 1.3

Block Legacy Authentication

Block all authentication requests using legacy protocols (Basic Auth, SMTP AUTH, POP3, IMAP, Exchange ActiveSync v14) that cannot support modern MFA controls. Run Report-Only for 14 days and migrate all affected users before enforcement.

Phase 1.4

Trusted Network / Named Locations

Define trusted network locations (corporate IP ranges and country allowlists). The “Trusted” flag affects risk scoring — sign-ins from trusted IPs are not penalised by Entra ID Protection.

Phase 1.5

Authentication Methods Configuration

Configure the centralised Authentication Methods policy. Number matching enabled to prevent MFA fatigue attacks. FIDO2 enabled for phishing-resistant MFA. Replaces fragmented legacy per-user MFA settings.

Phase 1.7

Privileged Identity Management (PIM)

Eliminate standing privileged access. Administrators must request activation with justification, MFA verification, and optional approval — creating a full audit trail and a narrow time window.

Zero Trust Principle: Administrators activate privileged roles only when required, for a defined time period (max 8 hours).
Phase 1.8

Entra ID Identity Protection

Validate that Microsoft Entra ID Protection is active and feeding risk signals into the Conditional Access engine. Identity Protection processes over 30 trillion signals daily to detect anomalous access patterns.

💻 PowerShell Scripts

All scripts use the Microsoft Graph PowerShell SDK (v2.x). Legacy AzureAD and MSOnline modules are deprecated and not used in this project.

ScriptPurpose
Get-MFAStatus.ps1Export MFA registration status for all users
Export-ConditionalAccessPolicies.ps1Export all CA policies to JSON for backup/documentation
New-NamedLocations.ps1Bulk-create Named Locations from a CSV
Get-PIMAssignments.ps1Report all PIM eligible and active role assignments
PowerShell — PrerequisitesPowerShell
# Install Microsoft Graph PowerShell SDK
Install-Module Microsoft.Graph -Scope CurrentUser -Force

# Verify installation
Get-Module Microsoft.Graph -ListAvailable | Select-Object Name, Version
PowerShell — Query Legacy Auth Blocks (Post-Enforcement)PowerShell
# Query Sign-in Logs for legacy auth attempts (post-enforcement)
Connect-MgGraph -Scopes "AuditLog.Read.All"
Get-MgAuditLogSignIn -Filter "clientAppUsed ne 'Browser' and clientAppUsed ne 'Mobile Apps and Desktop Clients'" |
Select-Object UserDisplayName, ClientAppUsed, Status, CreatedDateTime |
Where-Object { $_.Status.ErrorCode -eq 53003 }
# Error 53003 = "Access blocked by Conditional Access policies"

🏅 Skills Demonstrated

Zero Trust architecture design & implementation
Conditional Access policy lifecycle management
Risk-based adaptive access controls
Just-In-Time privileged access via PIM
Phishing-resistant MFA (FIDO2 & Authenticator)
PowerShell automation via Microsoft Graph SDK
Legacy authentication identification & remediation
Identity Protection risk signal integration
Tenant security hardening & compliance alignment
Security evidence documentation & audit readiness

📚 Lessons Learned

1

Always use Report-Only before enforcement

This is non-negotiable in production. Even with thorough planning, unexpected legacy clients and service accounts will appear in logs during the observation period.

2

MFA registration must precede enforcement

Enforcing MFA before users have registered causes immediate lockouts. Communicate, run registration campaigns, and validate coverage before switching to Enabled.

3

Named Locations must be maintained

Trusted IP configurations become stale when offices relocate or ISPs change. Build a quarterly review process for Named Location IP ranges.

4

Number matching is a must

MFA fatigue attacks (push spam) are a real attack pattern post-credential compromise. Enabling number matching on Authenticator eliminates this vector with zero user friction.

5

PIM activation alerts are high value

Configure alerts on PIM role activation events. Any unexpected Global Admin activation outside business hours warrants immediate investigation.

6

Identity Protection improves over time

The risk engine learns your tenant's baseline. Initial false positives are normal — mark confirmed-safe sign-ins to train the model for your environment.

📈 Business Value

OutcomeImpact
🔐 99%+ reduction in account compromise riskMFA blocks the vast majority of credential-based attacks
👑 Eliminated standing privileged accessPIM reduces blast radius to a time-bounded window
🚫 Legacy authentication blockedCloses the primary vector for password spray attacks
🤖 Risk-adaptive accessCompromised accounts auto-challenged or blocked without human intervention
📋 Compliance alignmentSupports NIST SP 800-207, ISO 27001 A.9, CIS Controls v8
📷 Audit-ready evidenceFull screenshot evidence at each phase satisfies internal & external audit
✅ Zero service disruptionReport-Only → Enforced pattern ensured no user lockouts during rollout

🔗 References