无法调用自定义KQL函数?如何集中管理恶意IP数据表并复用
KQL查询语法错误解决方法
错误原因
in运算符要求传入标量值的集合(比如单个列的所有值),你直接传入了整个数据表maliciousIPs,导致KQL无法解析。
解决方法
方法1:修改查询条件,提取IP列值
这是最简单的修改方式,直接在in语句中提取函数返回表的IPAddress列:
let maliciousIPs = GetMaliciousIPs(); let signInsForIPs = AADSignInEventsBeta | where Timestamp >= ago(30d) | where IPAddress in (maliciousIPs | project IPAddress);
方法2:使用Join操作(适合大量IP场景)
当恶意IP数量较多时,join的性能优于in,推荐使用:
let maliciousIPs = GetMaliciousIPs(); AADSignInEventsBeta | where Timestamp >= ago(30d) | join kind=inner (maliciousIPs) on IPAddress
kind=inner会只保留匹配恶意IP的登录事件,符合你的需求。
方法3:调整函数返回格式(复用性更强)
修改GetMaliciousIPs函数,让它直接返回可用于in的动态数组:
首先重新创建/更新函数:
.create function GetMaliciousIPs() { datatable(IPAddress:string) [ "62.86.18.86", "8.211.111.53", "14.178.141.190" ] | summarize make_list(IPAddress) }
然后查询时使用:
let maliciousIPs = toscalar(GetMaliciousIPs()); let signInsForIPs = AADSignInEventsBeta | where Timestamp >= ago(30d) | where IPAddress in (maliciousIPs);
内容的提问来源于stack exchange,提问作者dubwuh
相关产品推荐
相关产品推荐

