如何阻止非全局管理员在Azure创建新Public IP?现有政策是否影响存量资源?
问题解答
现有政策对存量资源的影响
现有政策的deny效果仅作用于新创建NIC或**修改存量NIC(比如添加公网IP到IP配置)**的操作:
- 已存在且未修改的NIC(已绑定公网IP)不会被政策阻止或变更
- 如果有人尝试修改存量NIC,给它新增公网IP配置,会被政策拦截
但现有政策存在明显局限:
- 只管控NIC,没覆盖直接创建
Microsoft.Network/publicIPAddresses资源的场景 - 没区分全局管理员的例外,全局管理员操作也会被拦截
- 仅通过资源组名称过滤,灵活性不足
更优的政策写法
下面的政策实现了以下目标:
- 阻止非全局管理员创建公网IP,或给VM/NIC分配公网IP
- 存量资源不受影响(仅拦截新创建/更新操作)
- 允许全局管理员绕过限制
政策规则示例
{ "policyRule": { "if": { "allOf": [ { "anyOf": [ // 场景1:创建公网IP资源 { "field": "type", "equals": "Microsoft.Network/publicIPAddresses" }, // 场景2:NIC绑定公网IP { "allOf": [ { "field": "type", "equals": "Microsoft.Network/networkInterfaces" }, { "field": "Microsoft.Network/networkInterfaces/ipconfigurations[*].publicIpAddress.id", "exists": true } ] }, // 场景3:VM创建时指定公网IP(通过NIC或直接配置) { "allOf": [ { "field": "type", "equals": "Microsoft.Compute/virtualMachines" }, { "anyOf": [ { "field": "Microsoft.Compute/virtualMachines/networkProfile.networkInterfaces[*].properties.ipConfigurations[*].publicIpAddress.id", "exists": true }, { "field": "Microsoft.Compute/virtualMachines/networkProfile.networkInterfaces[*].properties.publicIpAddress.id", "exists": true } ] } ] } ] }, // 排除全局管理员角色的用户 { "not": { "field": "jwt.claims.role", "equals": "Global Administrator" } } ] }, "then": { "effect": "deny" } }, "parameters": {}, "metadata": { "category": "Network" } }
关键说明
- 覆盖全场景:同时管控公网IP创建、NIC绑定公网IP、VM创建时关联公网IP三种核心场景
- 管理员例外:通过
jwt.claims.role判断用户角色,全局管理员可正常操作 - 不影响存量:
deny效果仅拦截新创建和更新操作,已存在的资源不受影响 - 灵活扩展:可根据需求添加资源组、订阅等过滤条件(比如只管控特定订阅)
额外注意事项
- 政策分配时,可通过排除范围指定不需要管控的资源组/订阅,进一步优化规则
- 若需要测试政策效果,可先将
effect设为audit,观察拦截日志后再改为deny
内容的提问来源于stack exchange,提问作者dana123
相关产品推荐
相关产品推荐

