Azure RBAC权限的细化一直是比较繁琐的事情,以下示例抛砖引玉,供大家参考
客户需求:
新用户在指定资源组下权限需求如下:
一、禁止以下权限
1、 调整虚拟机大小配置
2、 删除&停止虚拟机
3、 扩容磁盘&添加磁盘
4、 重置密码
二、容许以下权限
1、 对应资源组下所有查看类权限
2、 启动诊断权限(查看屏幕快照)
3、 监视类权限
4、 特殊权限:重启虚拟机&标记权限&提交工单权限
解决方法:
您可以参考如下操作说明,以实现新用户对指定资源组所具有的特定权限
1.AAD下创建新用户
2.在装有Azure Powershell的客户端执行如下操作
#登陆Azure账号
Add-AzureRmAccount -EnvironmentName AzureChinaCloud
#选择指定的订阅
Select-AzureRmSubscription -Subscription ***
#获取已有角色“虚拟机参与者”
$role = Get-AzureRmRoleDefinition -Name 'Virtual Machine Contributor'
#清空角色Id
$role.Id = $null
#给自定义角色命名及添加角色描述
$role.Name = 'Special Permission'
$role.Description = '***'
#清空“虚拟机参与者”的已有actions及notactions权限
$role.Actions.Clear()
$role.NotActions.Clear()
#赋予自定义角色所有资源的只读权限
$role.Actions.Add("*/read")
#赋予自定义角色重启虚拟机的权限
$role.Actions.Add("Microsoft.Compute/virtualMachines/restart/action")
#赋予自定义角色list存储账号key的权限,以实现查看诊断屏幕快照
$role.Actions.Add("Microsoft.Storage/storageAccounts/listKeys/action")
#赋予自定义角色添加诊断规则的权限,以实现监视类功能
$role.Actions.Add("Microsoft.Insights/AlertRules/*")
#赋予自定义角色更新虚拟机的权限,以实现标记功能
$role.Actions.Add("Microsoft.Compute/virtualMachines/write")
#阻止自定义角色查看虚拟机大小的功能
$role.NotActions.Add("Microsoft.Compute/virtualMachines/vmSizes/read")
#清空自定义角色的作用域,并授权指定订阅
$role.AssignableScopes.Clear()
$subscriptionid = "***"
$role.AssignableScopes.Add("/subscriptions/"+$subscriptionid)
#新建自定义角色
New-AzureRmRoleDefinition -Role $role
3.给指定资源组添加基于新用户的自定义角色权限
4.使用新用户登录Azure Portal测试验证
尝试关闭虚拟机报错
尝试删除虚拟机报错
不可以显示虚拟机大小,以阻止客户调整虚拟机大小
尝试附加数据磁盘报错
尝试重置密码报错
尝试创建虚拟机报错
可以成功查看虚拟机信息
可以成功标记虚拟机
更多有关RBAC的说明,请参考
https://docs.azure.cn/zh-cn/role-based-access-control/resource-provider-operations#microsoftcompute
https://docs.azure.cn/zh-cn/role-based-access-control/built-in-roles#virtual-machine-contributor