Azure Policy ARM模板使用名称通配符排除指定前缀资源组的方法
Azure Policy 按名称前缀排除资源组实现方案
Azure Policy 本身不支持在分配的notScopes配置项中直接使用通配符,你可以通过以下两种方案实现所有以Atlanta开头的资源组排除需求:
方案1:Policy规则层面添加前缀匹配(推荐,适合自定义Policy场景)
可以直接通过Policy内置的notStartsWith字符串函数实现前缀过滤,无需依赖固定数组配置:
- 如果你可以修改Policy定义,直接在规则的
if逻辑块中添加排除条件即可,示例规则片段如下:
{ "if": { "allOf": [ // 此处保留你原本的Policy匹配逻辑 { "field": "type", "equals": "Microsoft.Resources/subscriptions/resourceGroups" }, { "field": "name", "notStartsWith": "Atlanta" } ] }, "then": { "effect": "[parameters('effect')]" } }
- 如果需要多场景复用Policy,可以把前缀定义为Policy参数,分配时再传值即可:
- 首先在Policy定义的parameters块新增前缀参数:
"parameters": { "excludedRgPrefix": { "type": "String", "metadata": { "displayName": "排除的资源组名称前缀", "description": "名称此前缀开头的资源组将不适用当前Policy" } } }- 规则中引用参数:
{ "field": "name", "notStartsWith": "[parameters('excludedRgPrefix')]" }- 分配Policy时给参数传值
Atlanta即可生效。
方案2:分配层面批量排除(适合无法修改规则的内置Policy场景)
如果用的是官方内置Policy不能修改规则,可以通过Resource Graph批量查询符合前缀的资源组,再批量加入分配的排除范围:
- 运行以下Resource Graph Kusto查询获取所有
Atlanta开头的资源组ID:
ResourceContainers | where type == 'microsoft.resources/subscriptions/resourcegroups' | where name starts with 'Atlanta' | project id
- 将查询返回的所有资源组ID批量填入Policy分配的
排除范围(Not Scopes)配置项即可。
内容的提问来源于stack exchange,提问作者Hanscastor
相关产品推荐
相关产品推荐

