分配 Microsoft Entra 角色
本文内容
本文介绍如何使用 Microsoft Entra 管理中心、Microsoft Graph PowerShell 或 Microsoft Graph API 将 Microsoft Entra 角色分配给用户和组。 还介绍如何在不同范围分配角色,如租户、应用程序注册和管理单元范围。
你可以向用户分配直接和间接角色分配。 如果按组成员身份向用户分配了角色,则在相应组中添加该用户以添加角色分配。 有关详细信息,请参阅使用 Microsoft Entra 组来管理角色分配 。
在 Microsoft Entra ID 中,角色通常分配适用于整个租户。 但是,还可以为不同的资源(例如应用程序注册或管理单元)分配Microsoft Entra 角色。 例如,你可以分配支持管理员角色,以便它仅适用于特定的管理单元,而不是整个租户。 角色分配适用的资源也称为范围。 限制角色分配范围的功能适用于内置角色和自定义角色。 有关范围的详细信息,请参阅 Microsoft Entra ID中 基于角色的访问控制(RBAC)概述。
PIM 中的 Microsoft Entra 角色
如果你有一个Microsoft Entra ID P2 许可证和 Privileged Identity Management (PIM) ,则分配角色时具有其他功能,例如,使用户有资格获得角色分配或定义角色分配的开始和结束时间。 有关在 PIM 中分配Microsoft Entra 角色的信息,请参阅以下文章:
先决条件
有关详细信息,请参阅使用 PowerShell 或 Graph Explorer的先决条件 。
分配租户范围的角色
本部分介绍如何在租户范围分配角色。
按照以下步骤使用 PowerShell 分配 Microsoft Entra 角色。
打开 PowerShell 窗口。 如有必要,请使用 Install-Module 安装 Microsoft Graph PowerShell。 有关详细信息,请参阅 使用 PowerShell 或 Graph 浏览器的先决条件 。
Install-Module Microsoft.Graph -Scope CurrentUser
在 PowerShell 窗口中,使用 Connect-MgGraph 登录到你的租户账户。
Connect-MgGraph -Scopes "RoleManagement.ReadWrite.Directory"
使用 Get-MgUser 获取用户。
$user = Get-MgUser -Filter "userPrincipalName eq 'alice@contoso.com'"
使用 Get-MgGroup 获取可分配角色的组。
$group = Get-MgGroup -Filter "DisplayName eq 'Contoso Helpdesk'"
使用 Get-MgRoleManagementDirectoryRoleDefinition 获取要分配的角色。
若要查看所有内置角色的角色定义 ID 列表,请参阅 Microsoft Entra 内置角色 。
$roleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "displayName eq 'Billing Administrator'"
将租户设置为角色分配的作用域。
$directoryScope = '/'
使用 New-MgRoleManagementDirectoryRoleAssignment 分配角色。
$roleAssignment = New-MgRoleManagementDirectoryRoleAssignment `
-DirectoryScopeId $directoryScope -PrincipalId $user.Id `
-RoleDefinitionId $roleDefinition.Id
$roleAssignment = New-MgRoleManagementDirectoryRoleAssignment `
-DirectoryScopeId $directoryScope -PrincipalId $group.Id `
-RoleDefinitionId $roleDefinition.Id
下面是另一种方法来分配角色。
$params = @{
"directoryScopeId" = "/"
"principalId" = $group.Id
"roleDefinitionId" = $roleDefinition.Id
}
$roleAssignment = New-MgRoleManagementDirectoryRoleAssignment -BodyParameter $params
按照以下说明在 Graph Explorer 中使用 Microsoft 图形 API 分配角色。
登录到 Graph 浏览器 。
使用 用户列表 API 来获取用户。
GET https://graph.microsoft.com/v1.0/users?$filter=userPrincipalName eq 'alice@contoso.com'
使用 List groups API 获取可分配角色的组。
GET https://graph.microsoft.com/v1.0/groups?$filter=displayName eq 'Contoso Helpdesk'
使用 List unifiedRoleDefinitions API 获取想要分配的角色。
若要查看所有内置角色的角色定义 ID 列表,请参阅 Microsoft Entra 内置角色 。
GET https://graph.microsoft.com/v1.0/rolemanagement/directory/roleDefinitions?$filter=displayName eq 'Billing Administrator'
使用 Create unifiedRoleAssignment API 来分配角色。
POST https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments
{
"@odata.type": "#microsoft.graph.unifiedRoleAssignment",
"principalId": "<Object ID of user or group>",
"roleDefinitionId": "<ID of role definition>",
"directoryScopeId": "/"
}
响应
HTTP/1.1 201 Created
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#roleManagement/directory/roleAssignments/$entity",
"id": "<Role assignment ID>",
"roleDefinitionId": "<ID of role definition>",
"principalId": "<Object ID of user or group>",
"directoryScopeId": "/"
}
如果主体或角色定义不存在,则找不到响应。
响应
HTTP/1.1 404 Not Found
分配应用注册范围的角色
默认情况下在租户范围内分配内置角色和自定义角色,以授予对组织中所有应用注册的访问权限。 此外,还可以在单个Microsoft Entra 资源的范围内分配自定义角色和一些相关的内置角色(具体取决于Microsoft Entra 资源的类型)。 这样,用户就有权更新单个应用的凭据和基本属性,而无需创建第二个自定义角色。
本部分介绍如何在应用程序注册范围内分配角色。
请至少以 应用程序开发人员 的身份登录到 Microsoft Entra 管理中心 。
浏览到“标识 ”>“应用程序 ”>“应用注册 ”。
选择应用程序。 可以使用搜索框查找所需的应用。
可能需要选择 所有应用程序 才能查看租户中应用注册的完整列表。
从左侧导航菜单中选择 角色和管理员 ,以查看可通过应用注册分配的所有角色的列表。
选择所需的角色。
提示
此处看不到Microsoft Entra 内置角色或自定义角色的完整列表。 这是预期的。 我们显示了与仅管理应用注册相关的权限的角色。
选择“添加分配” ,然后选择要向其分配此角色的用户或组。
选择“添加” 分配以应用注册为作用域的角色。
按照以下步骤使用 PowerShell 在应用程序范围内分配 Microsoft Entra 角色。
打开 PowerShell 窗口。 如有必要,请使用 Install-Module 安装 Microsoft Graph PowerShell。 有关详细信息,请参阅 使用 PowerShell 或 Graph 浏览器 的先决条件。
Install-Module Microsoft.Graph -Scope CurrentUser
在 PowerShell 窗口中,使用 Connect-MgGraph 登录到你的租户。
Connect-MgGraph -Scopes "Application.Read.All","RoleManagement.Read.Directory","User.Read.All","RoleManagement.ReadWrite.Directory"
使用 Get-MgUser 获取用户。
$user = Get-MgUser -Filter "userPrincipalName eq 'alice@contoso.com'"
若要将角色分配给服务主体而不是用户,请使用 Get-MgServicePrincipal 命令。
使用 Get-MgRoleManagementDirectoryRoleDefinition 获取要分配的角色。
$roleDefinition = Get-MgRoleManagementDirectoryRoleDefinition `
-Filter "displayName eq 'Application Administrator'"
使用 Get-MgApplication 获取要将角色分配的作用域限定到的应用注册。
$appRegistration = Get-MgApplication -Filter "displayName eq 'f/128 Filter Photos'"
$directoryScope = '/' + $appRegistration.Id
使用 New-MgRoleManagementDirectoryRoleAssignment 分配角色。
$roleAssignment = New-MgRoleManagementDirectoryRoleAssignment `
-DirectoryScopeId $directoryScope -PrincipalId $user.Id `
-RoleDefinitionId $roleDefinition.Id
按照这些说明使用 Graph 浏览器 中的 Microsoft Graph API 在应用程序作用域分配角色。
登录到 Graph 浏览器 。
使用 List users API 获取用户。
GET https://graph.microsoft.com/v1.0/users?$filter=userPrincipalName eq 'alice@contoso.com'
使用 List unifiedRoleDefinitions API 获取想要分配的角色。
GET https://graph.microsoft.com/v1.0/rolemanagement/directory/roleDefinitions?$filter=displayName eq 'Application Administrator'
使用 List applications API 获取要将角色分配的作用域限定到的应用程序。
GET https://graph.microsoft.com/v1.0/applications?$filter=displayName eq 'f/128 Filter Photos'
使用 Create unifiedRoleAssignment API 来分配角色。
POST https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments
{
"@odata.type": "#microsoft.graph.unifiedRoleAssignment",
"principalId": "<Object ID of user>",
"roleDefinitionId": "<ID of role definition>",
"directoryScopeId": "/<Object ID of app registration>"
}
响应
HTTP/1.1 201 Created
注意
在此示例中,directoryScopeId
指定为 /<ID>
,与管理单元部分不同。 这是有意的设计。 /<ID>
的范围意味着主体可以管理该Microsoft Entra 对象。 范围 /administrativeUnits/<ID>
表示主体只能管理管理单元的成员(根据分配给主体的角色),而不是管理单元整体。
分配角色并设定管理单元范围
在Microsoft Entra ID 中,若要进行更精细的管理控制,可以分配一个Microsoft Entra 角色,该角色的范围限制为一个或多个 管理单元 。 在管理单元范围内分配Microsoft Entra 角色时,角色权限仅适用于管理单元本身的成员,并且不适用于租户范围的设置或配置。
例如,在管理单元范围内分配组管理员角色的管理员可以管理属于管理单元成员的组,但他们不能管理租户中的其他组。 它们也不能管理与组相关的租户级别设置,例如过期策略或组命名策略。
本部分介绍如何分配管理单元范围的 Microsoft Entra 角色。
先决条件
每个管理单元管理员需要配备 Microsoft Entra ID P1 或 P2 许可证。
为管理单元成员提供的 Microsoft Entra ID 免费许可证
特权角色管理员
使用 PowerShell 时的 Microsoft Graph PowerShell 模块
将 Graph 浏览器用于 Microsoft Graph API 时需要管理员同意
有关详细信息,请参阅 使用 PowerShell 或 Graph 浏览器的先决条件 。
可在管理单位范围分配的角色
可为以下 Microsoft Entra 角色分配管理单元范围。 此外,只要自定义角色的权限至少包含一个与用户、组或设备相关的权限,就可以将任何 自定义角色 分配在管理单元范围内。
角色
描述
身份验证管理员
仅可访问并查看、设置和重置分配的管理单元中的非管理员用户的身份验证方法信息。
云设备管理员
在 Microsoft Entra ID 中对设备进行管理的权限有限。
组管理员
只能在分配的管理单元中管理组的所有方面。
支持人员管理员
只能为分配的管理单元中的非管理员重置密码。
许可证管理员
只能在管理单元内分配、删除和更新许可证分配。
密码管理员
只能为分配的管理单元中的非管理员重置密码。
打印机管理员
可以管理打印机和打印机连接器。 有关详细信息,请参阅在通用打印中委派打印机管理 。
特权身份验证管理员
可以访问以查看、设置和重置任何用户(管理员或非管理员)的身份验证方法信息。
SharePoint 管理员
只能在分配的管理单元中管理Microsoft 365 个组。 对于与管理单元中Microsoft 365 组关联的 SharePoint 网站,还可以使用 Microsoft 365 管理中心更新网站属性(网站名称、URL 和外部共享策略)。 无法使用 SharePoint 管理中心或 SharePoint API 来管理网站。
Teams 管理员
只能在分配的管理单元中管理Microsoft 365 个组。 可以在 Microsoft 365 管理中心内管理与指定管理单元中的组关联的团队成员。 无法使用 Teams 管理中心。
Teams 设备管理员
可以在 Teams 认证设备上执行管理相关任务。
用户管理员
可以管理用户和组的所有方面,包括仅为分配的管理单元中的有限管理员重置密码。 当前无法管理用户的个人资料照片。
<自定义角色>
可以根据自定义角色的定义,执行应用于用户、组或设备的操作。
当与管理单元范围一起分配时,某些角色权限仅适用于非管理员用户。 换言之,仅当用户没有管理员角色时,管理单元范围的支持管理员 才能在管理单元中重置这些用户的密码。 当操作的目标是另一个管理员时,以下权限列表受到限制:
读取和修改用户身份验证方法,或重置用户密码
修改敏感用户属性,如电话号码、备用电子邮件地址或打开授权(OAuth)密钥
删除或还原用户帐户
可在管理单位范围分配的安全主体
可以将以下安全主体分配给具有管理单元范围的角色:
用户
Microsoft Entra 可分配角色的组
服务主体
服务主体和来宾用户
服务主体和来宾用户将无法使用范围为管理单元的角色分配,除非他们还被分配了读取对象的相应权限。 这是因为服务主体和来宾用户默认情况下不会收到目录读取权限,这是执行管理操作所必需的。 若要使服务主体或来宾用户能够使用作用域为管理单元的角色分配,必须分配租户范围内的目录读取者 角色(或其他角色,该角色包括读取权限)。
目前无法将目录读取权限分配给特定的管理单元。 有关用户的默认权限的详细信息,请参阅 默认用户权限 。
分配管理单元范围的角色
本部分介绍如何在管理单元范围内分配角色。
至少以特权角色管理员 身份登录到 Microsoft Entra 管理中心 。
浏览到“标识”>“角色和管理员”>“管理单元”。
选择一个管理单元。
Microsoft Entra ID 中管理单元的
从左侧导航菜单中选择 角色和管理员 ,以查看可在管理单元上分配的所有角色的列表。
选择所需的角色。
提示
此处看不到Microsoft Entra 内置角色或自定义角色的完整列表。 这是预期的。 我们展示了哪些角色具有与管理单元中支持的对象相关的权限。 若要查看管理单元中支持的对象列表,请参阅Microsoft Entra ID中的 管理单元。
选择“添加分配” ,然后选择要向其分配此角色的用户或组。
选择“添加” 分配以管理单元为作用域的角色。
按照以下步骤使用 PowerShell 在管理单元范围内分配 Microsoft Entra 角色。
打开 PowerShell 窗口。 如有必要,请使用 Install-Module 安装 Microsoft Graph PowerShell。 有关详细信息,请参阅使用 PowerShell 或 Graph Explorer 的先决条件 。
Install-Module Microsoft.Graph -Scope CurrentUser
在 PowerShell 窗口中,使用 Connect-MgGraph 登录您的租户。
Connect-MgGraph -Scopes "Directory.Read.All","RoleManagement.Read.Directory","User.Read.All","RoleManagement.ReadWrite.Directory"
使用 Get-MgUser 获取用户。
$user = Get-MgUser -Filter "userPrincipalName eq 'alice@contoso.com'"
使用 Get-MgRoleManagementDirectoryRoleDefinition 获取要分配的角色。
$roleDefinition = Get-MgRoleManagementDirectoryRoleDefinition `
-Filter "displayName eq 'User Administrator'"
使用 Get-MgDirectoryAdministrativeUnit 获取要将角色分配的作用域限定到的管理单元。
$adminUnit = Get-MgDirectoryAdministrativeUnit -Filter "displayName eq 'Seattle Admin Unit'"
$directoryScope = '/administrativeUnits/' + $adminUnit.Id
使用 New-MgRoleManagementDirectoryRoleAssignment 分配角色。
$roleAssignment = New-MgRoleManagementDirectoryRoleAssignment `
-DirectoryScopeId $directoryScope -PrincipalId $user.Id `
-RoleDefinitionId $roleDefinition.Id
按照这些说明使用 Graph 浏览器 中的 Microsoft Graph API 在管理单元作用域分配角色。
使用 Create unifiedRoleAssignment API 分配角色
登录到 Graph 浏览器 。
使用 List users API 获取用户。
GET https://graph.microsoft.com/v1.0/users?$filter=userPrincipalName eq 'alice@contoso.com'
使用 List unifiedRoleDefinitions API 获取想要分配的角色。
GET https://graph.microsoft.com/v1.0/rolemanagement/directory/roleDefinitions?$filter=displayName eq 'User Administrator'
使用列出 administrativeUnits API 获取要将角色分配的作用域限定到的管理单元。
GET https://graph.microsoft.com/v1.0/directory/administrativeUnits?$filter=displayName eq 'Seattle Admin Unit'
使用 Create unifiedRoleAssignment API 分配角色。
POST https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments
{
"@odata.type": "#microsoft.graph.unifiedRoleAssignment",
"principalId": "<Object ID of user>",
"roleDefinitionId": "<ID of role definition>",
"directoryScopeId": "/administrativeUnits/<Object ID of administrative unit>"
}
响应
HTTP/1.1 201 Created
如果不支持该角色,则响应会显示为请求错误。
HTTP/1.1 400 Bad Request
{
"odata.error":
{
"code":"Request_BadRequest",
"message":
{
"message":"The given built-in role is not supported to be assigned to a single resource scope."
}
}
}
注意
在此示例中,directoryScopeId
指定为 /administrativeUnits/<ID>
,而不是 /<ID>
。 这是默认设置。 范围 /administrativeUnits/<ID>
表示主体可以管理管理单元的成员(基于分配给主体的角色),而不是管理单元本身。 /<ID>
的范围意味着主体可以管理该Microsoft Entra 对象本身。 应用注册部分中会显示范围为 /<ID>
,因为应用注册范围的角色授予用于管理对象本身的特权。
使用“添加 scopedRoleMember API”分配角色
也可以使用添加 scopedRoleMember API 分配一个限定为管理单元范围的角色。
请求
POST /directory/administrativeUnits/{admin-unit-id}/scopedRoleMembers
Body
{
"roleId": "roleId-value",
"roleMemberInfo": {
"id": "id-value"
}
}
后续步骤