See every Microsoft 365 policy as a CI. Catch conflicts before users do.

Kovira treats every Conditional Access policy, Intune compliance profile, configuration policy, endpoint security baseline, app protection rule, and update ring as its own configuration item. Settings live as queryable rows. Group and user assignments link back to the same Entra directory you already sync into your live CMDB. When two policies set the same option to different values for overlapping audiences, you see it in one click instead of three Microsoft admin portals.

What "policy as a CI" actually means

Every Microsoft 365 policy lands in your CMDB as a typed configuration item, not a JSON blob.

Microsoft 365 policies are intricate objects. A single Intune device compliance policy can carry dozens of individual settings, each with its own enforcement behaviour, and most audit tools store that detail as opaque payloads that are only really inspectable inside Microsoft's own admin centre. Kovira takes the opposite approach. When sync ingests a policy, the policy itself becomes a typed configuration item with name, description, type, platform, state, last-modified timestamp, and clear source attribution.

Every individual setting becomes its own queryable record alongside the policy. That means a question like "which Intune compliance policies require disk encryption?" stops being a manual scroll through screen after screen of Microsoft's UI and becomes a CMDB query against a typed column. The same is true for Conditional Access grant controls, named-location IP ranges, app protection PIN length requirements, and update-ring deferral days.

Group and user assignments are not stored as opaque references. Each include or exclude target links back to the same Entra ID directory records the rest of Kovira already uses. So the Conditional Access policy that excludes the Break-glass admins group is connected to the directory record you already trust, not an identifier floating in a structured payload. Click into the assignment and you see the actual group, its membership type, and (if it is a dynamic group) the rule that decides who is in it.

Policies removed upstream are preserved as archived rather than purged, so historical conflict analysis stays intact even after a policy disappears from the Microsoft admin centre. If a policy reappears later under the same identifier, Kovira reconciles automatically. You get a continuous record of policy state across changes, retirements, and re-introductions, without anyone having to maintain a parallel spreadsheet.

Key capabilities

  • Each policy is a typed CI with attributable source
  • Settings stored as queryable rows, not blobs
  • Assignments linked to live Entra directory records
  • Dynamic-group membership visible alongside the assignment
  • Upstream-deleted policies preserved for audit history
  • One-click navigation between policy, settings, and groups

Conflict detection: the canonical scenario

When two policies fight each other for the same audience, Kovira shows you in one click instead of three Microsoft admin portals.

Microsoft does not warn you when two policies fight each other for the same audience. Two Intune compliance policies can both target the All staff group; one demands minimum iOS 14, the other demands minimum iOS 15. The result on a real user's phone depends on policy ordering, last-modified time, and Intune's own conflict resolution rules, which differ between settings categories. The mismatch is silent until a device falls out of compliance and someone has to reverse-engineer why.

Kovira detects this kind of conflict directly because each setting is queryable on its own. We look across every policy from the same source, find settings that resolve to different values, and surface the ones whose assigned groups actually overlap. The Microsoft 365 Conflicts page lists every finding with deep links into the offending policies, the conflicting values, the categories, and the count of overlapping groups. No probabilistic matching, no machine learning, no false positives caused by treating different audiences as the same audience.

Coverage today spans Conditional Access against Conditional Access, and Intune against Intune within the same channel: compliance, configuration, endpoint security, app protection, app configuration, update rings, and enrollment restrictions. Cross-channel and cross-pillar conflict detection (an Entra ID device-join requirement against an Intune compliance policy, for example) is on the roadmap but intentionally not in v1, because the right answer there usually requires understanding the implicit dependency between policies, which a literal value mismatch does not capture.

Conflict findings are written into your CMDB the same way every other CI relationship is. That means workflow automations can fire on them: a new conflict involving a Conditional Access policy can raise an incident, page the on-call engineer, or post into a Teams channel within seconds of the next sync detecting it. The Conflicts page is for the human review pass; the workflow path is for the cases you have already decided are urgent.

Key capabilities

  • Exact-match findings, not heuristics
  • Group-overlap awareness eliminates false positives
  • Per-setting deep links into both offending policies
  • Conditional Access vs Conditional Access coverage
  • Intune coverage across compliance, configuration, endpoint security, app protection, app configuration, update rings, enrollment restrictions
  • Workflow automations can fire on new conflict findings

Supported policy types

Coverage spans the Entra ID and Intune policy surfaces that account for most real-world audit findings.

Entra ID

Identity and access policies that decide who can sign in, from where, and what they can consent to.

Conditional Access
Every policy with its full top-level conditions, grant controls, and session controls. Sign-in risk, user risk, client app types, platform / location / application / user / group / role include and exclude lists, built-in grant controls, sign-in frequency, persistent browser mode, and Defender for Cloud Apps integration mode are all captured as discrete settings.
Authentication methods
Each method's enabled and disabled state plus its targeting (include and exclude lists, group scoping). Microsoft Authenticator, FIDO2 keys, Windows Hello for Business, certificate-based authentication, and the rest.
Authorization policy
Default user role permissions, allow-invites-from scope, email-verified-user join behaviour, and the legacy MSOL PowerShell block flag.
Named locations
IP-based and country-based named locations, with trusted flag, IP ranges, country lists, and unknown-region behaviour.
Cross-tenant access
The default policy plus per-partner overrides, including B2B collaboration, B2B direct connect, and inbound trust settings (MFA, compliant device, hybrid Azure AD joined device acceptance).
External collaboration
External identities policy: leave behaviour and deletion data-removal flag.
Token lifetime
Token lifetime policies including organization-default flag and the policy definition payload.
App consent
Permission grant policies with includes and excludes for delegated and application permission consent flows.

Intune

Device and application management policies that decide what endpoints look like, what apps are allowed, and how updates roll out.

Device compliance
Per-platform compliance policies (Windows 10 and 11, iOS, Android, macOS) with all top-level scalar settings: password requirements, OS version floors, jailbreak and root detection, device threat protection level, BitLocker and FileVault required, and so on.
Device configuration
Both the legacy device configuration profiles and the modern Settings Catalog profiles, with every individual setting captured for audit and conflict detection.
Endpoint security
Antivirus, firewall, disk encryption, endpoint detection and response, attack surface reduction, account protection, and security baseline intents. Each Microsoft intent maps to a Kovira policy CI; each contained setting maps to a setting row.
App protection (MAM)
Per-platform managed app protection policies: PIN requirements, allowed apps, save-as restrictions, copy-paste rules, screen capture rules, and selective wipe behaviour.
App configuration
Mobile app configuration policies including arbitrary custom settings (preserved as their full structured payload) and targeted mobile-app lists.
Update rings
Windows Update for Business and iOS update configurations: feature update deferral, quality update deferral, automatic update mode, allowed update service.
Enrollment restrictions
Device enrollment configurations including per-platform blocked flags, personal device blocking, and OS version minimums for enrollment.

Designed to never throttle Microsoft

Daily sync cadence, defensive throttling, and bounded cross-tenant concurrency.

Sync runs on a 24-hour cadence per integration, with tenant onboarding times naturally spreading the load across the day. The first sync after connecting an integration starts immediately so the data is visible within minutes, not the next morning.

Every Microsoft Graph call goes through a defensive per-tenant rate limiter that runs comfortably below Microsoft's published throttling ceilings. Throttle responses are honoured the moment they arrive: we wait for exactly as long as Microsoft asks, then retry the same call. We never compound throttling with parallel retries, never queue more requests when Microsoft tells us to slow down, and never give up on the run. The integration is built so that Kovira itself never triggers Microsoft's throttling, and if Microsoft returns one for service-side reasons we cannot predict, the sync responds correctly without operator intervention.

Within a single tenant sync, requests are sequential. Across tenants, concurrency is bounded so a busy hour for one customer cannot affect another. Combined with batch endpoints and projection where Microsoft Graph supports them, this keeps total request volume comfortably under Microsoft's ceilings even on the largest estates we have tested.

Sync guarantees

  • 24-hour cadence per integration
  • Initial sync runs immediately on consent
  • Defensive throttling well under Microsoft's ceilings
  • Throttle responses honoured exactly
  • Sequential per tenant, bounded across tenants
  • Batch endpoints used wherever supported

Security and data handling

Read-only access. Tenant-isolated storage. Vaulted credentials. Full audit log.

Kovira reads from Microsoft Graph; it never writes. The integration only requests read-only permissions for the policy, configuration, group, and user data it needs. Kovira's registration in your Microsoft 365 tenant has no ability to create, modify, or delete any policy. That is a structural guarantee rather than a configuration setting you have to verify.

Synced data lives in your dedicated Kovira workspace, isolated from every other workspace at every layer of the platform. Tenant boundaries are enforced on every record (policies, settings, assignments alike) so cross-tenant access is impossible by design, not by application convention.

Microsoft 365 credentials are held in Kovira's encrypted secrets vault, not in the database. Access tokens are acquired for each sync run and never written to logs. The audit log covers every sync run, conflict finding, and integration configuration change. See the security overview for the broader picture.

Security at a glance

  • Read-only Microsoft Graph access
  • No write capability in any scope
  • Tenant-isolated storage at every layer
  • Credentials in the secrets vault, not the database
  • Tokens scoped to a single sync run
  • Audit log covers sync runs, conflicts, and config changes

Setup

Three steps. The first sync runs automatically once admin consent completes.

  1. 1

    Connect Microsoft 365 in Kovira

    In the Kovira dashboard, open Integrations and click Connect Microsoft 365. Provide the Microsoft tenant domain (for example contoso.onmicrosoft.com) and the Azure app registration's client id.

  2. 2

    Grant admin consent in Microsoft 365

    Microsoft will redirect you to a consent screen listing the read-only permissions Kovira requires. Approve them as a Global Administrator. Consent must come from someone with tenant-wide authority because Conditional Access and Intune permissions require that level.

  3. 3

    Wait a few minutes for the first sync

    The initial sync starts the moment consent completes. Depending on the size of your estate, expect anywhere from one to ten minutes for Conditional Access and Intune policy CIs to appear under Microsoft 365 in your CI list. The Microsoft 365 Conflicts page populates as soon as the first overlapping settings are detected.

Microsoft 365 policy CMDB: frequently asked questions

How sync works, what is tracked, how conflicts are surfaced, and what permissions Kovira asks for.

Does Kovira modify any of my Microsoft 365 policies?

No. The integration only requests read-only access. Kovira cannot create, edit, or delete policies. If a policy needs to change, you change it in Microsoft 365 and the next sync reflects it.

How fresh is the data?

Sync runs every 24 hours per integration. The first sync after connecting runs immediately so the data is visible within minutes. The cadence matches typical Microsoft 365 admin workflows where policies change infrequently and are reviewed before going live.

What happens if Microsoft throttles you?

Kovira honours throttling instructions immediately and waits exactly as long as Microsoft asks before retrying. We never compound throttling with parallel retries, never give up on the run, and never skip a policy because of a throttle. The architecture is designed so that Kovira itself never originates a throttle response.

Which Conditional Access fields are tracked?

All the documented top-level conditions, grant controls, and session controls are captured as discrete settings, including risk levels, client app types, platforms, locations, applications, users, groups, roles, sign-in frequency, persistent browser mode, and integration with Defender for Cloud Apps. If you need deeper decomposition of a particular field, tell us and we will scope it.

Can I see who changed a policy?

Kovira tracks the last-modified timestamp Microsoft provides on every policy. The user identity behind the upstream change lives in Microsoft's own audit log; we link to it rather than duplicate it. Within Kovira, the sync history records every sync that touched the policy.

Do you support B2B or external users?

Group and user assignments are recorded for accounts present in the Entra ID directory we sync. External accounts that have not been added to your Entra directory are skipped during assignment resolution and reconcile automatically once they appear.

How does the integration authenticate?

Kovira uses Microsoft's standard application authentication for unattended integrations, so the sync runs on its 24-hour cadence without needing any user to be signed in. Initial consent must come from a Global Administrator because Conditional Access and Intune permissions require that level.

How are dynamic group assignments handled?

When a Conditional Access or Intune policy targets a dynamic group, the group itself is part of the Entra ID directory Kovira already syncs. The assignment links the policy to the group regardless of how membership is determined; the dynamic membership rule lives on the group record.

Does this affect Microsoft 365 licensing?

No. The integration does not require any Microsoft 365 SKU above what you already need to use Conditional Access (Entra ID P1) or Intune. There is no per-policy or per-call cost from Microsoft for the read APIs the integration uses.

Are deleted policies preserved?

Yes. When a sync detects that a previously synced policy is gone from Microsoft, Kovira marks it as upstream-deleted rather than removing the record. Settings and assignments are preserved so historical conflict analysis stays usable. If the policy reappears later, the marker is cleared.

How do you detect conflicts?

Each setting on each policy is captured as its own queryable record. The Conflicts page surfaces every setting that resolves to different values across policies whose assigned groups overlap, so the same audience does not silently get conflicting instructions. Findings are exact: no probabilistic matching, no machine learning, no false positives from treating different audiences as the same audience.

Do you decode every Intune Settings Catalog setting?

Yes. Every individual setting instance is decomposed into a queryable value with its stable Microsoft definition identifier, serialised value type, category, and display name when Microsoft supplies one. Definition identifiers remain visible when no friendly label is present, so audit and conflict matching never depend on guessed names.

What about Conditional Access nested conditions?

The documented top-level fields are decomposed into individual settings. Deeply nested authentication strengths and custom-control payloads are preserved on the policy record so nothing is lost, and we can decompose specific nested fields on request once we know which ones matter to your audit.

Will sync ever bother my Microsoft tenant?

No configuration is required on the Microsoft side. Kovira runs comfortably below Microsoft's published per-app rate ceilings, throttles itself before Microsoft has to ask, and limits cross-customer concurrency so a busy hour for one workspace cannot affect another. If you ever see a sync run record showing an unusual throttling event, that is operational data we surface to you, not a problem you need to fix.

Be ready to connect Microsoft 365 on launch day

Microsoft 365 integration will be available on Teams, Business, and MSP plans at launch. Register your interest and be ready to connect the moment Kovira goes live.