Azure IAM自定义角色技术咨询:能否创建具备资源Contributor权限但禁止创建资源的角色
实现Azure IAM自定义角色:拥有Contributor权限但禁止资源创建
当然可以实现这种自定义角色!完全满足你在资源组级别授予、优先用角色而非Policy的需求,下面我给你拆解具体步骤:
核心思路
Contributor角色默认涵盖了资源的创建、修改、删除等全量权限,我们要做的就是保留除“创建资源”外的所有Contributor权限——通过自定义角色的NotActions字段来拒绝所有资源的创建操作,同时保留其他管理权限。
具体实现步骤
导出Contributor角色模板作为基础
先把默认的Contributor角色导出成JSON,方便我们修改:az role definition list --name "Contributor" --output json > contributor-base.json你也可以直接在Azure门户的「IAM -> 角色」里找到Contributor,点击「导出模板」下载JSON文件。
修改模板创建自定义角色
打开导出的JSON,修改以下部分:- 把
Name改成更清晰的名称,比如"Contributor (No Resource Creation)" - 设置
IsCustom为true - 更新
Description说明角色用途 - 关键是在
NotActions里添加拒绝创建的动作:{ "Name": "Contributor (No Resource Creation)", "IsCustom": true, "Description": "Full access to manage existing resources in a resource group, but cannot create any new resources", "Actions": [ "*" ], "NotActions": [ // 拒绝通过ARM模板创建资源 "Microsoft.Resources/deployments/write", // 拒绝直接创建资源 "Microsoft.Resources/resources/write", // 如果需要更精细控制,可添加特定资源类型的创建权限,比如: // "Microsoft.Compute/virtualMachines/write", // "Microsoft.Storage/storageAccounts/write" ], "AssignableScopes": [ "/subscriptions/你的订阅ID" // 可设置为订阅或特定资源组范围 ] }
解释一下:
Actions设为*保留了所有Contributor的操作,但NotActions里的write动作会直接拒绝资源创建(Azure中资源创建通常对应write动作)。如果不想一刀切,也可以只拒绝特定资源类型的创建权限。- 把
创建这个自定义角色
用Azure CLI执行命令创建角色:az role definition create --role-definition "path/to/your-custom-role.json"或者在Azure门户的「IAM -> 角色 -> 添加自定义角色」,上传修改后的JSON文件完成创建。
在资源组级别分配角色
找到目标资源组,进入「IAM -> 添加角色分配」,选择你刚创建的自定义角色,分配给对应的开发者用户或用户组即可。
补充说明
- 为什么优先选角色而非Policy?你提到角色更易于自动化管理,这个自定义角色完全可以通过Azure CLI、PowerShell或者ARM模板批量创建和分配,完美整合到你的IAM自动化流程里,比Policy更直接可控。
- 注意点:有些资源创建可能通过部署模板间接完成,所以一定要把
Microsoft.Resources/deployments/write加入NotActions,避免开发者绕开限制。
内容的提问来源于stack exchange,提问作者NitOxYs
相关产品推荐
相关产品推荐

