6.2 Microsoft First-Party Connectors

75 minutes · Module 6

Microsoft First-Party Connectors

By the end of this subsection, you will know every Microsoft connector available, which ones to enable, and how to verify each is working with diagnostic queries.

You enabled the two most critical connectors in Module 5. This subsection covers the remaining Microsoft connectors and teaches you to verify they are all healthy.

Complete connector inventory

ConnectorTablesSetupCostEnable when
M365 Defender (done)Device*, Email*, CloudApp*, Identity*, Alert*One-clickPer-tableAlways
Entra ID (done)SigninLogs, AADNonInteractive*, AuditLogsDiagnostic settingsBillableAlways
Azure ActivityAzureActivityDiagnostic settingsFreeAlways — zero cost
Office 365OfficeActivityOne-clickFreeAlways — zero cost
Microsoft PurviewPurviewAuditLogDiagnostic settingsBillableWhen DLP/insider risk monitoring needed
Azure Key VaultAzureDiagnostics (KeyVault)Diagnostic settingsBillableWhen Key Vault is in scope
Azure FirewallAzureDiagnostics (Firewall)Diagnostic settingsBillableWhen Azure Firewall deployed
Entra ID ProtectionSecurityAlert (IPC)Via M365 DefenderFree (alert data)Usually flows via M365 Defender
Threat IntelligenceThreatIntelligenceIndicatorAPI/TAXIIFree (table)When TI feeds available

Azure Activity — enable now (free)

Navigate to Sentinel, Data connectors, Azure Activity, Open connector page, select subscription, Connect. Takes 30 seconds.

This sends all Azure management plane events: resource creation, deletion, modification, role assignments, policy changes. Cost: zero. Value: critical for detecting attackers who compromise Azure credentials and create resources (cryptomining VMs), modify security settings (disable logging), or escalate privileges (assign Global Admin).

1
2
3
4
AzureActivity
| where TimeGenerated > ago(24h)
| summarize EventCount = count() by CategoryValue
| sort by EventCount desc
Expected Output
CategoryValueEventCount
Administrative234
Policy47
Security8
Alert2
What to look for: Administrative events are resource management operations. A spike in Administrative events could indicate an attacker creating resources or modifying configurations. Security events include role assignments — a new Global Admin assignment at 3am warrants immediate investigation.

Detection rule opportunity: Alert on Azure role assignments outside business hours or to users who have never held privileged roles:

1
2
3
4
5
6
7
AzureActivity
| where CategoryValue == "Administrative"
| where OperationNameValue has_any ("roleAssignments/write", "roleDefinitions/write")
| extend Hour = hourofday(TimeGenerated)
| where Hour < 7 or Hour > 20
| project TimeGenerated, Caller, OperationNameValue,
    tostring(Properties.requestbody)
Expected Output
TimeGeneratedCallerOperationNameValue
03:14compromised-admin@northgateeng.comMicrosoft.Authorization/roleAssignments/write
What to look for: Role assignment at 3:14 AM. Who assigned what role to whom? The Properties.requestbody contains the role definition and target principal. This is either a legitimate after-hours admin task (verify with the person) or an attacker escalating privileges. This query is a ready-made analytics rule for Module 10.

Office 365 — enable now (free)

Navigate to Sentinel, Data connectors, Office 365, enable Exchange, SharePoint, and Teams. Takes 30 seconds.

This populates OfficeActivity with detailed user activity across all M365 services. The table is distinct from what the M365 Defender connector provides.

OfficeActivity vs CloudAppEvents — they are not duplicates

CloudAppEvents (Defender connector) captures inbox rule creation, OAuth consents, and app-level events. OfficeActivity (Office 365 connector) captures granular mailbox operations including MailItemsAccessed — the audit event that tells you exactly which emails an attacker read. For the Module 13 post-compromise checklist (subsection 13.6), you need OfficeActivity. For inbox rule detection, you need CloudAppEvents. Both connectors are required for complete investigation coverage.

1
2
3
4
5
6
OfficeActivity
| where TimeGenerated > ago(24h)
| summarize EventCount = count(), Users = dcount(UserId) by OfficeWorkload, Operation
| where EventCount > 100
| sort by EventCount desc
| take 15
Expected Output
OfficeWorkloadOperationEventCountUsers
ExchangeMailItemsAccessed12,847342
ExchangeSend4,521298
SharePointFileAccessed8,234187
SharePointFileDownloaded1,24789
MicrosoftTeamsMessageSent3,421234
What to look for: This is your organization's normal activity profile. 342 users accessing email is normal for a 500-person org. Bookmark this baseline — during an investigation, compare the affected user's activity against this norm. A user with 500 MailItemsAccessed events in 30 minutes is not normal.

Connector health dashboard — run at every shift start

After enabling all Microsoft connectors, this single query confirms your entire data pipeline:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
union withsource=TableName
    AzureActivity,
    OfficeActivity,
    SigninLogs,
    AADNonInteractiveUserSignInLogs,
    DeviceProcessEvents,
    EmailEvents,
    CloudAppEvents,
    AuditLogs
| where TimeGenerated > ago(24h)
| summarize
    EventCount = count(),
    LastEvent = max(TimeGenerated),
    HoursAgo = round(datetime_diff('minute', now(), max(TimeGenerated)) / 60.0, 1)
    by TableName
| sort by HoursAgo desc
Expected Output — Healthy Pipeline
TableNameEventCountLastEventHoursAgo
AuditLogs14214:280.1
CloudAppEvents3,42114:310.0
DeviceProcessEvents12,84714:320.0
EmailEvents2,89214:300.0
SigninLogs1,23414:290.0
AADNonInteractiveUserSignInLogs8,74214:320.0
AzureActivity23414:150.3
OfficeActivity5,67214:250.1
What to look for: Every table should show HoursAgo < 1 during business hours. Any table with HoursAgo > 4 during business hours indicates a connector problem. This query takes 5 seconds and confirms your entire data pipeline is healthy. Save it as a favorite in your workspace.

Check your understanding

1. Azure Activity and Office 365 connectors are free. Is there any reason not to enable them?

No. Free connectors with investigation-critical data should be enabled in every Sentinel workspace. If they are not enabled, it is an oversight, not a decision.
They generate too much noise
They conflict with the Defender connector

2. You need to determine which specific emails an attacker read during a compromise. Which connector and table provide this?

M365 Defender connector — CloudAppEvents
Office 365 connector — OfficeActivity table, Operation == "MailItemsAccessed"
Entra ID connector — AuditLogs

3. A role assignment event appears in AzureActivity at 3:14 AM. What is the appropriate response?

Investigate immediately — after-hours privilege escalation is a high-priority indicator. Determine who made the assignment, what role was assigned, and to whom. Verify with the account owner. If unauthorized, this is likely an attacker who compromised an admin account.
Log it for the morning shift
It is probably a scheduled task