Business Problem
IDSentinel Solutions' Security Operations team had no standardized process for responding to identity-based alerts surfaced by Entra Identity Protection. When risky sign-in events fired, analysts were triaging them manually through the Entra portal — no documented runbook, no consistent remediation steps, and no audit trail proving the event was investigated and closed.
A P1 incident involving a compromised contractor account exposed the gap: the analyst who responded documented nothing, the remediation actions were inconsistent with what policy required, and the post-incident review had no evidence to work from.
Risk
- No documented runbook means inconsistent response quality depending on who is on-call
- Manual triage through the Entra portal adds 20–40 minutes to MTTR per incident
- No RCA template means repeat incidents cannot be tracked or trended
- Missing audit trail fails SOC 2 CC7.2 (incident response) and CC7.3 (incident documentation) controls
- Risky sign-in events left unactioned allow attackers to maintain persistence
Playbook Scope — 5 Phases
| Phase | NIST SP 800-61 Equivalent | Actions |
|---|---|---|
| Detection | Detect | Identity Protection alert fires on anonymized IP |
| Investigation | Analyze | Graph API pulls risk detail, detections, sign-in logs |
| Containment | Contain | Account disabled, all sessions revoked |
| Remediation | Eradicate | Password reset, account re-enabled, risk dismissed |
| Post-Incident | Recover + Document | RCA completed, SOC 2 evidence packaged |
Solution Design
The playbook uses the existing OAuth2 app registration from Scenario 06 — no new app registration required. Additional permissions added: IdentityRiskyUser.ReadWrite.All and IdentityRiskEvent.Read.All.
All investigation and containment steps are performed programmatically via Graph API rather than manual portal triage — producing a documented, reproducible evidence trail that satisfies SOC 2 audit requirements.

Implementation
-
01
Simulate Risky Sign-In and Confirm Detection
Tor Browser used to authenticate as test user
wking@IDSentinelSolutions.comthrough a Tor exit node. Entra Identity Protection classified this as ananonymizedIPAddressrisk event and flagged the user as at-risk.// 01a-tor-signin
// 01b-tor-signin
// 02-identity-protection-alert
-
02
Update App Registration Permissions
Existing app registration updated with additional permissions required for risk investigation and dismissal. No new service principal required.
// 03-api-permissions
-
03
Investigate via Graph API
All three investigation queries run programmatically via Postman:
Query 1 — Risky User DetailGET /v1.0/identityProtection/riskyUsers ?$filter=userDisplayName eq 'wking' &$select=id,riskLevel,riskState,riskLastUpdatedDateTime
Query 2 — Risk Detection EventsGET /v1.0/identityProtection/riskDetections ?$filter=userDisplayName eq 'wking' &$select=riskEventType,riskLevel,detectedDateTime,ipAddress,location
Query 3 — Sign-In Log CorrelationGET /v1.0/auditLogs/signIns ?$filter=userPrincipalName eq 'wking@IDSentinelSolutions.com' and createdDateTime ge 2026-05-13T00:00:00Z// 04-risky-user-query
// 05-risk-detection-query
// 06-signin-log-query
-
04
Containment — Account Disable + Session Revocation
PowerShell — Disable Account# Disable account $body = @{ accountEnabled = $false } | ConvertTo-Json Invoke-MgGraphRequest -Method PATCH ` -Uri "https://graph.microsoft.com/v1.0/users/$userId" ` -Body $body # Revoke all active sessions Invoke-MgGraphRequest -Method POST ` -Uri "https://graph.microsoft.com/v1.0/users/$userId/revokeSignInSessions"// 07-containment-output
-
05
Remediation — Password Reset + Risk Dismissal
Password reset performed via Active Directory on-premises — wking is a directory-synced user. Passwords are mastered on-prem; Entra reflects the change after the next sync cycle. Account re-enabled and risk state dismissed via Graph API POST to
/identityProtection/riskyUsers/dismiss. Risk state confirmeddismissed.// 08-risk-state-atrisk
// 09-password-reset
// 10-account-reenabled
// 11-risk-dismissed
// 12-risk-state-remediated
-
06
Post-Incident Documentation + RCA
Root cause identified: CA risk policy was scoped to High risk only — Medium risk sign-ins were logged but not challenged. CA policy updated to challenge Medium risk with MFA step-up. RCA filed as SOC 2 CC7.2/CC7.3 evidence. Playbook added to SOC runbook library as INC-TYPE-001.
// 13-rca-document
// 14-evidence-package
Outcome
Incident Summary
| Field | Value |
|---|---|
| Incident ID | INC-2026-007 |
| Severity | P2 — Medium Risk |
| Affected User | wking@IDSentinelSolutions.com |
| Detection Source | Entra Identity Protection |
| Risk Event Type | anonymizedIPAddress (Tor exit node) |
| Detection Time | 2026-05-13 UTC |
| SOC 2 Controls | CC7.2, CC7.3 |
| Root Cause | CA risk policy scoped to High risk only — Medium risk sign-ins not challenged |
| Corrective Action | CA policy updated to challenge Medium risk with MFA step-up |
Files
-
scripts/Invoke-IdentityRiskContainment.ps1PowerShell — account disable and session revocation -
runbooks/INC-TYPE-001-Identity-Risk-Response.mdSOC runbook — full 5-phase playbook -
templates/RCA-Template.mdRoot cause analysis template -
evidence/INC-2026-007/Complete evidence package for this incident -
diagrams/risk-response-flow.pngNIST-mapped response flow diagram -
screenshots/Evidence of implementation — detection, investigation, containment, remediation, RCA