Azure基于ARM的RBAC

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

通过RBAC可以非常方便的给不同的用户分配不同的资源的不同权限。

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

一 需求

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

二 实现

1 创建用户

在Azure的老Portal上创建创建用户[email protected]

2 确定可以访问的资源

vmops这个用户可以操作的资源有:

Subscription 1中的VM

Subscription 2中的Resource Group 1

Subscription 2中的Resource Group 2中的VM 1

可以进行的操作有:

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

?

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
[email protected]
-Scope
/subscriptions/$Sub1/resourceGroups/hwnosql
-RoleDefinitionName
"Virtual Machine Operator"

New-AzureRmRoleAssignment
-SignInName
[email protected]
-Scope
/subscriptions/$Sub1/resourceGroups/hwiscsi/providers/Microsoft.Compute/virtualMachines/hwiscsiwin
-RoleDefinitionName
"Virtual Machine Operator"

New-AzureRmRoleAssignment
-SignInName
[email protected]
-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. 把用户、角色、资源联结起来

?

时间: 2024-07-30 00:17:37

Azure基于ARM的RBAC的相关文章

用PowerShell在China Azure创建ARM虚拟机

Azure目前有两种工作模式:ASM和ARM. 在国内的Azure,我们都是使用ASM的模式.但这种模式有很多限制,比如每个VM必须有一个公网地址,部署不能批量部署等等.ARM对Azure的整体架构做了巨大的修改.在ASM中的很多限制都去掉了.下图是两种模式主要的差别: 今年中Azure在中国将全面支持ARM的模式.目前需要注意的是,在China Azure上需要采用PowerShell的版本是1.2.2.最新版的1.3.2和1.4.0有一些服务不能创建.具体的下载地址是: https://gi

基于ARM处理器的反汇编器软件简单设计及实现

写在前面 2012年写的,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性进行验证,对那些直接与CPU 相关的目标代码进行安全性分析: 涉及的主要内容 分析ARM处理器指令的特点,以及编译以后可执行的二进制文件代码的特征: 将二进制机器代码经过指令和数据分开模块的加工处理: 分解标识出指令代码和数据代码: 然后将指令代码反汇编并加工成易于阅读的汇编指令形式的文件: 下面给出个示例

DreamHouse项目(基于ARM与ZIGBEE技术的智能家居)之项目展示

这是本人做的一次有关智能家居的项目,仅是用来参加比赛的!或者是我用来练手的吧!大概花费了我近2个月的时间来完成他,平台是建立在博创S3C2410的嵌入式的箱子上的,我觉得我唯一没有足够自信说是自己写的代码的话就是驱动部分了,毕竟当时的状态也是刚刚把单片机的知识全部学会罢了,因为这是基础中的基础,对于C语言,在校的学生普遍是没有完全掌握的,对于开发真的知识储备确实不够!好吧废话我不多说了,先讲讲我自己做的项目吧!学生的练手项目,大家应该不会来喷我吧! 上图先! 通用模块 我本人真的是没有做出来,但

基于ARM的车牌识别技术研究与实现

在云盘里包含了我本科毕业设计的全部资料和代码.主要涉及下面摘要中的几个部分.虽然系统无法实用,但是适合机器视觉和嵌入式方向的入门.希望能对有志从事相关方向的朋友有所帮助.本人现在在深圳从事机器视觉算法工程师职业.现在做人脸识别相关系统.希望能和网络上的有志之士一起在相关方向上学习和进步. 本文首先介绍了课题背景和研究现状,然后介绍了方案选择和设计过程.设计过程包括车牌识别程序设计,引导程序设计,内核驱动设计和文件系统设计.车牌识别程序设计中的车牌定位采用边缘检测和支持向量机相结合的定位算法,字符

基于ARM的指纹识别门禁系统设计方案

现代社会高速发展,很多场合需要身份确认,传统的身份识别技术已经不能满足社会要求.人的身体特征具有不可复制性,因此人们开始研究生物识别技术,而指纹具有唯一性.终生不变性.难于伪造等特点,安全性高,因而得到了广泛应用.在一些机要部门,如银行.宾馆.机房等一般都安装有门禁系统,门禁系统是为保障人们生活.工作及财产安全, 对重要通道的出入口进行管理与控制的系统,基于指纹识别技术的门禁系统是一项高科技安全设施,提高了系统的安全性.ARM作为一种嵌入式系统处理器,具有高性能.低功耗.低成本等特点,因而在工业

基于ARM核AT75C220在指纹识别系统中应用

纹识别技术近年来逐渐成熟,在门禁.安防和金融等方面得到了越来越广泛的应用.典型的指纹识别系统是以指纹传感器和DSP处理器为核心构成.指纹传感器采集指纹图像,DSP处理器实时实现指纹识别算法.同时,通常的指纹识别系统还具有较强的通信能力,除了具有RS485通信外,高档的指纹识别系统还要求具有以太网接口和Internet连接能力.Atmel公司新推出的智能互联网芯片AT75C220集成了ARM内核.DSP协处理器以及以太网MAC接口,用AT75C220和指纹传感器结合可构成高性能的指纹识别系统. 1

基于ARM的SoC设计入门[转]

原文:基于ARM的SoC设计入门 我们跳过所有对ARM介绍性的描述,直接进入工程师们最关心的问题.要设计一个基于ARM的SoC,我们首先要了解一个基于ARM的SoC的结构.图1是一个典型的SoC的结构: 图1从图1我们可以了解这个的SoC的基本构成: ARM core:ARM966E AMBA 总线:AHB+APB 外设IP(Peripheral IPs):VIC(Vector Interrupt Controller), DMA, UART, RTC, SSP, WDT…… Memory bl

基于ARM的数据中心路在何方?

我们已经了解到百度采用ARM处理器研发数据存储节点.另外,还有一些Startup公司在研发基于ARM的服务器.今年,AMD又宣布开始研发基于ARM的处理器,不再局限于X86处理器架构.这一切都在说明什么?ARM正往数据中心前进. ARM处理器采用RISC的架构,其具有很好的性能/功耗比.对于数据中心而言,低功耗是一个永恒的话题.虽然,在服务器领域,以Intel为首的X86架构一度将MIPS.SPARC击溃,占据了服务器市场的重要份额.所以,如今放眼望去无论是存储设备还是应用服务器,基本都是采用了

基于ARM Cortex-A8和Android 4.x的联动报警系统视频教程

基于ARM Cortex-A8和Android 4.x的联动报警系统 (Android .A8.Linux.驱动.NDK)课程讲师:老夫子 课程分类:Android适合人群:高级课时数量:38(70节)课时更新程度:完毕用到技术:Android.A8.210.Linux.驱动.NDK.报警涉及项目:联动报警系统 联系QQ:1609173918链接:http://down.51cto.com/data/2037421 1.课程研发环境 本课程包括JAVA应用.C语言驱动.NDK(应用调用驱动)等方