Status: Active — fully supported
Auth: OAuth 2.0 (client credentials)
Syncs: Users, MFA, Conditional Access, Groups, Roles, Intune devices, Defender alerts, SharePoint, O365 Audit logs
Auth: OAuth 2.0 (client credentials)
Syncs: Users, MFA, Conditional Access, Groups, Roles, Intune devices, Defender alerts, SharePoint, O365 Audit logs
What You’ll Need
- Azure Portal admin access (Global Admin or Application Administrator role)
- Microsoft 365 tenant ID
- 15 minutes
Step 1 — Create an App Registration in Azure Portal
- Go to portal.azure.com
- Search for “App registrations” → click New registration
- Fill in:
- Name:
SecurAtlas Integration - Supported account types: Accounts in this organizational directory only (Single tenant)
- Redirect URI:
https://www.securatlas.com/api/integrations/callback
- Name:
- Click Register
- Copy the Application (client) ID — you’ll need this
- Copy the Directory (tenant) ID — you’ll need this
Step 2 — Create a Client Secret
- In your app registration → Certificates & secrets
- Click New client secret
- Description:
SecurAtlas - Expiry: 24 months (recommended)
- Click Add
- Copy the secret VALUE immediately — it’s only shown once
Step 3 — Add API Permissions
- In your app → API permissions → Add a permission
- Select Microsoft Graph → Application permissions
- Add ALL of these permissions:
| Permission | Purpose |
|---|---|
User.Read.All | Read all user profiles |
Directory.Read.All | Read directory data |
Policy.Read.All | Read conditional access policies |
AuditLog.Read.All | Read sign-in and audit logs |
IdentityRiskyUser.Read.All | Read risky user detections |
RoleManagement.Read.Directory | Read privileged role assignments |
DeviceManagementManagedDevices.Read.All | Read Intune managed devices |
DeviceManagementConfiguration.Read.All | Read Intune device compliance |
Organization.Read.All | Read org/tenant info |
ServiceHealth.Read.All | Read Microsoft service health |
Reports.Read.All | Read usage and activity reports |
SecurityEvents.Read.All | Read Defender security events |
TeamworkDevice.Read.All | Read Teams device settings |
- Click Grant admin consent for [your org] → Confirm
Step 4 — For Defender (Optional)
If you want Defender for Endpoint data (machines, alerts, CVEs):- Add a permission → APIs my organization uses
- Search for “WindowsDefenderATP”
- Add Application permissions:
Alert.Read.AllMachine.Read.AllSecurityRecommendation.Read.AllVulnerability.Read.AllAdvancedQuery.Read.All
- Grant admin consent again
Step 5 — Connect in SecurAtlas
- Go to your tenant → Integrations tab
- Click Connect on Microsoft Azure AD
- Enter:
- Client ID (Application ID from Step 1)
- Client Secret (from Step 2)
- Tenant ID (Directory ID from Step 1)
- Click Connect → SecurAtlas triggers a full sync immediately
What Gets Synced
| Entity Type | Data Collected |
|---|---|
| Users | Name, UPN, enabled status, last sign-in |
| MFA Status | Per-user MFA registration and enforcement |
| Conditional Access | All CA policies, enabled/disabled state |
| Groups | All security and M365 groups |
| Privileged Roles | Global Admins, privileged role assignments |
| Guest Users | External guest accounts |
| Intune Devices | Compliance status, OS version, last sync |
| Defender Alerts | Active high/critical alerts |
| Defender CVEs | Unpatched critical vulnerabilities |
| Defender Secure Score | Overall Defender security score |
Sync Schedule
- Nightly automatic sync: 03:00 UTC via pg_cron
- Manual sync: Click the refresh icon on the integration card
Token Refresh
OAuth tokens are refreshed automatically every 6 hours via thesecuratlas_token_refresh cron job. If a token expires, reconnect the integration from the Integrations page.
Troubleshooting
Sync shows 'failed' immediately after connecting
Sync shows 'failed' immediately after connecting
Check that admin consent was granted. Go to Azure Portal → App registrations → your app → API permissions. All permissions should show a green checkmark under “Status”. If any show “Not granted”, click “Grant admin consent”.
No Defender data showing
No Defender data showing
Defender permissions are separate from Graph permissions. Make sure you added WindowsDefenderATP permissions AND granted admin consent for those separately. Also verify the tenant has Defender for Endpoint P1 or P2 licensed.
Reconnecting after credential rotation
Reconnecting after credential rotation
If you rotate the client secret in Azure, go to SecurAtlas → Integrations → click the Azure AD connection → Disconnect → reconnect with the new secret. The existing data is preserved — only the credentials update.
'Insufficient privileges' error in Defender sync
'Insufficient privileges' error in Defender sync
The app registration needs the WindowsDefenderATP API permissions specifically. Graph SecurityEvents.Read.All is NOT the same as MDE permissions. Add the WindowsDefenderATP application permissions from “APIs my organization uses”.