订阅级RBAC角色咨询:类似Reader但限制密钥访问权限
解答:自定义RBAC角色实现你的需求
嘿,这个需求挺实用的!Azure 目前并没有提供现成的内置订阅级角色完全匹配你描述的「类Reader权限,但禁止访问Key Vault机密和Azure Storage blob密钥」的要求。不过咱们可以通过自定义RBAC角色轻松实现这个目标,具体步骤如下:
核心思路
我们可以基于内置的Reader角色权限,通过notActions字段排除掉那些允许访问敏感资源的特定权限,这样就能得到一个符合要求的自定义角色。
具体操作步骤
1. 导出Reader角色的基础定义
首先,把内置Reader角色的权限结构导出来,作为自定义角色的模板。用Azure CLI执行以下命令:
az role definition export --name "Reader" > custom-reader-role.json
2. 修改角色定义文件
打开导出的custom-reader-role.json,添加notActions字段,把需要禁止的权限列进去。重点要排除的权限包括:
- Key Vault机密读取权限:
Microsoft.KeyVault/vaults/secrets/read - Storage账户密钥相关操作:
Microsoft.Storage/storageAccounts/listKeys/action、Microsoft.Storage/storageAccounts/regenerateKey/action
修改后的核心JSON片段大概是这样:
{ "properties": { "roleName": "Custom Reader (No Secrets/Storage Keys)", "description": "Reader role without access to Key Vault secrets and Storage account keys", "assignableScopes": [ "/subscriptions/你的订阅ID" ], "permissions": [ { "actions": [ "*/read" ], "notActions": [ "Microsoft.KeyVault/vaults/secrets/read", "Microsoft.Storage/storageAccounts/listKeys/action", "Microsoft.Storage/storageAccounts/regenerateKey/action" ], "dataActions": [], "notDataActions": [] } ] } }
注意:记得把
assignableScopes里的订阅ID替换成你实际的订阅ID,也可以设置为根范围"/"让角色在所有订阅可用。
3. 创建自定义角色
用Azure CLI执行以下命令,将修改后的角色定义导入Azure:
az role definition create --role-definition custom-reader-role.json
额外说明
- 如果你还需要禁止其他敏感操作(比如访问Key Vault的证书、密钥),可以在
notActions里添加对应的权限(比如Microsoft.KeyVault/vaults/keys/read)。 - 自定义角色创建完成后,就可以像内置角色一样,在订阅级别或者资源组级别给用户/组/服务主体分配这个角色了。
内容的提问来源于stack exchange,提问作者Dhiraj
相关产品推荐
相关产品推荐

