如何通过Azure Policy禁止其他服务部署到AppGateway专用子网?
用Azure Policy禁止非AppGateway资源部署到专用子网
可以通过Azure Policy实现这个需求,和Azure Bastion子网的默认限制逻辑类似,我们可以编写策略拒绝所有非Application Gateway类型的资源部署到名称包含AppGatewaySubnet的子网。
你现有的策略仅限制了Application Gateway必须部署到指定子网,但无法阻止其他资源占用该子网。以下是补充的子网保护策略:
{ "policyRule": { "if": { "allOf": [ { "field": "type", "notEquals": "Microsoft.Network/applicationGateways" }, { "anyOf": [ { "field": "Microsoft.Network/networkInterfaces/ipConfigurations[*].subnet.id", "contains": "AppGatewaySubnet" }, { "field": "Microsoft.Compute/virtualMachines/networkProfile.networkInterfaces[*].properties.ipConfigurations[*].subnet.id", "contains": "AppGatewaySubnet" }, { "field": "Microsoft.Network/loadBalancers/frontendIPConfigurations[*].subnet.id", "contains": "AppGatewaySubnet" }, { "field": "Microsoft.Network/natGateways/subnet.id", "contains": "AppGatewaySubnet" } ] } ] }, "then": { "effect": "Deny" } }, "parameters": {}, "metadata": { "description": "拒绝非Application Gateway资源部署到AppGateway专用子网", "version": "1.0.0" } }
策略逻辑说明
- 资源类型排除:第一部分规则直接排除
Microsoft.Network/applicationGateways类型,确保AppGateway本身可以正常部署到目标子网。 - 子网关联检查:第二部分通过
anyOf覆盖常见的会关联子网的资源类型(虚拟网卡、虚拟机、负载均衡器、NAT网关等),检查这些资源的子网ID是否包含AppGatewaySubnet。只要匹配任一条件,就触发拒绝动作。
注意事项
- 可根据你的实际环境,补充更多资源类型的子网字段路径(比如容器实例、函数应用等),确保覆盖所有可能部署到子网的资源。
- 上线前建议先将
effect改为Audit,验证策略是否正确触发,确认无误后再切换为Deny。 - 将此策略与你现有的AppGateway子网绑定策略配合使用,即可实现完整的子网隔离:前者确保AppGateway仅能部署到指定子网,后者确保其他资源无法占用该子网。
内容的提问来源于stack exchange,提问作者Naresh S
相关产品推荐
相关产品推荐

