Azure基于角色的用户接入控制(RBAC)

RBAC是Role Based Access Control是基于角色的接入控制的简称。在Azure推出ARM之后,对Azure各类资源的管理粒度已经很是细致,使得RBAC成为可能。sql

经过RBAC能够很是方便的给不一样的用户分配不一样的资源的不一样权限。nosql

本文将以一个最通用的例子来介绍如何给一个用户分配相关的权限。ide

一 需求this

用户vmops只能对资源组1的虚拟机和资源组2的特定虚拟机进行开、关机或重启的动做。其余全部操做权限都没有。spa

二 实现rest

1 建立用户code

在Azure的老Portal上建立建立用户vmops@weiheng.partner.onmschina.cnblog

2 肯定能够访问的资源ip

vmops这个用户能够操做的资源有:资源

Subscription 2中的Resource Group 1

Subscription 2中的Resource Group 2中的VM 1

Subscription 1中全部的VM

能够进行的操做有:

Start、restart、powerOff、Deallocate

3 经过PowerShell进行相关配置

A 首先须要获得VM能够操做的动做:

Get-AzureRMProviderOperation Microsoft.Compute/virtualMachines/* | ft operation
WARNING: The output object type of this cmdlet will be modified in a future release.
Operation
---------
Microsoft.Compute/virtualMachines/read
Microsoft.Compute/virtualMachines/write
Microsoft.Compute/virtualMachines/delete
Microsoft.Compute/virtualMachines/start/action
Microsoft.Compute/virtualMachines/powerOff/action
Microsoft.Compute/virtualMachines/redeploy/action
Microsoft.Compute/virtualMachines/restart/action
Microsoft.Compute/virtualMachines/deallocate/action
Microsoft.Compute/virtualMachines/generalize/action
Microsoft.Compute/virtualMachines/capture/action
Microsoft.Compute/virtualMachines/vmSizes/read
Microsoft.Compute/virtualMachines/instanceView/read
Microsoft.Compute/virtualMachines/extensions/read
Microsoft.Compute/virtualMachines/extensions/write
Microsoft.Compute/virtualMachines/extensions/delete

 

B 获取三种资源的ID

1 subscription ID

Get-AzureRmSubscription | ft SubscriptionID
SubscriptionId
--------------
$Sub1
$Sub2

 

2 Subscription 2 中的Resouce Group ID

Get-AzureRmResourceGroup | ft ResourceId
ResourceId
----------
/subscriptions/$Sub1/resourceGroups/hwnosql
/subscriptions/$Sub1/resourceGroups/hwiscsi

3 hwiscsi中vm1的Id

get-azurermvm -ResourceGroupName hwiscsi | ft id
Id
/subscriptions/$Sub1/resourceGroups/hwiscsi/providers/Microsoft.Compute/virtualMachines/hwiscsi01
/subscriptions/$Sub1/resourceGroups/hwiscsi/providers/Microsoft.Compute/virtualMachines/hwiscsi02
/subscriptions/$Sub1/resourceGroups/hwiscsi/providers/Microsoft.Compute/virtualMachines/hwiscsiwin

 

C 定义新的Role

首先得到已有的Role的类型

Get-AzureRmRoleDefinition | ft name
Name
----
API Management Service Contributor
Application Insights Component Contributor
BizTalk Contributor
Classic Network Contributor
Classic Storage Account Contributor
Classic Virtual Machine Contributor
ClearDB MySQL DB Contributor
Contributor
Data Factory Contributor
DocumentDB Account Contributor
Intelligent Systems Account Contributor
Network Contributor
New Relic APM Account Contributor
Owner
Reader
Redis Cache Contributor
Scheduler Job Collections Contributor
Search Service Contributor
SQL DB Contributor
SQL Security Manager
SQL Server Contributor
Storage Account Contributor
User Access Administrator
Virtual Machine Contributor
Web Plan Contributor
Website Contributor

本方案经过Virtual Machine Contributor的模板修改。

#获取"Virtual Machine Contributor"配置
$role = Get-AzureRmRoleDefinition "Virtual Machine Contributor" 
$role.Id = $null 
$role.Name = "Virtual Machine Operator" 
$role.Description = "Can monitor and start stop or restart virtual machines." 
$role.Actions.Clear() 

#添加周边资源读的权限
$role.Actions.Add("Microsoft.Storage/*/read") 
$role.Actions.Add("Microsoft.Network/*/read") 
$role.Actions.Add("Microsoft.Compute/*/read") 
$role.Actions.Add("Microsoft.Authorization/*/read") 
$role.Actions.Add("Microsoft.Resources/subscriptions/resourceGroups/read") 

#添加VM相关的操做权限
$role.Actions.Add("Microsoft.Compute/virtualMachines/start/action") 
$role.Actions.Add("Microsoft.Compute/virtualMachines/restart/action") 
$role.Actions.Add("Microsoft.Compute/virtualMachines/powerOff/action") 
$role.Actions.Add("Microsoft.Compute/virtualMachines/deallocate/action") 
$role.Actions.Add("Microsoft.Insights/alertRules/*") 

#把两个Subscription加入到这个Role管理范围中
$role.AssignableScopes.Clear() 
$role.AssignableScopes.Add("/subscriptions/$Sub1") 
$role.AssignableScopes.Add("/subscriptions/$Sub2") 

#添加角色
New-AzureRmRoleDefinition -Role $role
Name : Virtual Machine Operator
Id : 55aca895-61dc-4162-b7a6-fbab532d14a2
IsCustom : True
Description : Can monitor and start stop or restart virtual machines.
Actions : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read, Microsoft.Compute/virtualMachines/start/action...}
NotActions : {}
AssignableScopes : {/subscriptions/$Sub1}
 

 

D 给用户分配权限

New-AzureRmRoleAssignment -SignInName vmops@weiheng.partner.onmschina.cn -Scope /subscriptions/$Sub1/resourceGroups/hwnosql -RoleDefinitionName "Virtual Machine Operator" 
New-AzureRmRoleAssignment -SignInName vmops@weiheng.partner.onmschina.cn -Scope /subscriptions/$Sub1/resourceGroups/hwiscsi/providers/Microsoft.Compute/virtualMachines/hwiscsiwin -RoleDefinitionName "Virtual Machine Operator" 
New-AzureRmRoleAssignment -SignInName vmops@weiheng.partner.onmschina.cn -Scope /subscriptions/$Sub2 -RoleDefinitionName "Virtual Machine Operator" 

三 检测

经过用户登录Portal后,能够对定义过的资源进行管理,但对没有权限的资源不能进行管理。

下图显示,ResourceGroup nosql中的VM能够被管理,但只能操做定义过的权限,好比Stop VM

下图显示,虚拟机iscsiwin能够被管理,但只能显示定义过权限的操做:Start、Stop、Restart:

而admin的权限多了delete的菜单:

另外,对于VM之外的资源,好比建立StorageAccount,vmops这个用户是没有管理权限的:

建立VNET,一样没有权限:

四 总结:

经过Azure ARM中的资源的受权,能够实现对不一样用户不一样权限的控制。

受权的动做包括一些步骤:

  1. 建立角色Role,包括:能够操做的动做、不能够操做的动做
  2. 建立用户
  3. 把用户、角色、资源联结起来
相关文章
相关标签/搜索