将事件类别列关联至Azure Sentinel安全事件表
解决Azure Sentinel中SecurityIncident标签解析的行合并问题
问题描述
需要解析Azure Sentinel的SecurityIncident表,基于标签的键值对生成Category、ExpControl等自定义列,最终每个事件仅显示一条最新记录且所有列值完整填充。当前代码因使用mv-expand拆分标签,导致同一事件的不同标签对应多条记录,列值分散。
修正后KQL代码
SecurityIncident | summarize arg_max(LastModifiedTime, *) by IncidentNumber // 保留每个事件的最新版本 | extend LabelDict = make_bag( bag_pack( tostring(split(Labels.labelName, ':')[0]), // 提取标签键 tostring(split(Labels.labelName, ':')[1]) // 提取标签值 ) ) // 将所有标签转换为统一的键值对字典 | extend Category = LabelDict['Category'], // 从字典中提取Category字段 ExpControl = LabelDict['ExpControl'] // 从字典中提取ExpControl字段 | project IncidentNumber, Category, ExpControl // 投影需要的列
代码说明
- 保留最新事件:
arg_max(LastModifiedTime, *) by IncidentNumber确保每个事件只保留最后修改的版本,避免重复旧数据。 - 标签转字典:
make_bag函数将事件的所有标签合并成一个动态键值对字典(LabelDict),替代mv-expand的拆分操作,避免同一事件生成多行记录。 - 提取自定义列:直接从
LabelDict中按键提取对应值,确保同一事件的所有标签值都填充到对应列中。
修正后输出示例
| IncidentNumber | Category | ExpControl |
|---|---|---|
| 123456 | SocialEngineering | Email Security |
内容的提问来源于stack exchange,提问作者idna
相关产品推荐
相关产品推荐

