当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 实用图:报告 Microsoft Entra ID 管理单元

作者:精品下载站 日期:2024-12-14 04:10:35 浏览:15 分类:玩电脑

实用图:报告 Microsoft Entra ID 管理单元


使用 PowerShell 获取有关管理单元的更多信息

微软最近宣布了受限管理单位的预览版,这让我觉得能够报告管理单位及其成员的详细信息将是一个好主意。 Microsoft Entra ID 管理中心揭示了此信息,并且很容易查看单个管理单元的属性,但要获得租户中所有管理单元的简洁概述要困难得多。

如果您的租户使用管理单位,那么密切关注其使用情况非常重要。微软显然更加关注这些对象,因为它们在解决目录范围内的问题上大有帮助。数据丢失防护 (DLP) 和数据生命周期管理(保留标签和策略)等 Purview 解决方案支持管理单元范围内的策略配置。我预计 Microsoft 365 生态系统的其他部分将随着时间的推移遵循类似的方法。

Microsoft Graph PowerShell SDK V2

本文介绍如何使用 Microsoft Graph PowerShell SDK 中的 cmdlet 检索信息并创建报告。 Microsoft 于 2023 年 7 月 4 日发布了 SDK 的 V2。SDK V1 和 V2 之间的明显区别在于,与生产 Graph 端点 (V1.0) 交互的 cmdlet 遵循 *-Mg* 命名方案,而其 beta 对应项具有 *-MgBeta* 名称。

例如,用于检索 Entra ID (Azure AD) 用户帐户的 cmdlet 分别为 Get-MgUserGet-MgBetaUser。 cmdlet 命名的更改意味着开发人员应该检查和测试使用 SDK V1 编写的任何脚本,以确保他们的代码可以在 V2 上运行。

Microsoft Graph PowerShell SDK V2 将其 cmdlet 分为两个子模块,您必须安装这两个子模块才能访问 beta cmdlet。从好的方面来说,划分为单独的模块意味着可以更轻松、更快速地在 Azure 自动化等环境中加载 SDK。 Azure 自动化的另一个重要变化是对托管标识的正式支持。过去已经存在解决方法,例如从 Azure 自动化帐户获取访问令牌并使用该令牌进行身份验证,但现在您只需执行以下操作:

Connect-MgGraph -Identity

如果将 SDK 与 Azure 自动化结合使用,请确保导入包含 Runbook 中使用的任何 cmdlet 的 Beta 模块。

Microsoft 365 杀伤链和攻击路径管理

有效的网络安全策略需要对攻击如何展开有清晰、全面的了解。阅读本白皮书以获得保卫您的组织所需的专家见解!

更新 Microsoft Graph PowerShell SDK

在发布 SDK V2.0 九天后,微软匆忙推出了 V2.1(2023 年 7 月 13 日)来修复一些问题。例如,Get-MgServicePrincipal cmdlet 顽固地拒绝显示任何参数!通常,Microsoft 每月生成一个新版本的 SDK。然而,在 V2 的早期,密切关注 PowerShell Gallery 以确保您使用最新、最稳定的代码可能是明智之举。

本文中描述的脚本将 Azure 自动化帐户中安装的 V1.0 和 beta SDK 模块更新到最新版本。本文中的脚本负责 PC 上的 SDK 模块更新(和其他模块)。

报告行政单位

回到行政单位,我用来创建报告的基本处理步骤是:

  • 使用Directory.Read.All范围连接到图表。
  • 使用 Get-MgBetaDirectoryAdministrativeUnit cmdlet 查找所有管理单元(常规、动态和受限)。
  • 使用 Get-MgBetaRoleManagementDirectoryRoleAssignment cmdlet 检索管理单位的角色分配。角色分配允许特定用户帐户对管理单元中的用户帐户、组和设备执行管理任务。全局管理员和用户管理员等常规管理角色的持有者可以管理常规管理单元中的对象,但无法访问受限管理单元。只有专门分配给受限管理单元的角色的用户才能管理这些单元中的对象。
  • 循环遍历每个管理单元以记录其设置的详细信息。
  • 查找特定于管理单元的角色分配,并提取拥有角色的用户帐户、组或服务主体的详细信息。
  • 使用 Get-MgBetaAdministrativeUnitMember cmdlet 获取管理单元成员的详细信息。对于动态管理单元,cmdlet 根据管理单元中定义的成员资格规则返回对象集(类似于动态组甚至动态通讯组列表的工作方式)。
  • 使用管理单元、分配及其成员资格的详细信息更新 PowerShell 列表。
  • 将结果输出为 CSV 文件和 HTML 页面。

正如您从处理步骤列表中看到的,用于处理管理单元的 cmdlet 使用 beta 端点。脚本中的其他 cmdlet(例如 Get-MgUserGet-MgGroup)使用 V1.0 端点。这是脚本如何混合和匹配 beta 和 V1.0 cmdlet 来完成工作的一个很好的示例。

分析结果

图 1 显示了为我的租户生成的 HTML 页面。首先要注意的是,有两个没有成员的行政单位,这意味着这些对象本质上是没有用的。如果作为管理单元成员的所有用户帐户、组和设备由于某种原因离开,这种情况可能会随着时间的推移而演变。这可能是删除个人帐户或将对象从一个租户批量转移到另一个租户。对于动态管理单元,由于用户帐户属性的问题,计算成员资格的成员资格规则可能不会返回任何内容。或者只是管理员出于某种目的创建了一个管理单位,但从未发生过。

[玩转系统] 实用图:报告 Microsoft Entra ID 管理单元

您可以查看列中列出的动态管理单元的成员资格规则。如果存在特定角色分配,则会列出分配者的显示名称及其类型(用户、组或服务主体)。我将角色分配给 Azure 自动化帐户的服务主体,以允许其 Runbook 处理用户帐户的子集。

如果管理单位不存在特定的角色分配,则报告会列出“管理员角色”以指示应用正常的管理员角色分配。每个管理单元的范围都以“目录”列出,表示不受限制,“受限”表示只有为该管理单元分配了特定角色的人员才能管理其成员资格。

脚本中没有什么魔力,PowerShell 也非常简单。编写此类脚本最困难的部分是找到正确的 SDK cmdlet 来使用并理解 cmdlet 返回的输出。您可以从 GitHub 下载完整的脚本。欢迎提出所有建议,您可以通过 GitHub 提出对脚本的更改。

查找受限制管理单位覆盖的账户

最后,说明如何发现受限管理单元所涵盖的用户帐户集。当用户帐户位于受限管理单元的范围内时,Entra ID 会将其 IsManagementRestricted 属性设置为 True。因此,找到帐户集就是检查该属性的问题。遗憾的是,目前不支持服务器端过滤,因此必须运行如下命令:

Get-MgBetaUser -Filter "usertype eq 'Member'" -All | where-Object {$_.IsManagementRestricted -eq $True}

DIY报告

我一直不明白为什么 Microsoft 相对较少关注报告 Microsoft 365/Entra ID 的不同方面。 Microsoft 365 管理中心和其他门户中提供了帮助 Microsoft 销售更多许可证的报告(例如使用情况报告),但除此之外就没有太多了。从好的方面来说,您有机会撰写自己的报告。这样做的缺点是需要做一些工作,即使在潮湿的周六下午确实需要几个小时。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯