Azure技术问询:如何开发策略拒绝关联空路由表的子网创建?
Azure策略:拒绝关联空路由表的子网创建
策略逻辑说明
鉴于Azure中路由表需先创建再添加路由,我们可通过自定义策略,在子网创建或更新时检查其关联的路由表是否包含至少一条有效路由。若路由表为空(路由数量为0),则直接拒绝该操作。
完整策略代码
{ "properties": { "displayName": "拒绝关联空路由表的子网创建/更新", "policyType": "Custom", "mode": "Indexed", "description": "当子网关联的路由表包含0条路由时,拒绝子网的创建或更新操作", "parameters": {}, "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Network/virtualNetworks/subnets" }, { "field": "Microsoft.Network/virtualNetworks/subnets/routeTable.id", "exists": true }, { "count": { "field": "Microsoft.Network/virtualNetworks/subnets/routeTable.routes[*]" }, "equals": 0 } ] }, "then": { "effect": "Deny" } } } }
关键逻辑解析
- 触发范围:仅针对
Microsoft.Network/virtualNetworks/subnets类型的资源操作 - 检查条件:
- 子网已关联路由表(
routeTable.id存在) - 关联的路由表中
routes数组长度为0(即无任何路由)
- 子网已关联路由表(
- 执行动作:满足条件时直接拒绝子网的创建或更新请求
部署方式
Azure门户:
- 进入「策略」服务,点击「定义」→「+ 自定义策略定义」
- 填入上述JSON内容,设置好范围(订阅/资源组)后保存
- 将该策略分配到目标范围即可生效
Azure CLI:
- 将策略代码保存为
deny-empty-route-table-subnet.json,然后执行以下命令:az policy definition create --name "Deny-Empty-Route-Table-Subnet" --display-name "拒绝关联空路由表的子网创建/更新" --description "当子网关联的路由表包含0条路由时,拒绝子网的创建或更新操作" --rules "deny-empty-route-table-subnet.json" --mode Indexed az policy assignment create --name "Deny-Empty-Route-Table-Subnet-Assignment" --policy "Deny-Empty-Route-Table-Subnet" --scope "/subscriptions/你的订阅ID"
- 将策略代码保存为
注意事项
- 该策略仅管控新创建或更新的子网,已存在的关联空路由表的子网不受影响
- 若需对存量子网进行合规性检查,可配合策略的「修正任务」完成批量扫描
内容的提问来源于stack exchange,提问作者rumblefish
相关产品推荐
相关产品推荐

