在大型环境中,当员工离开组织时,并不总是会删除用户帐户。 作为 IT 管理员,你希望检测和解决这些过时的用户帐户,因为它们会带来安全风险。
本文介绍了在 Microsoft Entra ID 中处理过时用户帐户的方法。
备注
本文仅适用于在 Microsoft Entra ID 中查找非活动用户帐户。 它不适用于在 Azure AD B2C 中查找非活动帐户。
- 若要使用 Microsoft Graph 访问
lastSuccessfulSignInDateTime
属性,需要Microsoft Entra ID P1 或 P2 许可证。
- 需要向应用授予以下Microsoft Graph 权限:
- AuditLog.Read.All
- User.Read.All
- 报告读取者是访问活动日志所需的最低特权角色。
非活动帐户是组织成员获取对资源的访问权限时不再需要的用户帐户。 非活动帐户的一个关键特点是在一段时间未使用它来登录到你的环境。 由于非活动帐户与登录活动相关联,因此可以使用帐户上次尝试登录时的时间戳来检测非活动帐户。
此方法的难点在于如何界定一段时间在你的环境中的意义。 例如,用户可能由于度假而在一段时间内未登录到环境。 你需要考虑未登录到你的环境的所有合法原因。 在许多组织中,非活动用户帐户的合理窗口介于 90 到 180 天之间。
上次登录日期可以提供关于用户是否仍需要访问资源的潜在见解。 它有助于确定是否仍需要组成员身份或应用访问权限,或者是否可以将其删除。 对于外部用户管理,可以确定外部用户是否仍在租户中处于活动状态或应删除。
可以使用 Microsoft Entra 管理中心或 Microsoft 图形 API 查找非活动用户帐户。 虽然没有非活动用户帐户的内置报表,但可以使用上次登录日期和时间来确定用户帐户是否处于非活动状态。
若要查找用户的最后一次登录时间,可以在 Microsoft Entra 管理中心查看用户列表。 虽然所有用户都可以查看用户列表,但某些列和详细信息仅适用于具有相应权限的用户。
至少以报告读取者身份登录到 Microsoft Entra 管理中心。
浏览到“标识”>“用户”>“所有用户”。
选择 管理视图,然后 编辑列。

选择列表中的“+ 添加列”,然后选择“上次交互式登录时间”,最后选择“保存”。

现在,在所有用户列表中显示该列后,选择 添加筛选器 并使用筛选器选项为搜索设置时间范围。
- 选择 < = 作为运算符,然后选择日期以查找在所选日期之前的最后一次登录。

如果需要查看用户的最新登录活动,可以在 Microsoft Entra ID 中查看用户的登录详细信息。 你还可以使用 Microsoft Graph API,如按名称查询用户部分中所述。
至少以报告读取者身份登录到 Microsoft Entra 管理中心。
浏览到“标识”>“用户”>“所有用户”。
从列表中选择用户。
在用户“总览”的我的动态区域中,找到登录图块。
此磁贴上显示的上次登录日期和时间最多可能需要 24 小时才能更新,这意味着日期和时间可能不是最新的。 如果需要几乎实时查看活动,请选择“登录”磁贴上的查看所有登录链接,以查看该用户的所有登录活动。
可以通过评估多个属性来检测非活动帐户。 lastSignInDateTime
属性由 Microsoft Graph API 的 signInActivity
资源类型公开。 该 lastSignInDateTime
属性显示用户上次尝试在 Microsoft Entra ID 中进行交互式登录尝试的时间。
使用此属性,可以为以下场景实现解决方案:
生成所有用户上次登录日期的报告。 响应提供了所有用户的列表,以及每个用户的最后一个 lastSignInDateTime
。
https://microsoftgraph.chinacloudapi.cn/v1.0/users?$select=displayName,signInActivity
此查询类似于将上次登录日期添加到用户列表,并在 Microsoft Entra 管理中心按特定日期进行筛选。 你可以请求在指定日期之前具有 lastSuccessfulSignInDateTime
或 lastSignInDateTime
的用户的列表。 此查询的响应提供用户的详细信息,但不提供用户的登录活动。 要查看这些详细信息,请在“按名称查询用户”场景中尝试查询。
https://microsoftgraph.chinacloudapi.cn/v1.0/users?$filter=signInActivity/lastSuccessfulSignInDateTime le 2024-06-01T00:00:00Z
https://microsoftgraph.chinacloudapi.cn/v1.0/users?$filter=signInActivity/lastSignInDateTime le 2024-06-01T00:00:00Z
在此方案中,按名称搜索特定用户。 此查询的响应包括其上次登录的日期、时间和请求 ID。
请求:
GET `https://microsoftgraph.chinacloudapi.cn/v1.0/users?$filter=startswith(displayName,'Isabella Simonsen')&$select=displayName,signInActivity`
响应:
{
"@odata.context": "https://microsoftgraph.chinacloudapi.cn/v1.0/$metadata#users(displayName,signInActivity)",
"value": [
{
"displayName": "Stine Romund",
"id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"signInActivity": {
"lastSignInDateTime": "2024-12-10T17:38:26Z",
"lastSignInRequestId": "20a94b1b-ade2-4f4e-9c55-609f7cd97600",
"lastNonInteractiveSignInDateTime": "2024-12-10T17:38:11Z",
"lastNonInteractiveSignInRequestId": "94c369e6-249e-4595-bb86-495ea9a81e00",
"lastSuccessfulSignInDateTime": "2024-12-10T17:38:26Z",
"lastSuccessfulSignInRequestId": "20a94b1b-ade2-4f4e-9c55-609f7cd97600"
}
}
]
}
lastSignInDateTime
:上次交互式登录尝试的日期和时间,包括登录失败。 如果上次登录尝试成功,则此属性的日期和时间与该 lastSuccessfulSignInDateTime
属性的日期和时间相同。
lastNonInteractiveSignInDateTime
:上次非交互式登录尝试的日期和时间。
lastSuccessfulSignInDateTime
:上次成功的交互式登录的日期和时间。
备注
signInActivity
属性支持 $filter
(eq
、ne
、not
、ge
、le
),不支持任何其他可筛选属性 。 列出$select=signInActivity
时必须指定 $filter=signInActivity
或 ,因为默认情况下不会返回 signInActivity 属性。
lastSignInDateTime 属性的注意事项
以下详细信息与 lastSignInDateTime
属性相关。
该lastSignInDateTime
属性由 Microsoft Graph API 的 signInActivity 资源类型公开。
该属性无法通过 Get-MgAuditLogDirectoryAudit cmdlet 获得。
每次交互式登录尝试都会更新基础数据存储。 通常,登录会在 6 小时内显示在相关登录报表中。
若要生成 lastSignInDateTime
时间戳,必须尝试登录。 只要在 Microsoft Entra 登录日志中进行了记录,则无论登录尝试是成功还是失败,都会生成一个 lastSignInDateTime
时间戳。 如果lastSignInDateTime
属性的值为空,可能会出现以下情况:
- 用户的上一次登录发生在 2020 年 4 月之前。
- 受影响的用户帐户从未用于登录尝试。
上次登录日期将与用户对象关联。 此值将保留,直到用户下一次登录。 更新最多可能需要 24 小时。
识别非活动用户后,首先提出以下问题:
- 用户是否仍被组织使用?
- 用户是否仍需访问其有权访问的资源?
- 是否出于任何其他原因仍然需要该用户帐户?
解决非活动用户的方式取决于你的方案,但清理未使用的帐户或超特权帐户应是降低安全风险的优先级。 以下功能和选项是一个很好的起点,但请注意,其中一些功能可能需要额外的许可。
- 清理过时的来宾帐户
- 请考虑使用动态成员管理组,基于用户的属性来自动添加或移除组中的用户。
- 使用Microsoft Entra ID 治理访问评审来审核用户的访问权限。