Vyom Mani Tiwari created RANGER-5683:
----------------------------------------

             Summary: Add Microsoft EntraID (Azure AD) as a UserSync source via 
the Microsoft Graph API
                 Key: RANGER-5683
                 URL: https://issues.apache.org/jira/browse/RANGER-5683
             Project: Ranger
          Issue Type: New Feature
          Components: Ranger
    Affects Versions: 2.8.0
            Reporter: Vyom Mani Tiwari
            Assignee: Vyom Mani Tiwari
             Fix For: 3.0.0


Ranger UserSync currently supports LDAP/AD, Unix, and file-based sources. 
Organizations that use Microsoft EntraID (Azure AD) as their identity provider 
and do not expose LDAP/AD — for example, cloud-native or private-cloud 
deployments where direct LDAP/AD access is restricted or prohibited — have no 
first-class way to synchronize users and groups into Ranger. Today this 
requires custom scripting or intermediary directory infrastructure.

This enhancement adds EntraID as a native UserSync source that pulls users, 
groups, and group memberships directly from the Microsoft Graph API, plugging 
into the existing {{UserGroupSource}} SPI via 
{{{}ranger.usersync.source.impl.class{}}}.

*Proposed Solution*

A new EntraID UserSync source ({{{}EntraIdUserGroupSource{}}}) backed by a 
Microsoft Graph client ({{{}EntraIdGraphClientImpl{}}}) that:
 * Authenticates to Microsoft Entra using the OAuth2 client-credentials flow, 
supporting both client-secret and certificate credentials.
 * Synchronizes users, groups, and memberships via Graph {{/delta}} queries, 
using delta tokens for incremental cycles so only changes are pulled after the 
initial full sync.
 * Handles Graph paging ({{{}@odata.nextLink{}}}), delta-token expiry/resync, 
and throttling (HTTP 429/503 with Retry-After backoff).
 * Supports both DIRECT and TRANSITIVE group-membership modes, with a 
first-sync inline-membership optimization on the DIRECT path to avoid a 
per-group members call.
 * Integrates with the existing sink to add/update principals and to remove 
principals no longer present in the source, keyed by the stable EntraID object 
GUID.

Configuration is supplied through Ranger's existing UserGroupSync configuration 
under a {{ranger.usersync.entraid.*}} namespace, loaded into a typed, 
validated, immutable config object.

*Scope*

In scope: user/group/membership sync (full and incremental), client-secret and 
certificate auth, DIRECT and TRANSITIVE membership, deletion handling, 
paging/throttling/delta-expiry resilience.

Out of scope / follow-ups: server-side attribute-based group filtering (Graph 
{{/delta}} does not support attribute {{{}$filter{}}}; client-side 
post-filtering is a follow-up), and any nested-group flattening beyond what 
TRANSITIVE membership provides.

*Compatibility*

Additive — introduces a new optional source selected via 
{{{}ranger.usersync.source.impl.class{}}}. Existing LDAP/Unix/file sources are 
unaffected. No new third-party runtime dependencies are introduced beyond what 
UserSync already ships.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to