使用 Azure Monitor 监视 Azure AD B2C

使用 Azure Monitor 将 Azure Active Directory B2C (Azure AD B2C) 登录日志和审核日志路由到不同的监视解决方案。 然后,可以保留日志供长期使用,或者将其与第三方安全信息和事件管理 (SIEM) 工具集成,以获取有关环境的见解。

可将日志事件路由到:

Azure Monitor

计划将 Azure AD B2C 日志传输到不同的监视解决方案或存储库时,请考虑 Azure AD B2C 日志是否包含个人数据。 当你处理此类数据时,请确保你对个人数据使用适当的安全措施。 包括使用适当的技术或组织措施防止未经授权或非法处理。

本文介绍如何将日志传输到 Azure Log Analytics 工作区。 然后,可以创建仪表板或创建基于 Azure AD B2C 用户活动的警报。

部署概述

Azure AD B2C 使用 Microsoft Entra 监视。 与 Microsoft Entra 租户不同,Azure AD B2C 租户不能有与之关联的订阅。 因此,我们需要采取额外的步骤来启用 Azure AD B2C 和 Log Analytics 之间的集成,我们将通过该集成来发送日志。 若要在 Azure AD B2C 租户的 Microsoft Entra ID 中启用诊断设置,请使用 Azure Lighthouse 委托资源,这允许 Azure AD B2C(服务提供商)管理 Microsoft Entra ID(客户)资源。

提示

Azure Lighthouse 通常用于管理多个客户的资源。 但是,其还可用于管理本身具有多个 Microsoft Entra 租户的企业中的资源,我们会在此期间这样做,只不过我们仅委托对单个资源组的管理。

完成本文中的步骤后,你将创建一个新的资源组(此处称为“azure-ad-b2c-monitor”)并且具有在 Azure AD B2C 门户中访问包含 Log Analytics 工作区的相同资源组的权限。 还可以将日志从 Azure AD B2C 传输到 Log Analytics 工作区。

在此部署期间,授权 Azure AD B2C 目录中的某个用户或组在包含你的 Azure 订阅的租户中配置 Log Analytics 工作区实例。 若要创建授权,需要将 Azure 资源管理器模板部署到包含 Log Analytics 工作区的订阅。

下图描绘了要在 Microsoft Entra ID 和 Azure AD B2C 租户中配置的组件。

资源组投影

在此部署期间,你将配置生成日志的 Azure AD B2C 租户。 还将配置托管 Log Analytics 工作区的 Microsoft Entra 租户。 应为使用的 Azure AD B2C 帐户(例如管理员帐户)分配 Azure AD B2C 租户的全局管理员角色。 将用于运行部署的 Microsoft Entra 帐户必须在 Microsoft Entra 订阅中分配“所有者”角色。 另外,请务必在完成所述的每个步骤时登录到正确的目录。

总之,你将使用 Azure Lighthouse 来允许 Azure AD B2C 租户中的用户或组管理与其他租户(Microsoft Entra 租户)关联的订阅中的资源组。 完成此授权后,可以在 Azure AD B2C 的“诊断”设置中,将订阅和日志分析工作区选作目标。

先决条件

1.创建或选择资源组

首先,创建或选择一个资源组,其中包含将从 Azure AD B2C 接收数据的目标 Log Analytics 工作区。 部署 Azure 资源管理器模板时请指定资源组名称。

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Microsoft Entra ID 租户
  3. 创建资源组或选择现有资源组。 此示例使用名为 azure-ad-b2c-monitor 的资源组。

2.创建 Log Analytics 工作区

Log Analytics 工作区是适用于 Azure Monitor 日志数据的唯一环境。 你将使用此 Log Analytics 工作区从 Azure AD B2C 审核日志收集数据,然后使用查询和工作簿将其可视化,或创建警报。

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Microsoft Entra ID 租户
  3. 创建 Log Analytics 工作区。 此示例在名为 azure-ad-b2c-monitor 的资源组中使用名为 AzureAdB2C 的 Log Analytics 工作区。

3.委托资源管理

在此步骤中,你将选择 Azure AD B2C 租户作为“服务提供商”。 还要定义将相应的 Azure 内置角色分配到 Microsoft Entra 租户中的组所需的授权。

3.1 转到 Azure AD B2C 租户 ID

首先,获取 Azure AD B2C 目录的“租户 ID”(也称为目录 ID)。

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户
  3. 选择 Microsoft Entra ID,选择“概述”。
  4. 记录“租户 ID”。

3.2 选择安全组

现在选择要向其授予对前面在包含订阅的目录中创建的资源组的权限的 Azure AD B2C 组或用户。

为了简化管理,建议为每个角色使用 Microsoft Entra 用户组,这使你能够向组添加或删除单个用户,而不是直接向此用户分配权限。 在本演练中,我们将添加一个安全组。

重要

若要为 Microsoft Entra 组添加权限,“组类型”必须设置为“安全”。 此选项是在创建组时选择的。 有关详细信息,请参阅使用 Microsoft Entra ID 创建基本组并添加成员

  1. 在“Azure AD B2C”目录中的“Microsoft Entra ID”仍处于选中状态时,选择“组”,然后选择一个组。 如果没有现有组,请创建一个“安全”组,然后添加成员。 有关详细信息,请遵循流程使用 Microsoft Entra ID 创建基本组并添加成员
  2. 选择“概述”,并记录组的“对象 ID”。

3.3 创建 Azure 资源管理器模板

为了在 Azure Lighthouse 中创建自定义授权和委派,我们使用 Azure 资源管理器模板。 此模板授予 Azure AD B2C 对之前创建的 Microsoft Entra 资源组的访问权限,例如 azure-ad-b2c-monitor。 使用“部署到 Azure”按钮从 GitHub 示例部署模板,这将打开 Azure 门户,并允许直接在门户中配置和部署模板。 对于这些步骤,请确保登录到 Microsoft Entra 租户(而不是 Azure AD B2C 租户)。

  1. 登录 Azure 门户

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Microsoft Entra ID 租户

  3. 使用“部署到 Azure”按钮打开 Azure 门户,并直接在门户中部署模板。 有关详细信息,请参阅创建 Azure 资源管理器模板

    部署到 Azure

  4. 在“自定义部署”页面上,输入以下信息:

    字段 定义
    订阅 选择包含 Azure 订阅的目录,其中创建了 azure-ad-b2c-monitor 资源组。
    Region 选择将部署资源的区域。
    Msp 套餐名称 描述此定义的名称。 例如 Azure AD B2C 监视。 这是将在 Azure Lighthouse 中显示的名称。 MSP 产品/服务名称 在 Microsoft Entra ID 中必须是唯一的。 要监视多个 Azure AD B2C 租户,请使用不同的名称。
    Msp 套餐说明 套餐的简短说明。 例如,“在 Azure AD B2C 中启用 Azure Monitor”。
    由租户 ID 进行托管 Azure AD B2C 租户的“租户 ID”(也称为目录 ID)。
    授权 指定包含 Microsoft Entra ID principalIdprincipalIdDisplayName 和 Azure roleDefinitionId 的对象 JSON 数组。 principalId 是有权访问此 Azure 订阅中的资源的 B2C 组或用户的“对象 ID”。 对于本演练,请指定前面记下的组对象 ID。 对于 roleDefinitionId,请使用“参与者”角色的内置角色b24988ac-6180-42a0-ab88-20f7382dd24c
    资源组名称 之前在 Microsoft Entra 租户中创建的资源组的名称。 例如 azure-ad-b2c-monitor

    下面的示例演示一个具有一个安全组的授权数组。

    [
      {
        "principalId": "<Replace with group's OBJECT ID>",
        "principalIdDisplayName": "Azure AD B2C tenant administrators",
        "roleDefinitionId": "b24988ac-6180-42a0-ab88-20f7382dd24c"
      }
    ]
    

部署模板后,可能需要花费几分钟时间(通常不超过五分钟)来完成资源投影。 可以验证 Microsoft Entra 租户中的部署并获取资源投影的详细信息。 有关详细信息,请参阅查看和管理服务提供商

4.选择订阅

部署模板并等待几分钟让资源投影完成之后,请通过以下步骤将订阅关联到 Azure AD B2C 目录。

注意

在“门户设置 | 目录 + 订阅”页,确保在“当前 + 委派”目录下选中 Azure AD B2C 和 Microsoft Entra 租户。

  1. Azure 门户中注销,然后使用你的 Azure AD B2C 管理帐户重新登录。 此帐户必须是在委派资源管理步骤中指定的安全组的成员。 注销并重新登录可以在下一步中刷新你的会话凭据。

  2. 在门户工具栏中选择“设置”图标。

  3. 在“门户设置 | 目录 + 订阅”页面的“目录名称”列表中,找到包含 Azure 订阅和你创建的 azure-ad-b2c-monitor 资源组的 Microsft Entra ID 目录,然后选择“切换”

  4. 验证你选择了正确的目录,并且你的 Azure 订阅已在默认订阅筛选器中列出并选中。

    默认订阅筛选器的屏幕截图

5.配置诊断设置

诊断设置定义要将资源的日志和指标发送到的位置。 可能的目标为:

在此示例中,我们使用 Log Analytics 工作区来创建仪表板。

5.1 创建诊断设置

你已准备好在 Azure 门户中创建诊断设置

为 Azure AD B2C 活动日志配置监视设置:

  1. 使用 Azure AD B2C 管理帐户登录到 Azure 门户。 此帐户必须是在选择安全组步骤中指定的安全组的成员。

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Azure AD B2C 租户

  3. 选择 Microsoft Entra ID

  4. 在“监视”下,选择“诊断设置” 。

  5. 如果有用于此资源的现有设置,则会看到已配置的设置列表。 如果要添加新设置,请选择“添加诊断”设置;如果要编辑现有设置,请选择“编辑”设置。 每个设置最多只能包含一个目标类型。

    Azure 门户中的“诊断设置”窗格的屏幕截图。

  6. 为设置指定名称(如果未指定)。

  7. 选择“AuditLogs”和“SignInLogs” 。

  8. 选择“发送到 Log Analytics 工作区”,然后:

    1. 在“订阅”下,选择自己的订阅
    2. 在“Log Analytics 工作区”下,选择之前创建的工作区名称,例如 AzureAdB2C

    注意

    Azure AD B2C 租户目前只支持 AuditLogs 和 SignInLogs 诊断设置。

  9. 选择“保存”。

注意

事件发出后,最多可能需要 15 分钟它才会在 Log Analytics 工作区中显示。 此外,详细了解 Active Directory 报告延迟,这可能会影响数据过期,并在报告中发挥重要作用。

如果看到错误消息“若要将诊断设置设为将 Azure Monitor 用于 Azure AD B2C 目录,则需要设置委托的资源管理”,请确保以安全组成员的用户身份登录,并选择你的订阅

6.可视化数据

现在,你可以配置 Log Analytics 工作区以可视化数据并配置警报。 可以在 Microsoft Entra 租户和 Azure AD B2C 租户中进行这些配置。

6.1 创建查询

日志查询可帮助你充分利用在 Azure Monitor 日志中收集的数据的价值。 使用功能强大的查询语言,只需编写极少量的代码即可联接多个表中的数据、聚合大型数据集,以及执行复杂的操作。 只要收集了支持数据,并且你了解如何构造适当的查询,就几乎能够解答任何问题和执行分析。 有关详细信息,请参阅 Azure Monitor 日志查询入门

  1. 登录 Azure 门户

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Microsoft Entra ID 租户

  3. 从“Log Analytics 工作区”窗口中,选择“日志”

  4. 在查询编辑器中,粘贴以下 Kusto 查询语言查询。 此查询显示过去 x 天内按操作列出的策略使用情况。 默认持续时间设置为 90 天 (90d)。 请注意,查询只关注由策略发出令牌/代码的操作。

    AuditLogs
    | where TimeGenerated  > ago(90d)
    | where OperationName contains "issue"
    | extend  UserId=extractjson("$.[0].id",tostring(TargetResources))
    | extend Policy=extractjson("$.[1].value",tostring(AdditionalDetails))
    | summarize SignInCount = count() by Policy, OperationName
    | order by SignInCount desc  nulls last
    
  5. 选择“运行”。 查询结果显示在屏幕底部。

  6. 要保存查询以供以后使用,请选择“保存”。

    Log Analytics 日志编辑器

  7. 填写以下详细信息:

    • 名称 - 输入查询的名称。
    • 另存为 - 选择 query
    • 类别 - 选择 Log
  8. 选择“保存”。

还可以通过使用 render 运算符更改查询,以实现数据可视化。

AuditLogs
| where TimeGenerated  > ago(90d)
| where OperationName contains "issue"
| extend  UserId=extractjson("$.[0].id",tostring(TargetResources))
| extend Policy=extractjson("$.[1].value",tostring(AdditionalDetails))
| summarize SignInCount = count() by Policy
| order by SignInCount desc  nulls last
| render  piechart

Log Analytics 日志编辑器饼图

有关更多示例,请参阅 Azure AD B2C SIEM GitHub 存储库

6.2 创建工作簿

工作簿提供了一块灵活的画布,以用于分析数据以及在 Azure 门户中创建丰富的视觉报告。 使用工作簿可以在整个 Azure 中接入多个数据源,并将其组合成统一的交互式体验。 有关详细信息,请参阅 Azure Monitor 工作簿

按照以下说明使用 JSON 库模板创建新工作簿。 此工作簿为 Azure AD B2C 租户提供“用户见解”和“身份验证”仪表板。

  1. 登录 Azure 门户

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Microsoft Entra ID 租户

  3. 从“Log Analytics 工作区”窗口中,选择“工作簿”。

  4. 从工具栏中选择“+ 新建”选项,以创建新工作簿。

  5. 在“新建工作簿”页上,使用工具栏上的 <> 选项选择“高级编辑器”。

    库模板

  6. 选择“库模板”。

  7. 将库模板中的 JSON 替换为 Azure AD B2C 基本工作簿中的内容:

  8. 使用“应用”按钮应用该模板。

  9. 从工具栏中选择“完成编辑”按钮,完成工作簿编辑。

  10. 最后,通过使用工具栏中的“保存”按钮保存工作簿。

  11. 提供“标题”,如 Azure AD B2C 仪表板。

  12. 选择“保存”。

    保存工作簿

工作簿将以仪表板的形式显示报表。

工作簿第一仪表板

工作簿第二仪表板

工作簿第三仪表板

创建警报

警报通过警报规则在 Azure Monitor 中创建,可以按固定的时间间隔自动运行保存的查询或自定义日志搜索。 可以根据特定的性能指标或发生某些事件时创建警报。 你还可以在没有事件或在特定时间窗口内发生许多事件时创建警报。 例如,当登录平均数超过特定阈值时,可以使用警报通知你。 有关详细信息,请参阅创建警报

使用以下说明创建新的 Azure 警报,该警报将在请求总数与上一时段相比下降 25% 时发送电子邮件通知。 警报将每 5 分钟运行一次,并查找过去一小时与其前面的一小时相比的下降情况。 警报是使用 Kusto 查询语言创建的。

  1. 登录 Azure 门户

  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Microsoft Entra ID 租户

  3. 从 Log Analytics 工作区,选择“日志”。

  4. 使用以下查询创建新的 Kusto 查询。

    let start = ago(2h);
    let end = now();
    let threshold = -25; //25% decrease in total requests.
    AuditLogs
    | serialize TimeGenerated, CorrelationId, Result
    | make-series TotalRequests=dcount(CorrelationId) on TimeGenerated from start to end step 1h
    | mvexpand TimeGenerated, TotalRequests
    | serialize TotalRequests, TimeGenerated, TimeGeneratedFormatted=format_datetime(todatetime(TimeGenerated), 'yyyy-MM-dd [HH:mm:ss]')
    | project   TimeGeneratedFormatted, TotalRequests, PercentageChange= ((toreal(TotalRequests) - toreal(prev(TotalRequests,1)))/toreal(prev(TotalRequests,1)))*100
    | order by TimeGeneratedFormatted desc
    | where PercentageChange <= threshold   //Trigger's alert rule if matched.
    
  5. 选择“运行”以测试查询。 如果过去一小时内请求总数下降了 25% 或更多,则会看到结果。

  6. 若要基于此查询创建警报规则,请使用工具栏中提供的“+ 新建警报规则”选项。

  7. 在“创建警报规则”页上,选择“条件名称”

  8. 在“配置信号逻辑”页上,设置以下值,然后使用“完成”按钮保存更改。

    • 警报逻辑:将“结果数”设置为大于 0
    • 评估依据:为“时段(分钟)”选择“120”,为“频率(分钟)”选择“5”

    创建警报规则条件

创建警报后,转到“Log Analytics 工作区”,然后选择“警报”。 此页面显示在“时间范围”选项设置的持续时间内触发的所有警报。

配置操作组

Azure Monitor 和服务运行状况警报使用操作组来通知用户某个警报已触发。 可以包括发送语音呼叫、短信、电子邮件,或者触发各种类型的自动化操作。 请按照在 Azure 门户中创建和管理器操作组指南操作

下面是警报通知电子邮件的示例。

电子邮件通知

多个租户

若要将多个 Azure AD B2C 租户日志集成到同一个 Log Analytics 工作区(或 Azure 存储帐户或事件中心),需要使用不同的“Msp 套餐名称”值进行单独部署。 请确保 Log Analytics 工作区与你在创建或选择资源组中配置的工作区位于同一资源组中。

使用多个 Log Analytics 工作区时,请使用跨工作区查询创建跨多个工作区的查询。 例如,下面的查询从基于同一类别(例如身份验证)的不同租户执行两个审核日志的联接:

workspace("AD-B2C-TENANT1").AuditLogs
| join  workspace("AD-B2C-TENANT2").AuditLogs
  on $left.Category== $right.Category

更改数据保留期

Azure Monitor 日志用于调整和支持来自任何源的巨量数据的每日收集、索引和存储,这些源部署在企业或 Azure 中。 默认情况下,日志保留 30 天,但保留期可以延长到两年。 了解如何使用 Azure Monitor 日志管理使用情况和成本。 选择定价层后,可以更改数据保留期

禁用监视数据收集

要停止将日志收集到 Log Analytics 工作区,请删除创建的诊断设置。 如果将已收集的日志数据保留到工作区中,将会继续产生费用。 如果不再需要收集的监视数据,则可以删除 Log Analytics 工作区和为 Azure Monitor 创建的资源组。 删除 Log Analytics 工作区会删除工作区中的所有数据,并防止产生额外的数据保留费用。

删除 Log Analytics 工作区和资源组

  1. 登录 Azure 门户
  2. 如果有权访问多个租户,请选择顶部菜单中的“设置”图标,切换到“目录 + 订阅”菜单中的 Microsoft Entra ID 租户
  3. 选择包含 Log Analytics 工作区的资源组。 此示例使用名为 azure-ad-b2c-monitor 的资源组中和名为 AzureAdB2C 的 Log Analytics 工作区。
  4. 删除 Log Analytics 工作区
  5. 选择“删除”按钮以删除资源组。

后续步骤