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

[玩转系统] 使用 Azure 自动化和 PowerShell 创建每日 Microsoft Entra 风险报告

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

使用 Azure 自动化和 PowerShell 创建每日 Microsoft Entra 风险报告


持续监控风险或为意外做好准备

Microsoft Entra ID P2 订阅中包含的 Microsoft Entra ID 保护功能是对抗基于身份的攻击的非常强大的方法。 ID 保护允许管理员使用实时生成的登录风险状态(由 Microsoft 确定),并通过 Microsoft Entra 的行为分析,在连接超过可配置的风险阈值时自动阻止登录或强制重置密码。

自动阻止登录对于拥有正确许可证的租户来说非常有用,但并不能帮助所有人。抛开有关顶级许可 SKU 背后的安全功能的讨论不谈,对于没有高级订阅的组织来说,一切都不会丢失。虽然某些增强的详细信息和自动修复功能需要高级许可,但具有 Entra ID P1 或 Entra ID Free 的租户可以使用有风险的用户、登录和风险检测报告(Entra ID Free 租户无法获得风险检测)报告),其能力有限,如 Microsoft 文档中详述。

Microsoft Entra 中的风险事件通常会被忙碌的管理员忽视,特别是在可能没有专门的安全操作团队负责监控风险的较小环境中。与 Microsoft 365 中的许多功能一样,一点点自动化可以在很大程度上弥补其中的一些差距。在本文中,我将介绍如何创建 Azure 自动化 Runbook(代码可在 GitHub 上获取)来报告租户中的风险检测结果,并每天通过电子邮件将该报告发送给管理员。

入门

第一个要求是 Azure 自动化帐户。 Azure 自动化是管理自动化报告(例如监视统一审核日志事件)和执行重复任务(例如基于模板预配 Microsoft Teams)的好方法。

为了简单起见,该脚本使用托管标识连接到 Microsoft Graph SDK。由于脚本使用托管标识,因此自动化帐户应与脚本将运行的租户 Entra ID 目录关联。

接下来,自动化帐户的服务主体需要以下 Graph 权限才能运行脚本:

  • “IdentityRiskyUser.Read.All” - 检索风险用户数据需要此权限。
  • “IdentityRiskEvent.Read.All” - 检索风险事件数据需要此权限。
  • “IdentityRiskyServicePrincipal.Read.All” - 检索有风险服务主体数据需要此权限。
  • “Mail.Send” - 需要此权限才能在脚本末尾通过电子邮件发送报告

使用 Microsoft Graph PowerShell SDK 按照有关使用 Power Automate 和 Azure 自动化管理 SharePoint 网站生命周期的文章中描述的步骤为服务主体分配所需的权限。

此代码显示如何通过以下方式分配权限:

  • 在数组中定义所需的权限。
  • 获取 Microsoft Graph 应用程序的服务主体。
  • 获取自动化帐户服务主体的标识符。
  • 获取每个所需权限的角色 ID。
  • 循环遍历每个角色并将角色分配给自动化帐户服务主体

您所需要做的就是替换自动化帐户的名称(在我的示例中为“aa-EntraRiskReport”)。

##List Required Permissions
$Permissions = @(
  "IdentityRiskyUser.Read.All"
 "IdentityRiskEvent.Read.All"
 "IdentityRiskyServicePrincipal.Read.All"
 "Mail.Send"
)
##Get Graph Service Principal
$GraphApp = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
##Get Automation Account Service Principal ID
$MIID = (Get-MgServicePrincipal -Filter "displayName eq 'aa-EntraRiskReport'").id
##Get Graph Role IDs
[array]$Roles = $GraphApp.AppRoles | Where-Object {$Permissions -contains $_.Value}
##Assign each permission
foreach($role in $roles){
 $AppRoleAssignment = @{
 "PrincipalId" = $MIID
 "ResourceId" = $GraphApp.Id
 "AppRoleId" = $Role.Id
 }
 # Assign the Graph permission
 New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MIID -BodyParameter $AppRoleAssignment
}

接下来,必须安装以下 Microsoft Graph PowerShell SDK 模块作为 Azure 自动化帐户的资源:

  • Microsoft.Graph.身份验证。
  • Microsoft.Graph.Identity.SignIns。
  • Microsoft.Graph.Users.Actions。

Microsoft Graph SDK 模块会定期更新,因此确保它们是最新的非常重要。有关更新 Azure 自动化中的模块的详细信息,请查看有关如何保持 Azure 自动化的 Microsoft Graph PowerShell 模块更新的文章。

添加代码

此任务的脚本可在 GitHub 上找到。在较高级别上,该脚本执行以下任务:

  • 声明发件人地址、收件人地址和报告电子邮件主题的变量。
  • 使用 PowerShell SDK 连接到 Microsoft Graph。
  • 从租户收集风险检测、有风险的用户和有风险的服务主体,仅包括具有“风险”状态的条目。
  • 将数据解析为包含报告中应包含的信息的集合。
  • 将数据转换为报告的 HTML 格式。
  • 向输出添加一些基本的 HTML 格式。
  • 将 HTML 报告以及主题和收件人参数添加到新邮件的正文中。
  • 使用指定发件人地址变量的 Send-MgUserMail cmdlet 发送报告。

要在您的环境中运行,脚本第 20 行和第 21 行的发件人和收件人变量应使用租户中的有效发件人和收件人地址进行更新。

审查报告

该报告包括三个表:风险检测、风险用户和风险服务主体。图 1 所示的风险检测表列出了处于风险状态“处于风险”的租户中发生的风险事件。这意味着管理员尚未更新触发事件的状态,这通常意味着尚未对其进行审核。

[玩转系统] 使用 Azure 自动化和 PowerShell 创建每日 Microsoft Entra 风险报告

第二个和第三个表包含风险状态为“处于风险”的用户列表(图 2)和服务主体。通常,如果用户或服务主体列出了风险状态,则会有一个或多个导致该状态的风险检测。风险检测表可用于为用户和服务主体表中列出的身份提供上下文。

[玩转系统] 使用 Azure 自动化和 PowerShell 创建每日 Microsoft Entra 风险报告

当管理员在 Microsoft Entra 管理中心内对风险进行操作时,风险状态会更新,并且风险不再显示在报告中。

安排报告

在 Azure 自动化中运行此类脚本的一个主要好处是调度功能。要每天早上运行脚本,请在自动化帐户中创建每日计划,如图 3 所示。

[玩转系统] 使用 Azure 自动化和 PowerShell 创建每日 Microsoft Entra 风险报告

接下来,从 Runbook 将计划链接到 Runbook(图 4)以安排脚本每天早上运行。

[玩转系统] 使用 Azure 自动化和 PowerShell 创建每日 Microsoft Entra 风险报告

简单但有效

自动化帐户将根据计划运行脚本,并每天早上通过电子邮件发送报告。重要的是,不仅要阅读报告,还要确保对环境中的风险状态采取行动,并在风险缓解时更新风险状态。虽然这些信息可以从 Entra 管理中心获取,但以每日报告的形式提供这些信息是确保需要信息的人能够轻松查看这些信息的好方法。脚本中没有什么特别复杂的内容,但它通过连接到租户、收集数据、格式化数据然后通过电子邮件发送来完成所需的工作。我确信可以进行改进,特别是在报告的格式方面,但我会将其留给比我更有设计眼光的人。

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

取消回复欢迎 发表评论:

关灯