使用 PIM 为Microsoft Entra角色 API 分配特权角色

Privileged Identity Management (PIM) 通过限制访问处于活动状态的时间、管理访问范围以及提供特权访问的可审核日志来帮助组织降低与特权访问相关的风险。 特权访问权限通常通过可分配角色的组或管理员角色授予,用于管理目的。

Contoso 希望通过安全组向用户分配Microsoft Entra角色来委托某些管理功能。 公司分配资格,而不是永久处于活动状态的特权角色。 此方法之所以有效,是因为:

  • 删除或添加组成员也会删除或添加管理员。
  • 组成员继承角色分配。 可以向组分配更多角色,而不是直接向单个用户分配角色。
  • 分配资格而不是永久活动权限会强制实施 实时访问,从而授予执行特权任务的临时权限。 当组成员需要特权时,他们会暂时激活其分配。 所有角色激活都是可审核的。

可以通过两种方式通过组对角色资格进行建模:

  • 向组授予永久角色分配,并使主体符合该组的条件。 在此方案中,组成员激活其组成员身份以获取活动角色分配。
  • 向组授予符合条件的角色分配,并使主体成为该组的永久成员。 在此方案中,组成员激活其角色分配以获取权限。

在本教程中,你将了解如何:

  • 创建可分配角色的安全组。
  • 使可分配角色的安全组符合特权角色的条件。
  • 通过激活用户的合格分配,向用户授予实时访问权限。

先决条件

若要完成本教程,需要:

  • 具有 Microsoft Entra ID P2 或 Microsoft Entra ID 治理 许可证的Microsoft Entra租户
  • 使用至少具有特权角色管理员角色的帐户登录的 API 客户端(例如 Graph 资源管理器
  • 启用了 MFA 并有权访问其Microsoft Authenticator 应用的测试用户
  • 委托的权限:
    • Group.ReadWrite.All 创建组
    • RoleManagement.ReadWrite.Directory ,使组可分配角色,并配置和管理符合条件的和活动角色分配。 应向租户中的所有用户授予此权限。

步骤 1:创建可分配角色的安全组

将自己分配为组所有者,并将自己和测试用户添加为成员。

请求:创建可分配角色的组

POST https://graph.microsoft.com/v1.0/groups
Content-type: application/json

{
    "description": "IT Helpdesk to support Contoso employees",
    "displayName": "IT Helpdesk (User)",
    "mailEnabled": false,
    "mailNickname": "userHelpdesk",
    "securityEnabled": true,
    "isAssignableToRole": true,
    "owners@odata.bind": [
        "https://graph.microsoft.com/v1.0/users/e2330663-f949-41b5-a3dc-faeb793e14c6"
    ],
    "members@odata.bind": [
        "https://graph.microsoft.com/v1.0/users/e2330663-f949-41b5-a3dc-faeb793e14c6",
        "https://graph.microsoft.com/v1.0/users/d9771b4c-06c5-491a-92cb-3aa4e225a725"
    ]
}

响应

注意:为了提高可读性,可能缩短了此处显示的响应对象。

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups/$entity",
    "id": "1189bbdd-1268-4a72-8c6d-6fe77d28f2e3",
    "description": "IT Helpdesk to support Contoso employees",
    "displayName": "IT Helpdesk (User)",
    "groupTypes": [],
    "isAssignableToRole": true,
    "mailEnabled": false,
    "mailNickname": "userHelpdesk",
    "securityEnabled": true
}

步骤 2:创建 unifiedRoleEligibilityScheduleRequest

将安全组分配为符合 用户管理员 角色的条件,为期一年。 将符合条件的分配范围限定为整个租户。 租户级范围允许用户管理租户中的所有用户,但特权较高的用户(如全局管理员)除外。

请求

POST https://graph.microsoft.com/v1.0/roleManagement/directory/roleEligibilityScheduleRequests
Content-type: application/json

{
    "action": "AdminAssign",
    "justification": "Assign User Admin eligibility to IT Helpdesk (User) group",
    "roleDefinitionId": "fe930be7-5e62-47db-91af-98c3a49a38b1",
    "directoryScopeId": "/",
    "principalId": "1189bbdd-1268-4a72-8c6d-6fe77d28f2e3",
    "scheduleInfo": {
        "startDateTime": "2025-03-21T11:06:00Z",
        "expiration": {
            "endDateTime": "2026-03-21T00:00:00Z",
            "type": "AfterDateTime"
        }
    }
}

响应

注意:为了提高可读性,可能缩短了此处显示的响应对象。

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#roleManagement/directory/roleEligibilityScheduleRequests/$entity",
    "id": "12956159-24b8-4619-b9ea-8ce21f81a38f",
    "status": "Provisioned",
    "createdDateTime": "2025-03-21T11:07:23.4563591Z",
    "completedDateTime": "2025-03-21T11:07:24.8573295Z",
    "action": "adminAssign",
    "principalId": "1189bbdd-1268-4a72-8c6d-6fe77d28f2e3",
    "roleDefinitionId": "fe930be7-5e62-47db-91af-98c3a49a38b1",
    "directoryScopeId": "/",
    "targetScheduleId": "12956159-24b8-4619-b9ea-8ce21f81a38f",
    "justification": "Assign User Admin eligibility to IT Helpdesk (User) group",
    "createdBy": {
        "application": null,
        "device": null,
        "user": {
            "id": "e2330663-f949-41b5-a3dc-faeb793e14c6"
        }
    },
    "scheduleInfo": {
        "startDateTime": "2025-03-21T11:07:24.8573295Z",
        "expiration": {
            "type": "afterDateTime",
            "endDateTime": "2026-03-21T00:00:00Z",
            "duration": null
        }
    },
    "ticketInfo": {}
}

步骤 3:确认用户的当前角色分配

组成员现在有资格获得用户管理员角色,但在激活该角色之前不能使用该角色。 以下请求确认用户现有的活动角色分配。 请求返回空集合。

GET https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments?$filter=principalId eq 'd9771b4c-06c5-491a-92cb-3aa4e225a725'

步骤 4:用户自行激活其符合条件的分配

事件票证 CONTOSO: Security-012345 要求使所有员工刷新令牌失效。 作为 IT 支持人员成员,Aline 希望解决此任务。

在手机上启动 Authenticator 应用,并打开 Aline Dupuy 的帐户。

以 Aline 身份登录到 Graph 资源管理器。 以下请求演示如何激活用户管理员角色五小时。

请求

若要激活角色,请 roleAssignmentScheduleRequests 调用终结点。 在此请求中,作 UserActivate 允许激活符合条件的分配。

  • 对于 principalId,请提供 (Aline) ID 的值。
  • roleDefinitionId 是你有资格获得的角色的 ID,在本例中为“用户管理员”角色。
  • 输入票证系统的详细信息,该票证系统提供了激活请求的可审核理由。
POST https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignmentScheduleRequests
Content-type: application/json

{
    "action": "SelfActivate",
    "principalId": "d9771b4c-06c5-491a-92cb-3aa4e225a725",
    "roleDefinitionId": "fe930be7-5e62-47db-91af-98c3a49a38b1",
    "directoryScopeId": "/",
    "justification": "Need to invalidate all app refresh tokens for Contoso users.",
    "scheduleInfo": {
        "startDateTime": "2025-03-21T11:46:00.000Z",
        "expiration": {
            "type": "AfterDuration",
            "duration": "PT5H"
        }
    },
    "ticketInfo": {
        "ticketNumber": "CONTOSO:Security-012345",
        "ticketSystem": "Contoso ICM"
    }
}

响应

注意:为了提高可读性,可能缩短了此处显示的响应对象。

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#roleManagement/directory/roleAssignmentScheduleRequests/$entity",
    "id": "fdde3804-2cd0-4349-b1f6-674927c94f0b",
    "status": "Provisioned",
    "createdDateTime": "2025-03-21T11:46:41.9645736Z",
    "completedDateTime": "2025-03-21T11:46:42.4165908Z",
    "action": "selfActivate",
    "principalId": "d9771b4c-06c5-491a-92cb-3aa4e225a725",
    "roleDefinitionId": "fe930be7-5e62-47db-91af-98c3a49a38b1",
    "directoryScopeId": "/",
    "isValidationOnly": false,
    "targetScheduleId": "fdde3804-2cd0-4349-b1f6-674927c94f0b",
    "justification": "Need to invalidate all app refresh tokens for Contoso users.",
    "createdBy": {
        "user": {
            "id": "d9771b4c-06c5-491a-92cb-3aa4e225a725"
        }
    },
    "scheduleInfo": {
        "startDateTime": "2025-03-21T11:46:42.4165908Z",
        "expiration": {
            "type": "afterDuration",
            "endDateTime": null,
            "duration": "PT5H"
        }
    },
    "ticketInfo": {
        "ticketNumber": "CONTOSO:Security-012345",
        "ticketSystem": "Contoso ICM"
    }
}

步骤 5:确认角色分配

可以通过运行以下请求来确认分配。 响应对象返回新激活的角色分配,其状态设置为 ProvisionedGranted。 使用新权限,在分配处于活动状态的五小时内执行任何允许的作。 五小时后,活动分配将过期,但通过 IT 支持 (用户) 组中的成员身份,你有资格获得用户管理员角色。

GET https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignmentScheduleRequests/filterByCurrentUser(on='principal')?$expand=roleDefinition

步骤 6:清理资源

以特权角色管理员身份登录并删除为本教程创建的资源。

撤销组的角色资格

请求

POST https://graph.microsoft.com/v1.0/roleManagement/directory/roleEligibilityScheduleRequests
Content-type: application/json

{
    "action": "AdminRemove",
    "principalId": "1189bbdd-1268-4a72-8c6d-6fe77d28f2e3",
    "roleDefinitionId": "fe930be7-5e62-47db-91af-98c3a49a38b1",
    "directoryScopeId": "/"
}

响应

注意:为了提高可读性,可能缩短了此处显示的响应对象。

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#roleManagement/directory/roleEligibilityScheduleRequests/$entity",
    "id": "749ebf39-ffa9-4f43-aaaf-58e0d41f9efc",
    "status": "Revoked",
    "createdDateTime": "2025-03-21T12:03:14.551954Z",
    "action": "adminRemove",
    "principalId": "1189bbdd-1268-4a72-8c6d-6fe77d28f2e3",
    "roleDefinitionId": "fe930be7-5e62-47db-91af-98c3a49a38b1",
    "directoryScopeId": "/",
    "createdBy": {
        "user": {
            "displayName": null,
            "id": "e2330663-f949-41b5-a3dc-faeb793e14c6"
        }
    }
}

删除 IT 支持 (用户) 组

请求会返回 204 No Content 响应代码。

DELETE https://graph.microsoft.com/v1.0/groups/d9771b4c-06c5-491a-92cb-3aa4e225a725

总结

本教程介绍了如何使用 PIM API 在 Microsoft Entra ID 中管理特权角色分配。

  • 可以向组分配活动角色,并使用组 API 的 PIM 使成员有资格加入组,而不是使组符合特权角色的条件。
  • 角色激活需要 MFA。 可以在Microsoft Entra角色设置中更改此要求。
  • 还可以配置:
    • 角色激活的最长允许持续时间。
    • 激活角色是否需要理由和票证信息。