Azure RBAC權限的細化一直是比較繁瑣的事情,如下示例拋磚引玉,供你們參考shell
客戶需求:ide
新用戶在指定資源組下權限需求以下:測試
1、禁止如下權限ui
一、 調整虛擬機大小配置rest
二、 刪除&中止虛擬機blog
三、 擴容磁盤&添加磁盤ip
四、 重置密碼ci
2、允許如下權限資源
一、 對應資源組下全部查看類權限作用域
二、 啓動診斷權限(查看屏幕快照)
三、 監視類權限
四、 特殊權限:重啓虛擬機&標記權限&提交工單權限
解決方法:
您能夠參考以下操做說明,以實現新用戶對指定資源組所具備的特定權限
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