在权利管理中使用 Azure Monitor 存档日志和进行报告
Microsoft Entra ID 在审核日志中将审核事件最多存储 30 天。 但是,你可以根据 Microsoft Entra ID 将报告数据存储多长时间?中所述,使审核数据的保留时长超过默认的保留期,具体方式是将这些数据路由到 Azure 存储帐户或使用 Azure Monitor。 然后,可对这些数据使用工作簿和自定义查询,并基于这些数据生成报表。
配置 Microsoft Entra ID 以使用 Azure Monitor
提示
本文中的步骤可能因开始使用的门户而略有不同。
使用 Azure Monitor 工作簿之前,必须配置 Microsoft Entra ID 以将审核日志的副本发送到 Azure Monitor。
存档 Microsoft Entra 审核日志需要在 Azure 订阅中安装 Azure Monitor。 可以在 Azure Monitor 中的 Microsoft Entra 活动日志中详细了解使用 Azure Monitor 所要满足的先决条件和预估成本。
至少以安全管理员身份登录到 Microsoft Entra 管理中心。 请确保你有权访问包含 Azure Monitor 工作区的资源组。
浏览到“标识”>“监视和运行状况”>“诊断设置”。
检查是否已有一个用于将审核日志发送到该工作区的设置。
如果没有此类设置,请选择“添加诊断设置”。 按照将 Microsoft Entra 日志与 Azure Monitor 日志集成中的说明,将 Microsoft Entra 审核日志发送到 Azure Monitor 工作区。
将日志发送到 Azure Monitor 后,选择“Log Analytics 工作区”,然后选择包含 Microsoft Entra 审核日志的工作区。
选择“使用情况和预估成本”,然后选择“数据保留”。 根据审核要求,将滑块移到所需的数据保留天数。
以后若要查看工作区中保留的日期范围,可以使用“存档的日志日期范围”工作簿:
浏览到“标识”>“监视和运行状况”>“工作簿”。
展开“Microsoft Entra 故障排除”部分,然后选择“存档的日志日期范围”。
查看访问包的事件
若要查看访问包的事件,必须有权访问基础 Azure Monitor 工作区(有关信息,请参阅在 Azure Monitor 中管理对日志数据和工作区的访问)并充当以下角色之一:
- 全局管理员
- 安全管理员
- 安全读取者
- 报告读者
- 应用程序管理员
使用以下过程来查看事件:
在 Microsoft Entra 管理中心,选择“标识”,然后选择“工作簿”。 如果你只有一个订阅,请转到步骤 3。
如果你有多个订阅,请选择包含工作区的订阅。
选择名为“访问包活动”的工作簿。
在该工作簿中选择一个时间范围(如果不确定,请更改为“全部”),然后从所有访问包的下拉列表中,选择在该时间范围内发生了活动的访问包 ID。 随后会显示在所选时间范围内该访问包发生的相关事件。
每行包含时间、访问包 ID、操作名称、对象 ID、UPN,以及启动该操作的用户的显示名称。 JSON 中包含更多详细信息。
如果想要查看应用程序的应用程序角色分配是否发生了更改,而这些更改不是由访问包分配引起的(例如全局管理员直接将用户分配给应用程序角色),则可以选择名为“应用程序角色分配活动”的工作簿。
使用 Microsoft Entra 管理中心创建自定义 Azure Monitor 查询
你可以对 Microsoft Entra 审核事件(包括权利管理事件)创建自己的查询。
在 Microsoft Entra 管理中心的“标识”中,选择左侧导航菜单中的“监视”部分下的“日志”,以创建新的查询页。
工作区应显示在查询页的左上方。 如果具有多个 Azure Monitor 工作区,并且用于存储 Microsoft Entra 审核事件的工作区未显示,请选择“选择范围”。 然后选择正确的订阅和工作区。
接下来,在查询文本区域中,删除字符串“search *”并将其替换为以下查询:
AuditLogs | where Category == "EntitlementManagement"
然后,选择“运行”。
默认情况下,该表会显示权利管理在过去一小时的审核日志事件。 可以更改“时间范围”设置以查看更早的事件。 但是,更改此设置只会显示在将 Microsoft Entra ID 配置为向 Azure Monitor 发送事件之后发生的事件。
若要了解 Azure Monitor 中保留的最早和最新审核事件,请使用以下查询:
AuditLogs | where TimeGenerated > ago(3653d) | summarize OldestAuditEvent=min(TimeGenerated), NewestAuditEvent=max(TimeGenerated) by Type
有关 Azure Monitor 中为审核事件存储的列的详细信息,请参阅解释 Azure Monitor 中的 Microsoft Entra 审核日志架构。
使用 Azure PowerShell 创建自定义 Azure Monitor 查询
将 Microsoft Entra ID 配置为向 Azure Monitor 发送日志后,可以通过 PowerShell 访问日志。 然后,无需成为租户中的全局管理员,就能通过脚本或 PowerShell 命令行发送查询。
确保为用户或服务主体分配了正确的角色
确保要向 Microsoft Entra ID 进行身份验证的用户或服务主体在 Log Analytics 工作区中充当适当的 Azure 角色。 角色选项为“Log Analytics 读取者”或“Log Analytics 参与者”。 如果你已充当这些角色之一,请跳到检索包含一个 Azure 订阅的 Log Analytics ID。
若要设置角色分配并创建查询,请执行以下步骤:
在 Microsoft Entra 管理中心内,找到 Log Analytics 工作区。
选择“访问控制 (IAM)”。
然后,选择“添加”以添加角色分配。
安装 Azure PowerShell 模块
分配适当的角色后,启动 PowerShell,然后键入以下命令来安装 Azure PowerShell 模块(如果尚未安装):
install-module -Name az -allowClobber -Scope CurrentUser
现已准备好向 Microsoft Entra ID 进行身份验证,并检索要查询的 Log Analytics 工作区的 ID。
检索包含一个 Azure 订阅的 Log Analytics ID
如果你只有一个 Azure 订阅和一个 Log Analytics 工作区,请键入以下命令向 Microsoft Entra ID 进行身份验证,连接到该订阅,然后检索该工作区:
Connect-AzAccount -Environment AzureChinaCloud
$wks = Get-AzOperationalInsightsWorkspace
检索包含多个 Azure 订阅的 Log Analytics ID
Get-AzOperationalInsightsWorkspace 每次在一个订阅中运行。 因此,如果你有多个 Azure 订阅,则需确保连接到包含适当 Log Analytics 工作区(包含 Microsoft Entra 日志的工作区)的订阅。
以下 cmdlet 显示订阅列表,并查找包含该 Log Analytics 工作区的订阅的 ID:
Connect-AzAccount -Environment AzureChinaCloud
$subs = Get-AzSubscription
$subs | ft
可以使用类似于 Connect-AzAccount -Environment AzureChinaCloud -Subscription $subs[0].id
的命令向该订阅重新进行身份验证,并将 PowerShell 会话与其关联。 若要详细了解如何通过 PowerShell 在 Azure 中进行身份验证(包括非交互式身份验证),请参阅使用 Azure PowerShell 进行登录。
如果你在该订阅中有多个 Log Analytics 工作区,则 cmdlet Get-AzOperationalInsightsWorkspace 会返回工作区列表。 然后,你可以找到包含 Microsoft Entra 日志的工作区。 此 cmdlet 返回的 CustomerId
字段与 Microsoft Entra 管理中心内 Log Analytics 工作区概述中显示的“工作区 ID”值相同。
$wks = Get-AzOperationalInsightsWorkspace
$wks | ft CustomerId, Name
将查询发送到 Log Analytics 工作区
最后,在确定工作区后,可以使用 Invoke-AzOperationalInsightsQuery 将 Kusto 查询发送到该工作区。 这些查询以 Kusto 查询语言编写。
例如,可以使用 PowerShell cmdlet 发送如下所示的查询,从 Log Analytics 工作区检索审核事件记录的日期范围:
$aQuery = "AuditLogs | where TimeGenerated > ago(3653d) | summarize OldestAuditEvent=min(TimeGenerated), NewestAuditEvent=max(TimeGenerated) by Type"
$aResponse = Invoke-AzOperationalInsightsQuery -WorkspaceId $wks[0].CustomerId -Query $aQuery
$aResponse.Results |ft
还可以使用如下所示的查询检索权利管理事件:
$bQuery = 'AuditLogs | where Category == "EntitlementManagement"'
$bResponse = Invoke-AzOperationalInsightsQuery -WorkspaceId $wks[0].CustomerId -Query $Query
$bResponse.Results |ft
使用查询筛选器
可以包含 TimeGenerated
字段,以将查询范围限定为特定的时间范围。 例如,若要检索过去 90 天内创建或更新的权利管理访问包分配策略的审核日志事件,可以提供包含此字段以及相应类别和操作类型的查询。
AuditLogs |
where TimeGenerated > ago(90d) and Category == "EntitlementManagement" and Result == "success" and (AADOperationType == "CreateEntitlementGrantPolicy" or AADOperationType == "UpdateEntitlementGrantPolicy") |
project ActivityDateTime,OperationName, InitiatedBy, AdditionalDetails, TargetResources
对于某些服务(如权利管理)的审核事件,还可以扩展和筛选要更改的资源的受影响属性。 例如,对于已创建或更新的访问包分配策略,可以仅查看不需要用户获得批准即可添加分配的策略的审核日志记录。
AuditLogs |
where TimeGenerated > ago(90d) and Category == "EntitlementManagement" and Result == "success" and (AADOperationType == "CreateEntitlementGrantPolicy" or AADOperationType == "UpdateEntitlementGrantPolicy") |
mv-expand TargetResources |
where TargetResources.type == "AccessPackageAssignmentPolicy" |
project ActivityDateTime,OperationName,InitiatedBy,PolicyId=TargetResources.id,PolicyDisplayName=TargetResources.displayName,MP1=TargetResources.modifiedProperties |
mv-expand MP1 |
where (MP1.displayName == "IsApprovalRequiredForAdd" and MP1.newValue == "\"False\"") |
order by ActivityDateTime desc