你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
KQL 作业是对 Microsoft Sentinel 数据湖中的数据执行一次性或计划的 KQL 查询。 将工作用于调查和分析场景,例如:
- 用于事件调查和事件响应 (IR) 的长时间运行的一次性查询
- 使用低保真度日志支持扩充工作流的数据聚合任务
- 历史威胁情报(TI)匹配扫描用于回顾分析
- 异常检测扫描,用于识别多个表中的异常模式
当查询使用跨不同数据集的联接或联合时,KQL 作业特别有效。
使用作业将数据从数据湖层提升到分析层。 进入分析层后,使用高级搜寻 KQL 编辑器查询数据。 将数据提升到分析层具有以下优势:
- 合并分析层中的当前数据和历史数据,对数据运行高级分析和机器学习模型。
- 通过在分析层中运行查询来降低查询成本。
- 将数据从多个工作区合并到分析层中的单个工作区。
- 将 Microsoft Entra ID、Microsoft 365 和 Microsoft Resource Graph 数据合并到分析层中,以跨数据源运行高级分析。
注释
分析层中的存储会产生比 Data Lake 层更高的计费费率。 为了减少成本,仅推广那些需要进一步分析的数据。 在查询中使用 KQL 以便仅投影所需的列,并筛选数据以减少提升到分析层的数据量。
可以将数据提升到新表,或将结果追加到分析层中的现有表。 创建新表时,表名称后缀为 _KQL_CL ,以指示表是由 KQL 作业创建的。
先决条件
若要在 Microsoft Sentinel data lake 中创建和管理 KQL 作业,需要满足以下先决条件。
加入数据湖
若要在 Microsoft Sentinel data lake 中创建和管理 KQL 作业,必须先载入到 Data Lake。 有关加入到数据湖的详细信息,请参阅加入到 Microsoft Sentinel 数据湖。
权限
Microsoft Entra ID 角色提供对数据湖中所有工作区的广泛访问权限。 若要在所有工作区中读取表、写入分析层,并使用 KQL 查询来计划作业,您必须拥有受支持的 Microsoft Entra ID 角色之一。 有关角色和权限的详细信息,请参阅 Microsoft Sentinel data lake 角色和权限。
若要在分析层中创建新的自定义表,请将 Log Analytics 工作区中的 Log Analytics 参与者 角色分配给 Data Lake 托管标识。
若要分配角色,请执行以下步骤:
- 在 Azure 门户中,转到要向其分配角色的 Log Analytics 工作区。
- 在左侧导航窗格中,选择“访问控制 (IAM)”。
- 选择“添加角色分配”。
- 在 “角色 ”表中,选择“Log Analytics 参与者”,然后选择“ 下一步”。
- 选择 托管标识,然后选择 选择成员。
- 数据湖托管标识是一个系统分配的托管标识,其名称为
msg-resources-<guid>。 选择托管身份,然后选择 选择。 - 选择“查看并分配”。
有关给托管标识分配角色的详细信息,请参阅 使用 Azure 门户分配 Azure 角色。
创建职位
可以创建任务以按计划或一次性运行。 创建作业时,需要指定结果的目标工作区和表。 可以将结果写入新表,或将它们追加到分析层中的现有表。 可以创建新的 KQL 作业,也可以从包含查询和作业设置的模板创建作业。 有关详细信息,请参阅 从模板创建 KQL 作业。
从 KQL 查询编辑器或作业管理页启动作业创建过程。
输入 作业名称。 作业名称对于租户必须是唯一的。 作业名称最多可以包含 256 个字符。 不能在作业名称中使用
#或-。输入提供作业上下文和用途的 作业说明 。
从 “选择工作区 ”下拉列表中,选择目标工作区。 此工作区位于要在其中写入查询结果的分析层中。
选择目标表:
若要创建新表,请选择“ 创建新表 ”并输入表名称。 KQL 作业创建的表将 _KQL_CL 作为表名的后缀。
若要追加到现有表,请选择“ 添加到现有表 ”,然后选择表格名称,形成下拉列表。 添加到现有表时,查询结果必须与现有表的架构匹配。
在 “准备查询 ”面板中查看或写入查询。 如果查询中未指定日期范围,请检查时间选取器是否设置为作业所需的时间范围。
从 “所选工作区 ”下拉列表中选择要对其运行查询的工作区。 这些工作区是您要查询其表的源工作区。 您选择的工作区将决定可供查询的表。 所选工作区适用于查询编辑器中的所有查询选项卡。 使用多个工作区时,
union()运算符默认应用于具有不同工作区中相同名称和架构的表。 使用workspace()运算符从特定工作区查询表,例如workspace("MyWorkspace").AuditLogs。注释
如果要写入现有表,查询必须返回与目标表架构匹配的架构的结果。 如果查询未返回具有正确架构的结果,则作业在运行时会失败。
选择“下一步”。
在 “计划查询作业 ”页上,选择是要运行作业一次还是按计划运行。 如果选择 一次,则作业在作业定义完成后立即运行。 如果选择“ 计划”,则可以指定要运行的作业的日期和时间,或按定期计划运行作业。
选择 一次性任务 或 定时任务。
注释
编辑单次任务会立即触发其执行。
如果选择了 “计划”,请输入以下详细信息:
- 从下拉列表中选择 “重复频率 ”。 可以选择“ 按分钟”、“ 每小时”、“ 每日”、“ 每周”或 “每月”。
- 根据所选频率,设置“重复间隔”值,以确定作业的运行频率。
- 在 “设置计划”下,输入 “开始日期 ”日期和时间。 创建作业后,“ 发件人 ”字段中的作业开始时间必须至少为 30 分钟。 从该日期和时间起,作业根据“运行频率”下拉列表中选择的频率运行。
- 选择“结束”日期和时间以指定作业计划何时完成。 如果希望计划无限期继续,请选择“ 设置作业”以无限期运行。
作业的起始时间和结束时间按照用户的区域设置进行设置。
注释
如果计划作业以高频率运行,例如每 30 分钟运行一次,则必须考虑数据在 Data Lake 中可用所需的时间。 新引入的数据可用于查询之前,延迟通常最多为 15 分钟。
选择 “下一步 ”以查看作业详细信息。
查看作业详细信息,然后选择 “提交 ”以创建作业。 如果作业是一次性作业,则它在选择 “提交”后运行。 如果作业已安排,则会将其添加到 “作业” 页中的作业列表中,并根据开始日期和时间运行。
从模板创建作业
可以从预定义的作业模板创建 KQL 作业。 作业模板包含 KQL 查询和作业设置,例如目标工作区和表、计划和说明。 可以创建自己的作业模板或使用由Microsoft提供的内置模板。
若要从模板创建作业,请执行以下步骤:
在 “作业 ”页或 KQL 查询编辑器中,选择“ 创建作业”,然后选择“ 从模板创建”。
在 “作业模板 ”页上,从可用模板列表中选择要使用的模板。
查看模板中的 “说明 ”和 “KQL”查询 。
从模板中选择“创建作业”。
此时会打开作业创建向导,其中包含 “创建新的 KQL 作业 ”页。 从模板中预填充了作业详细信息,但不包括目标工作区。
从 “选择工作区 ”下拉列表中选择目标工作区。
根据需要查看和修改作业详细信息,然后选择 “下一步 ”以继续执行作业创建向导。
剩余步骤与创建新任务相同。 字段是从模板预填充的,可以根据需要进行修改。 有关详细信息,请参阅 “创建作业”。
提供以下模板:
| 模板名称 | 类别 |
|---|---|
异常登录位置增加通过计算位置多样性的趋势线,分析 Entra ID 登录日志的趋势分析,以检测跨应用程序用户的异常位置更改。 它突出显示了位置变化幅度最大的前三个帐户,并列出了它们在 21 天时段内的相关位置。 目标表:UserAppSigninLocationTrend 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
搜寻 |
基于位置更改的异常登录行为根据 Entra ID 用户和应用的位置更改确定异常登录行为,以检测行为突然变化。 目标表: 用户应用登录位置异常 (UserAppSigninLocationAnomalies) 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
异常情况检测 |
由应用发起的罕见审核活动查找执行罕见操作的应用程序(例如,同意、权限授予),这些操作可以悄悄地创建权限。 将当前日期与过去 14 天的审核进行比较,以确定新的审核活动。 用于跟踪与 Azure 应用和自动审批相关的用户/组添加或删除的恶意活动。 目标表: AppAuditRareActivity 查询回溯: 14 天 计划:每日 开始日期: 当前日期 + 1 小时 |
搜寻 |
Azure 罕见订阅级别操作根据 Azure 活动日志识别敏感的 Azure 订阅级事件。 例如,基于操作名称“创建或更新快照”进行监视,该操作用于执行创建备份操作,但攻击者可能会滥用此操作,以转储哈希或从磁盘中提取敏感信息。 目标表: AzureSubscriptionSensitiveOps 查询回溯: 14 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
搜寻 |
AuditLogs 中的应用的每日活动趋势在过去 14 天内,识别出由用户或应用执行的任何“同意应用程序”操作。 这可能表示已向恶意参与者提供访问列出的 AzureApp 的权限。 同意应用程序、添加服务主体和添加 Auth2PermissionGrant 事件应该是不常见的。 如果可用,则会根据执行“同意申请”的同一帐户的 CorrleationId 从 AuditLogs 中添加额外的上下文。 目标表: AppAuditActivityBaseline 查询回溯: 14 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
基线 |
SignInLogs 中每个用户或应用的每日位置趋势为所有用户登录、位置计数及其应用使用情况生成每日趋势。 目标表: UserAppSigninLocationBaseline 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
基线 |
每个目标 IP 的每日网络流量趋势创建包含字节和不同对等方的基线,以检测信标和外泄问题。 目标表: NetworkTrafficDestinationIPDailyBaseline 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
基线 |
具有数据传输统计信息的每个目标 IP 的每日网络流量趋势确定与外部目标联系的内部主机,包括流量趋势、估计影响范围。 目标表: NetworkTrafficDestinationIPTrend 查询回溯:1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
搜寻 |
每个源 IP 的每日网络流量趋势创建包含字节和不同的对等节点的基线,以检测信标行为和数据外泄。 目标表: NetworkTrafficSourceIPDailyBaseline 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
基线 |
每个源 IP 的每日网络流量趋势与数据传输统计信息根据主机的日常基线评估今天的连接和字节,以确定观察到的行为是否明显偏离已建立的模式。 目标表: 网络流量来源IP趋势 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
搜寻 |
每个用户和应用的每日登录位置趋势为具有典型地理和 IP 的每个用户或应用程序创建登录基线,从而大规模实现高效且经济高效的异常情况检测。 目标表: UserAppSigninLocationDailyBaseline 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
基线 |
每日进程执行趋势识别新的过程和流行性,使“新的罕见过程”检测更容易。 目标表: EndpointProcessExecutionBaseline 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
基线 |
每个应用的 Entra ID 罕见用户代理通过回顾过去几天的数据,确定特定应用程序通常使用的 UserAgent 类型(即浏览器、办公应用程序等)的基线。 然后,它会在当天搜索与此模式的任何偏差,即以前从未见过与此应用程序组合使用的 UserAgent 类型。 目标表: UserAppRareUserAgentAnomalies 查询回溯: 7 天 日程: 每天 开始日期: 当前日期 + 1 小时 |
异常情况检测 |
网络日志 IOC 匹配通过在 CommonSecurityLog 中搜索匹配项,识别威胁情报 (TI) 中的任何 IP 入侵指标 (IOC)。 目标表: NetworkLogIOCMatches 查询回溯: 1 小时 计划: 每小时 开始日期: 当前日期 + 1 小时 |
搜寻 |
过去 24 小时内观察到的新进程稳定环境中的新进程可能表示恶意活动。 分析运行这些二进制文件的登录会话有助于识别攻击。 目标表: EndpointNewProcessExecutions 查询回溯: 14 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
搜寻 |
通过以前未见过的 IP 执行 SharePoint 文件操作通过为新 IP 地址中的文件上传/下载活动的重大更改设置阈值来识别使用用户行为的异常。 它建立典型行为的基线,将其与最近的活动进行比较,并标记超过默认阈值 25 的偏差。 目标表:SharePointFileOpsNewIPs 查询回溯: 14 天 日程: 每日 开始日期: 当前日期 + 1 小时 |
搜寻 |
Palo Alto 潜在网络信标根据重复的时间增量模式识别 Palo Alto 网络流量日志中的信标模式。 该查询使用各种 KQL 函数来计算时间差,然后将其与一天内观察到的总事件数进行比较,以找出信标事件的百分比。 目标表: PaloAltoNetworkBeaconingTrend 查询回溯: 1 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
搜寻 |
发生在正常工作时间之外的 Windows 可疑登录事件通过将用户正常工作时间外 Windows 登录活动与过去 14 天的登录活动进行比较,根据历史模式标记异常,以识别异常事件。 目标表: WindowsLoginOffHoursAnomalies 查询回溯: 14 天 计划: 每日 开始日期: 当前日期 + 1 小时 |
异常情况检测 |
注意事项和限制
在 Microsoft Sentinel data lake 中创建作业时,请考虑以下限制和最佳做法:
KQL
除以下各项外,所有 KQL 运算符和函数均受支持:
adx()arg()externaldata()ingestion_time()
使用
stored_query_results此命令时,在 KQL 查询中提供时间范围。 查询编辑器上方的时间选择器不适用于此命令。不支持用户定义的函数。
职位
- 作业名称对于租户必须是唯一的。
- 作业名称最多可以包含 256 个字符。
- 作业名称不能包含
#或-。 - 作业开始时间在创建或编辑作业后必须至少为 30 分钟。
数据湖引入延迟
Data Lake 层将数据存储在冷存储中。 与热分析层或准实时分析层不同,冷存储针对长期保留和成本效益进行了优化,不提供对新引入的数据的即时访问。 向数据湖中的现有表添加新行时,数据可供查询前的典型延迟长达 15 分钟。 在运行查询和计划 KQL 作业时,考虑摄取延迟,确保配置回溯窗口和作业计划,以避免尚不可用的数据。
若要避免查询可能尚不可用的数据,请在 KQL 查询或作业中包含延迟参数。 例如,在计划自动化作业时,请将查询的结束时间设置为 now() - delay,其中 delay 与典型的数据就绪延迟 15 分钟匹配。 此方法可确保查询仅针对已完全加载并且已准备好进行分析的数据。
let lookback = 15m;
let delay = 15m;
let endTime = now() - delay;
let startTime = endTime - lookback;
CommonSecurityLog
| where TimeGenerated between (startTime .. endTime)
此方法对于具有短回退窗口或频繁执行间隔的作业有效。
请考虑将回溯期与作业频率重叠,以降低遗漏延迟到达数据的风险。
有关详细信息,请参阅处理计划分析规则中的引入延迟。
列名
导出不支持以下标准列。 引入过程会覆盖目标层中的这些列:
租户ID
_TimeReceived
类型
SourceSystem
_资源ID
_SubscriptionId(订阅编号)
_ItemId
_BilledSize(账单大小)
_IsBillable
_WorkspaceId
TimeGenerated的内容如果超过两天,则会被覆盖。 若要保留原始事件时间,将源时间戳写入单独的列。
有关服务限制,请参阅 Microsoft Sentinel data Lake 服务限制。
注释
当作业的查询时间超过一小时限制时,可能会优先处理部分结果。
KQL 作业的服务参数和限制
下表列出了 Microsoft Sentinel data lake 中 KQL 作业的服务参数和限制。
| 类别 | 参数/限制 |
|---|---|
| 每个租户的并发作业执行 | 3 |
| 作业查询执行超时 | 1 小时 |
| 每个租户的作业数(已启用作业) | 100 |
| 每个作业的输出表数 | 1 |
| 查询范围 | 多个工作区 |
| 查询时间范围 | 最长 12 年 |
有关故障排除提示和错误消息,请参阅 对 Microsoft Sentinel data lake 的 KQL 查询进行故障排除。