如何在Microsoft Sentinel登录日志中对提取的UserDomains过滤内外部域名?
在Microsoft Sentinel中区分内部与外部用户域名的KQL实现
你已经通过extend UserDomains = split(UserPrincipalName,'@')[1]提取出了用户域名,接下来可以通过以下几种方式区分内部、外部域名:
1. 标记域名类型(内部/外部)
如果需要在结果里直接标注每条日志的域名类型,可以用case函数匹配已知的内部域名:
// 提取域名 extend UserDomains = split(UserPrincipalName,'@')[1] // 标记内部/外部域名 extend DomainType = case( UserDomains in ('contoso.com', 'contoso.cn', 'contoso.onmicrosoft.com'), '内部域名', '外部域名' )
把in括号里的域名替换成你公司实际使用的内部域名(包括Azure AD租户默认的onmicrosoft.com域名),匹配到的会标记为「内部域名」,其余自动归为「外部域名」。
2. 直接过滤内部/外部域名日志
如果只需要筛选出内部域名的日志,用where配合in:
extend UserDomains = split(UserPrincipalName,'@')[1] | where UserDomains in ('contoso.com', 'contoso.cn')
如果要筛选外部域名的日志,在in前加!取反:
extend UserDomains = split(UserPrincipalName,'@')[1] | where UserDomains !in ('contoso.com', 'contoso.cn')
3. 处理带通配符的内部域名
如果内部包含多个子域名(比如dev.contoso.com、hr.contoso.com),可以用has_endswith匹配后缀:
extend UserDomains = split(UserPrincipalName,'@')[1] | extend DomainType = case( UserDomains has_endswith '.contoso.com', '内部域名', '外部域名' )
更复杂的规则可以用正则匹配,比如同时匹配.com和.cn后缀的子域名:
extend UserDomains = split(UserPrincipalName,'@')[1] | extend DomainType = case( UserDomains matches regex '^.*\\.contoso\\.(com|cn)$', '内部域名', '外部域名' )
内容的提问来源于stack exchange,提问作者Shabarinath
相关产品推荐
相关产品推荐

