如何从Azure Repository导出格式化数据实现IOC自动检测
Azure Repo IOC数据自动适配Kusto检测方案
不用手动复制、改格式,按下面的方法选一个即可,都是实测可用的落地方式。
方案1:直接关联数据源(最推荐,零手动操作)
完全不需要导出数据、替换占位符,让Kusto查询直接读取Azure Repo上存储的IOC文件即可,查询时自动完成值匹配。
先把你日常维护的IOC表从Excel导出为单列CSV(只保留需要匹配的IP/域名等IOC列即可),提交到Azure Repo仓库,之后直接用下面的KQL语句查询:
// 拉取Azure Repo上的最新IOC列表 let IOC_Pool = externaldata(IOCValue:string) [ h@"替换为你Azure Repo中IOC CSV文件的原始访问地址" ] with(format="csv", ignoreFirstRecord=True); // CSV第一行是表头就保留这个参数,无表头就删除 DeviceNetworkEvent | where Timestamp > ago(30d) | where RemoteIP in~(IOC_Pool)
- 只要你在Azure Repo上更新IOC文件,查询时会自动拉取最新值,不需要做任何双引号、逗号分隔的格式化操作
- 仓库为私有权限的话,提前在Kusto查询界面(Defender/Sentinel/ADX)绑定对应Azure DevOps组织的访问权限即可,不需要额外配置
方案2:流水线自动生成格式化文本
如果必须沿用之前双引号包裹、逗号分隔的文本格式,直接在Azure Repo配个极简流水线自动生成即可:
- 新建流水线,触发规则设置为IOC文件更新时自动运行
- 加一个PowerShell运行步骤,执行下面的脚本:
# 读取仓库内的IOC文件,提取目标列生成格式化内容 $iocData = Import-Csv -Path "./仓库内IOC文件的相对路径.csv" | Select-Object -ExpandProperty IOC列的列名 $formattedText = ($iocData | ForEach-Object { "`"$_`"" }) -join ",`n" # 输出为流水线产物,或者直接提交到仓库内的固定文本文件 $formattedText | Out-File -FilePath "./kusto_ready_ioc.txt"
后续更新IOC后直接下载生成好的文本复制就行,完全不用手动改格式。
方案3:本地轻量脚本
不想配流水线的话,本地存个短脚本,每次需要更新的时候跑一下,自动拉取最新IOC、格式化后复制到剪贴板,直接粘贴替换查询里的HERE占位符就行:
# 配置项 $repoFileUrl = "Azure Repo中IOC文件的原始访问地址" $tempSavePath = "./temp_ioc.csv" $targetColName = "存储IOC值的列名" # 拉取最新IOC文件 Invoke-WebRequest -Uri $repoFileUrl -OutFile $tempSavePath -UseDefaultCredentials # 格式化并复制到剪贴板 $iocList = Import-Csv $tempSavePath | Select-Object -ExpandProperty $targetColName ($iocList | ForEach-Object { "`"$_`"" }) -join ",`n" | Set-Clipboard Write-Host "格式化完成,内容已复制到剪贴板"
效率说明
原来的手动流程单次操作至少3分钟,还容易出现漏加引号、逗号错位导致查询报错的问题;用方案1完全省掉额外操作,方案2、3单次操作不超过10秒,不会出现格式错误。
内容的提问来源于stack exchange,提问作者Kornuptiko
相关产品推荐
相关产品推荐

