You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用KQL将事件IP匹配Sentinel监视列表IP范围以丰富事件

在Azure Sentinel中用KQL实现IP范围与Watchlist的匹配(替代Splunk lookup)

你要实现的是将分析规则生成事件里的SourceIP字段,与Watchlist中的子网范围匹配,输出对应Office名称,对应Splunk的|lookup office-ranges.csv Range AS SourceIP OUTPUT Office语句。由于KQL的lookup默认是精确值匹配,而你需要的是IP子网范围匹配,所以得结合ipv4_is_in_range()函数来实现,以下是可行的写法:

方法1:使用apply逐行匹配

// 替换成你实际的事件数据表名
YourEventTable
| apply (
    // 加载你的Watchlist数据
    _GetWatchlist("office-ranges")
    // 判断当前事件的SourceIP是否在Watchlist的子网范围内
    | where ipv4_is_in_range(SourceIP, Range)
    // 只保留需要输出的Office字段
    | project Office
)

方法2:使用变量+标量查询

// 先把Watchlist数据存入变量
let office_ranges = _GetWatchlist("office-ranges");
// 处理你的事件数据
YourEventTable
// 为每条事件匹配对应的Office值,无匹配则返回null
| extend Office = toscalar(office_ranges | where ipv4_is_in_range(SourceIP, Range) | project Office)

方法3:左连接后过滤匹配项

YourEventTable
// 左连接Watchlist数据,先建立关联(这里用!=是为了避免精确匹配限制,后续再过滤)
| join kind=leftouter (_GetWatchlist("office-ranges") on $left.SourceIP != $right.Range)
// 只保留IP在子网范围内的结果
| where ipv4_is_in_range(SourceIP, Range)
// 移除重复的字段(如果有重名的Range字段,可根据实际情况调整)
| project-away Range1

说明

你之前尝试的join和lookup失败,是因为这两个操作默认是精确字段匹配,而你的场景需要判断IP是否属于某个子网范围,必须用ipv4_is_in_range()函数来做逻辑判断,无法直接通过字段相等的条件完成匹配。

内容的提问来源于stack exchange,提问作者JohnnyMnemonic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:10:14