教程:创建 Log Analytics 工作区以分析登录日志

本教程介绍如何执行下列操作:

  • 创建 Log Analytics 工作区
  • 配置诊断设置以将登录日志与 Log Analytics 工作区集成
  • 使用 Kusto 查询语言 (KQL) 运行查询

先决条件

若要使用 Log Analytics 分析活动日志,需要以下角色和要求:

创建 Log Analytics 工作区

在此步骤中,你将创建一个 Log Analytics 工作区,该工作区最终会发送登录日志。 在创建工作区之前,需要一个 Azure 资源组

  1. 以至少具有 Log Analytics 参与者权限的安全管理员身份登录到 Azure 门户

  2. 浏览到“Log Analytics 工作区”。

  3. 选择创建

    “Log Analytics 工作区”页中的“添加”按钮的屏幕截图。

  4. 在“创建 Log Analytics 工作区”页上,执行以下步骤:

    1. 选择订阅。

    2. 选一个择资源组。

    3. 为工作区命名。

    4. 选择区域。

    “创建新 Log Analytics 工作区”的详细信息页面的屏幕截图。

  5. 选择“查看 + 创建” 。

  6. 选择“创建”并等待部署。 可能需要刷新页面才能看到新的工作区。

配置诊断设置

若要将标识日志信息发送到新工作区,需要配置诊断设置。 Azure 和 Microsoft Entra 有不同的诊断设置选项,因此对于下一组步骤,让我们切换到 Microsoft Entra 管理中心,以确保所有内容都与标识相关。

  1. 至少以安全管理员身份登录到 Microsoft Entra 管理中心

  2. 浏览到 Entra ID>监控与健康>诊断设置

  3. 选择“添加诊断设置”。

    “添加诊断设置”选项的屏幕截图。

  4. 在“诊断设置”页上,执行以下步骤:

    1. 为该诊断设置提供一个名称。

    2. 在“日志”下,选择“AuditLogs”和“SigninLogs”

    3. 在“目标详细信息”下,选择“发送到 Log Analytics”,然后选择新的 Log Analytics 工作区 。

    4. 选择“保存”。

    “选择诊断设置”选项的屏幕截图。

您所选的日志可能需要最多 15 分钟才能在 Log Analytics 工作区中填充。

在 Log Analytics 中运行查询

当您的日志流式传输至 Log Analytics 工作区后,您可以使用 Kusto 查询语言(KQL) 来运行查询。 运行查询的最低特权角色是 报表读取者 角色

  1. 浏览到 Entra ID>监控与健康>Log Analytics

  2. 在“搜索”文本框中,键入查询,然后选择“运行”

Kusto 查询示例

从输入数据中随机选取 10 个条目:

  • SigninLogs | take 10

查看条件访问成功的登录:

  • SigninLogs | where ConditionalAccessStatus == "success" | project UserDisplayName, ConditionalAccessStatus

成功计数:

  • SigninLogs | where ConditionalAccessStatus == "success" | project UserDisplayName, ConditionalAccessStatus | count

用户按天累计的成功登录次数:

  • SigninLogs | where ConditionalAccessStatus == "success" | summarize SuccessfulSign-ins = count() by UserDisplayName, bin(TimeGenerated, 1d)

查看用户在特定时间段内执行特定操作的次数:

  • AuditLogs | where TimeGenerated > ago(30d) | where OperationName contains "Add member to role" | summarize count() by OperationName, Identity

根据操作名称透视结果:

  • AuditLogs | where TimeGenerated > ago(30d) | where OperationName contains "Add member to role" | project OperationName, Identity | evaluate pivot(OperationName)

使用内部联接合并审核和登录日志:

  • AuditLogs |where OperationName contains "Add User" |extend UserPrincipalName = tostring(TargetResources[0].userPrincipalName) | |project TimeGenerated, UserPrincipalName |join kind = inner (SigninLogs) on UserPrincipalName |summarize arg_min(TimeGenerated, *) by UserPrincipalName |extend SigninDate = TimeGenerated

按客户端应用类型查看登录数:

  • SigninLogs | summarize count() by ClientAppUsed

按天对登录进行计数:

  • SigninLogs | summarize NumberOfEntries=count() by bin(TimeGenerated, 1d)

随机选取 5 个条目,并在结果中投射出你希望看到的列:

  • SigninLogs | take 5 | project ClientAppUsed, Identity, ConditionalAccessStatus, Status, TimeGenerated

选取以降序排列的前 5 个条目,并投射出你希望看到的列:

  • SigninLogs | take 5 | project ClientAppUsed, Identity, ConditionalAccessStatus, Status, TimeGenerated

通过将这些值合并到其他两列来创建新的列:

  • SigninLogs | limit 10 | extend RiskUser = strcat(RiskDetail, "-", Identity) | project RiskUser, ClientAppUsed

后续步骤