Skip to content

Conditional Access Change History with Diff (30 days)

The question it answers: Who changed which Conditional Access policy in the last 30 days, what exactly changed, and did it weaken protection?

Who changed which Conditional Access policy, and exactly what changed. Deleted and disabled policies, switches to report-only and new exclusions are marked as weakening - the changes attackers make after gaining admin rights, and the ones auditors ask about.

Where in the appEntra ID › Sign-in & Audit Investigations › CA Change History (diff)
WorkloadEntra ID
KindFindings list · dashboard tile
DataRead from Microsoft 365 when someone first opens it, then kept for the report cache lifetime (Settings > Data & cache, 1 hour unless changed).
LicenceNo extra licence needed.
Report id (API and MCP)entra.investigations.ca-change-history
ColumnKeyType
SeveritySeverityStatus
ActivityCategoryText
PolicySubjectLink
CheckSettingText
Changed byValueText
FindingFindingText
Diff (old -> new)DetailText
WhenWhenDateTime
Settings changedNumberNumber

A findings list hides columns that no row fills. Severity is Critical, Serious, Warning, OK or Info; rows rated Critical, Serious or Warning need attention (Working with findings).

Licence: No extra licence needed.

Application permissions on the IntensiveReports app registration (all permissions):

PermissionAPIWhat it allowsNote
AuditLog.Read.AllMicrosoft GraphRead all audit log data
Data sources it reads
  • GET /v1.0/auditLogs/directoryAudits?$filter=loggedByService eq 'Conditional Access'
GET /ir-api/v1/reports/entra.investigations.ca-change-history?size=100

An AI assistant reads it with the MCP tool get_report and the id entra.investigations.ca-change-history. The client needs the Read grant for Entra ID. See Using the API.