1. Azure Policy 与 Resource Graph 的深度整合实践
作为一名长期在Azure平台上进行云治理的工程师,我经常需要面对这样一个现实问题:当企业Azure环境中的策略定义数量超过百个时,单纯通过Azure门户界面已经难以有效管理这些策略。每次需要查看策略影响范围或导出策略信息时,都要一个个点击查看,效率极低。经过多次实践,我发现Azure Resource Graph(ARG)配合Kusto查询语言(KQL)是解决这一痛点的最佳方案。
Azure Resource Graph是Azure提供的一种高效资源查询服务,它允许用户以接近实时的速度跨所有订阅查询资源数据。与传统的Azure Resource Manager API相比,ARG的最大优势在于它能够快速执行跨订阅、跨资源组的复杂查询,而无需逐个订阅进行轮询。对于策略管理场景,ARG特别有价值,因为它将策略定义、策略分配和合规状态数据都纳入了可查询范围。
在实际工作中,我总结了三种最常用的策略查询场景,它们覆盖了策略管理的核心需求:
- 快速获取所有已分配策略的详细信息(包括分配范围、执行模式等)
- 统计不合规资源数量并按策略分组,识别影响最大的策略
- 获取策略定义的完整详情,包括效果类型和分类信息
这些查询不仅解决了基本的导出需求,更重要的是为策略治理提供了数据支持。例如,通过分析不合规资源统计,我们可以优先处理影响范围最大的策略;通过策略定义详情查询,可以系统性地梳理策略库,避免重复或冲突的策略定义。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 策略分配信息的全面获取方法
2.1 核心查询解析
让我们深入分析第一个核心查询——获取所有已分配策略的KQL语句:
kql复制policyresources
| where type == "microsoft.authorization/policyassignments"
| project
assignmentName = name,
scope = tostring(properties.scope),
policyDefinitionId = tostring(properties.policyDefinitionId),
displayName = tostring(properties.displayName),
enforcementMode = tostring(properties.enforcementMode),
assignedBy = tostring(properties.metadata.assignedBy),
createdBy = tostring(properties.metadata.createdBy)
| order by scope asc
这个查询从policyresources表开始,筛选出类型为策略分配(microsoft.authorization/policyassignments)的记录。project操作符选择了我们需要的关键字段,并对每个字段进行了重命名和类型转换:
scope字段显示了策略分配的范围,可能是管理组、订阅或特定资源组policyDefinitionId是策略定义的唯一标识,可用于关联策略定义详情enforcementMode显示策略是处于强制模式(Enabled)还是仅审计模式(Disabled)- `assig
