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://blogs.technet.microsoft.com/bulentozkir/2016/09/09/azure-resource-manager-rbac-management-practical-tips/

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

 

posted on 2019-01-10 16:31  铭的随记  阅读(437)  评论(0编辑  收藏  举报