A Step-by-Step Guide to Implementing Entra ID Groups

Chris Singlemann
/
Go-to-market

In our first post on structuring Entra ID groups, we focused on the design of a system and understanding why a two-tier group model works for most organizations. We recommend you read that post first to understand the platform constraints that force your hand, and the architectural patterns that actually scale inside Microsoft Entra ID.

Most teams stall because they try to redesign everything at once, fear breaking existing access controls, or underestimate how many hidden dependencies live in their tenant. The goal here isn’t a forklift migration or a pristine greenfield model. It’s a low-risk rollout you can apply incrementally, validate as you go, and expand without disrupting users.

1. Inventory and classify access

Before creating any groups, map your access landscape:

  • List all enterprise applications, their roles, and who should have access
  • Document Azure subscriptions, resource groups, and RBAC roles
  • Identify license SKUs and which populations need them
  • Note Conditional Access requirements (MFA for executives, compliant devices for HR apps)

Think of this as building a decision tree: For each resource, what combination of attributes determines who needs access? Document this in a matrix—it doesn't need to be complex; a spreadsheet like this works fine:

Table 1
Resource Role/Access Level Department Location Other Criteria
Salesforce Read-only Sales, Marketing All Employment Type = Employee
Salesforce Admin Sales All Job Title contains "Manager"
Azure Sub: Production
Contributor Engineering, SRE All -
M365 E3 License
Base access Sales, Marketing, Support All -

This matrix becomes your implementation guide—each row represents an entitlement group, each criterion column points to a population group.

2. Create Tier A Population groups

Let's build out the population groups that map to your matrix. Start with the most stable, well-populated attributes in your directory—department and country are usually reliable. Job titles change frequently and custom extension attributes might not be consistently filled, so avoid those initially.

Using the matrix example above, you'd create groups like:

Create dynamic user groups for departments:

POP-Dept-Engineering: user.department -eq "Engineering"

POP-Dept-Finance: user.department -eq "Finance"

POP-Dept-Marketing: user.department -eq "Marketing"

Create dynamic user groups for locations:

POP-Country-US: user.country -eq "United States"

POP-Country-Canada: user.country -eq "Canada"  

POP-Country-UK: user.country -eq "United Kingdom"

Create dynamic device groups for compliance:

POP-Device-Compliant-Windows: device.deviceOSType -eq "Windows" -and device.isCompliant -eq true

POP-Device-Compliant-iOS: device.deviceOSType -eq "iOS" -and device.isCompliant -eq true

A critical constraint to remember: You cannot combine memberOf conditions with other dynamic rule criteria. If you need to filter population groups further (for example, "Sales department AND employee type is Contractor"), create a separate population group—POP-Dept-Sales-Contractors—rather than trying to layer conditions in the entitlement group.

3. Create Tier B Entitlement groups per resource role

For each application role, create a dynamic memberOf group that unions the relevant population groups (up to 50 sources):

ENT-App-Workday-HRAdmin

  Rule: user.memberof -any (group.objectId -in

['<POP-Dept-HR-ObjectId>','<POP-Role-Manager-ObjectId>'])

ENT-Azure-Sub-Production-Contributor  

  Rule: user.memberof -any (group.objectId -in

['<POP-Dept-Engineering-ObjectId>','<POP-Dept-SRE-ObjectId>'])

For licensing, create dedicated ENT-LIC groups that union populations:

ENT-LIC-M365-E3-Base

  Rule: user.memberof -any (group.objectId -in

['<POP-Dept-Sales-ObjectId>','<POP-Dept-Marketing-ObjectId>','<POP-Dept-Support-ObjectId>'])

For edge cases that don't fit population rules (e.g., an executive who needs cross-departmental access, a contractor with a unique temporary requirement), create Assigned membership entitlement groups rather than trying to force-fit them into dynamic rules. Document why these exceptions exist (the business justification matters during audits) and put them on your quarterly Access Review schedule.

4. Assign resources to Entitlement groups

With your population and entitlement groups in place, the final step is connecting them to the actual resources they govern—applications, Azure subscriptions, and licenses.

  • Enterprise applications: Navigate to the app → Users and groups → Add user/group → select your ENT group → assign the appropriate app role. 
    • Reminder: Nested groups do NOT grant access; only direct members (or members flattened via memberOf) will receive access.
  • Azure RBAC: Assign roles at the narrowest scope possible. For production workloads, assign Reader/Contributor/Owner to ENT groups at the resource group level rather than the user/subscription level. This minimizes blast radius.
  • Group-based licensing: Navigate to Licenses → Select license → Licensed groups → assign your ENT-LIC group. Configure service plan toggles at the group level (e.g., disable Exchange Online within E3 if users don't need email).

5. Define and enforce naming

Consistent naming is the difference between governable groups and chaos.

Example convention:

[Type]-[Category]-[Resource]-[Role]

POP-Dept-Engineering         (Population by department)

POP-Country-Canada           (Population by location)

ENT-App-Salesforce-Admin     (Entitlement for app role)

ENT-Azure-Sub123-Contributor (Entitlement for Azure RBAC)

ENT-LIC-M365-E5-Executive    (Entitlement for licensing)

For Microsoft 365 groups, Entra ID's naming policy feature gives you automated enforcement. Configure prefix/suffix patterns and blocked words under Groups → Naming policy. Set it once and new M365 groups automatically conform.

Security groups are trickier since naming policies don't apply to them. The best approach is to document your conventions clearly (include them in your IAM runbooks), train anyone who creates groups, and schedule regular audits. A quarterly PowerShell or Microsoft Graph export that flags non-conforming names catches drift before it becomes chaos.

6. Protect privileged access

For Entra ID roles (Global Administrator, User Administrator, etc.), use role-assignable groups managed through Privileged Identity Management (PIM).

Role-assignable groups come with intentional restrictions designed to prevent privilege escalation:

  • They must be created with isAssignableToRole set to true—an immutable property you can't change later
  • They're limited to 500 per tenant, must use Assigned (not dynamic) membership, and can't nest within other groups
  • Only Privileged Role Administrators or Global Administrators can manage them, which is by design

The real power comes from pairing these groups with Privileged Identity Management. Rather than granting permanent access to sensitive roles, make the groups eligible for time-bound activation. When someone needs User Administrator privileges, they request activation, provide business justification, get approval (if configured), and receive eight hours of access. When time expires, access revokes automatically—no one needs to remember to clean up permissions.

Example:

PRIV-EntraRole-UserAdministrator-Eligible (role-assignable group)

  Assigned membership: [list of approved individuals]

  Entra ID role: User Administrator (eligible assignment via PIM)

7. Delegate and govern

For large organizations, delegate group management by region or division using Administrative Units (AUs).

How AUs scope delegation: Adding a group to an AU allows scoped admins (assigned roles at the AU level) to manage the group object—rename it, change settings, etc. However, adding a group to an AU does NOT automatically scope management of the users inside that group unless those users are also added to the AU.

Example: To let the EMEA IT team manage all EMEA users and their groups:

Create AU-Region-EMEA

Add all EMEA users and all EMEA groups to the AU

Assign EMEA IT staff the User Administrator role scoped to AU-Region-EMEA

Access Reviews turn "who should still have this access?" from an annual fire drill into a rolling process. Configure recurring reviews—monthly for high-risk groups, quarterly for standard entitlements—and assign the right reviewers. Group owners or resource owners know who legitimately needs access better than central IT does. Members who aren't re-certified drop from the group automatically.

For more complex scenarios (e.g., contractor onboarding that requires five different app accesses, B2B guest users who need time-limited project access) Entitlement Management packages everything into access packages with built-in approval workflows and expiration dates. Requestors get everything they need in one approval, and access revokes automatically when the package expires.

8. Validate against limits and tokens

Before going live, audit your design against Entra ID's limits:

  • Check user group counts vs the 2,048 threshold: Query high-privilege users and ensure none are in >2,048 groups (direct + nested). Users near this limit will hit Conditional Access and service failures.
  • Assess token claim overage risk for apps: For apps using groups claims, ensure the expected user populations are in <200 groups (JWT) or <150 groups (SAML). If not, either refactor to use app-specific role claims instead of groups, or ensure the app is coded to handle overage by querying Microsoft Graph.
  • Dynamic group quota: With a maximum of 15,000 dynamic groups per tenant—and only 500 of those can be memberOf groups—it's worth documenting your current usage early. If you're approaching these limits, you'll need to consolidate or consider alternative approaches like application-specific role claims.

If you're approaching limits, consider using application-specific role claims (where apps read roles assigned directly within Entra ID rather than group membership) or reducing the number of groups users belong to by consolidating entitlement groups.

Bringing it all together

A well-structured Entra ID group architecture isn't about perfection—it's about designing for change. Departments reorganize. Applications come and go. Compliance requirements evolve. The two-tier model (population groups feeding entitlement groups via dynamic memberOf rules) gives you the flexibility to respond to these changes without manually touching hundreds of user objects.

Start small: pick one high-value application and implement the full pattern. Create the population groups that define eligibility, build the entitlement group that grants access, assign the app to the entitlement group, and validate that users receive access. Once proven, scale the pattern across your environment.

Invest in governance from the start: 

  • Enforce naming conventions
  • Review role-assignable groups monthly
  • Run Access Reviews quarterly
  • Document exceptions. 

Then, when the next audit or compliance review arrives, you'll have answers backed by data instead of shrugged shoulders and spreadsheets.

This architecture isn't static. As you learn what works and what doesn't in your specific environment, refine the pattern. The goal is predictable, auditable access management that scales as your organization grows, and that's worth the upfront investment.