自定义Azure策略报错:仅允许特定AD组创建公网IP问题排查
自定义Azure策略拒绝非指定AD组创建公网IP的问题修正
你的策略存在几个关键问题,导致无法正常工作,以下是问题点和修正方案:
问题点分析
- 资源字段使用错误:你用
owner字段判断权限,但Azure资源创建时还未设置所有者,且该字段不存储创建者的AD组信息。要验证请求发起者的身份归属,需使用requestContext().identity.principalId来获取当前请求的主体ID。 - Effect配置错误:你的目标是拒绝不符合条件的创建操作,却使用了
modify效果的配置(details内的operations等参数属于modify效果,Deny效果无需这些内容)。 - 参数名称拼写错误:代码中
alloweGroupsID拼写错误,正确应为allowedGroupsID。
修正后的策略代码
如果需求是仅允许指定AD组(以组ID直接匹配,适用于组作为服务主体发起请求)创建公网IP,可使用以下策略:
{ "parameters": { "effect": { "type": "String", "metadata": { "displayName": "Effect", "description": "启用或禁用策略执行" }, "allowedValues": [ "Deny", "Disabled" ], "defaultValue": "Deny" }, "allowedGroupsID": { "type": "Array", "metadata": { "displayName": "允许的Azure AD组ID", "description": "允许创建公网IP的Azure AD组ID列表" } } }, "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Network/publicIPAddresses" }, { "not": { "field": "requestContext().identity.principalId", "in": "[parameters('allowedGroupsID')]" } } ] }, "then": { "effect": "[parameters('effect')]" } }
扩展:允许组内用户创建公网IP
如果需要允许指定AD组内的所有用户创建公网IP(而非仅组本身),需检查请求发起者是否属于指定组,可使用角色分配关联检查:
{ "parameters": { "effect": { "type": "String", "metadata": { "displayName": "Effect", "description": "启用或禁用策略执行" }, "allowedValues": [ "Deny", "Disabled" ], "defaultValue": "Deny" }, "allowedGroupsID": { "type": "Array", "metadata": { "displayName": "允许的Azure AD组ID", "description": "允许创建公网IP的Azure AD组ID列表" } } }, "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Network/publicIPAddresses" }, { "not": { "exists": { "field": "Microsoft.Authorization/roleAssignments[*]", "where": { "allOf": [ { "field": "Microsoft.Authorization/roleAssignments[*].principalId", "in": "[parameters('allowedGroupsID')]" }, // 可根据实际需求调整角色,这里用网络参与者角色示例 { "field": "Microsoft.Authorization/roleAssignments[*].roleDefinitionId", "equals": "/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7" } ] } } } } ] }, "then": { "effect": "[parameters('effect')]" } }
内容的提问来源于stack exchange,提问作者uwi
相关产品推荐
相关产品推荐

