如何在Entra中创建仅含管理员角色用户的动态组及最佳实践
在Microsoft Entra中创建仅包含管理员角色用户的动态组
可行性说明
可以实现。Microsoft Entra支持基于用户角色分配属性的动态组规则,不过默认用户属性中没有直接的"是否为管理员"标识,需要通过角色ID构建筛选规则,或者借助扩展属性实现更灵活的配置。
最佳实践方案(原生Microsoft Entra实现)
1. 直接使用角色ID构建动态组规则
这是最直接的原生方案,无需额外同步操作:
- 操作步骤:
- 登录Microsoft Entra管理中心,进入「组」>「新建组」。
- 组类型选择「动态用户」,填写组名称、描述后,点击「动态成员规则」编辑框。
- 输入基于角色ID的规则,示例规则(包含全局管理员和Exchange管理员):
user.assignedRoles -any (assignedRole.id -eq '62e90394-69f5-4237-9190-012177145e10' or assignedRole.id -eq 'f2ef992c-3afb-46b9-b7cf-a126ee74c451') - 点击「验证规则」确认语法正确,然后保存组配置,系统会自动同步符合条件的用户。
- 关键注意事项:
- 你需要拥有「全局管理员」或「组管理员」权限才能创建动态组。
- 角色ID可通过Microsoft Graph API获取:调用
GET /directoryRoles即可返回所有内置/自定义角色的ID。 - 规则支持多个角色ID的
or/and组合,可根据需求调整。
2. 扩展属性同步方案(适用于自定义角色或复杂筛选)
如果需要针对自定义管理员角色,或者需要更易读的筛选条件,可以先将用户的角色状态同步到用户扩展属性,再基于该属性创建动态组:
- 操作步骤:
- 使用PowerShell或Graph API定期同步管理员用户的标识到扩展属性,示例PowerShell脚本:
# 连接到Microsoft Graph Connect-MgGraph -Scopes "Directory.Read.All","User.ReadWrite.All" # 定义需要同步的管理员角色ID列表 $targetRoleIds = @("62e90394-69f5-4237-9190-012177145e10", "自定义角色ID") # 获取所有目标角色的用户并去重 $adminUsers = $targetRoleIds | ForEach-Object { Get-MgDirectoryRoleMember -DirectoryRoleId $_ } | Select-Object -Unique Id # 给管理员用户设置扩展属性(替换yourtenantid为你的租户ID) foreach ($user in $adminUsers) { Update-MgUser -UserId $user.Id -AdditionalProperties @{"extension_yourtenantid_isAdmin" = "True"} } # 非管理员用户可以设置为False(可选) $allUsers = Get-MgUser -All $true $nonAdminUsers = $allUsers | Where-Object { $_.Id -notin $adminUsers.Id } foreach ($user in $nonAdminUsers) { Update-MgUser -UserId $user.Id -AdditionalProperties @{"extension_yourtenantid_isAdmin" = "False"} } - 创建动态组时,规则设置为:
user.extension_yourtenantid_isAdmin -eq 'True'
- 使用PowerShell或Graph API定期同步管理员用户的标识到扩展属性,示例PowerShell脚本:
- 优势:规则更简洁,便于后续维护和扩展。
第三方实现方法
1. PowerShell脚本+定期任务(静态组同步)
如果动态组的规则限制无法满足需求(比如需要跨租户同步),可以用脚本定期同步管理员用户到静态组:
- 示例脚本:
Connect-MgGraph -Scopes "Group.ReadWrite.All","Directory.Read.All" # 获取目标静态组 $targetGroup = Get-MgGroup -Filter "displayName eq 'Admin Exclusive Group'" # 定义需要包含的管理员角色ID $adminRoleIds = @("62e90394-69f5-4237-9190-012177145e10", "f2ef992c-3afb-46b9-b7cf-a126ee74c451") # 获取所有管理员用户并去重 $adminUsers = $adminRoleIds | ForEach-Object { Get-MgDirectoryRoleMember -DirectoryRoleId $_ } | Select-Object -Unique Id # 清除组内现有成员 $currentMembers = Get-MgGroupMember -GroupId $targetGroup.Id -All $true foreach ($member in $currentMembers) { Remove-MgGroupMemberByRef -GroupId $targetGroup.Id -DirectoryObjectId $member.Id } # 添加新的管理员用户 foreach ($user in $adminUsers) { New-MgGroupMemberByRef -GroupId $targetGroup.Id -DirectoryObjectId $user.Id } - 可以将脚本部署到Azure自动化账户或Windows任务计划,定期执行(比如每天一次)。
2. 第三方IAM工具(如Okta、OneLogin)
主流第三方IAM平台都支持与Microsoft Entra集成,可通过API拉取Entra的角色分配信息,然后创建自定义组并自动同步管理员用户:
- 核心逻辑:配置平台与Entra的API集成,设置规则筛选拥有管理员角色的用户,自动加入指定组。具体操作参考对应工具的官方配置文档。
内容的提问来源于stack exchange,提问作者lethalzoroTTV
相关产品推荐
相关产品推荐

