Azure ARM (17) 基于角色的访问控制 (Role Based Access Control, RBAC) - 自定义Role
《Windows Azure Platform 系列文章目录》
在上面一篇博客中,笔者介绍了如何在RBAC里面,设置默认的Role。
这里笔者将介绍如何使用自定的Role。
主要内容有:
一.了解Role中的Action和NotAction
二.通过PowerShell,查看相应的Action
三.编辑json Template,自定义Role
四.设置相应的Role
五.删除自定义Role
一.了解Role中的Action和NotAction
比如SQL DB Contributor这个Role,权限如下

允许的操作是Actions的操作,减去NotActions的操作。这个概念非常非常重要。
允许的操作是Actions的操作,减去NotActions的操作。这个概念非常非常重要。
允许的操作是Actions的操作,减去NotActions的操作。这个概念非常非常重要。
The access granted by a custom role is computed by subtracting the NotActions operations from the Actions operations.
二.通过PowerShell,查看相应的Action
我们知道在Azure ARM里面有非常多的服务,比如Azure Storage, Azure Virtual Machine, Azure SQL Database等。
还有非常多的操作,比如Read, Delete, List等等。
如果需要了解具体每一个服务和相应的操作步骤,我们需要查询相应的操作步骤Action。
具体命令如下:
#登录Azure China,以Admin身份登录
Add-AzureRmAccount -Environment AzureChinaCloud #选择当前订阅
Select-AzureRmSubscription -SubscriptionName '[订阅名称]' #获得所有对存储Storage的操作
Get-AzureRmProviderOperation Microsoft.Storage/* #获得所有对虚拟机VM的只读操作
Get-AzureRmProviderOperation Microsoft.Compute/*/read
在输出的内容中,我们可以选择相应的Action。图略。
三.编辑json Template,自定义Role
1.通过上面的Get-AzureRmProviderOperation语句,我们就可以查看到具体的操作。
在编辑json template之前,我们需要查看默认Role的Name和ID,防止自定义的Name和ID与默认的Role冲突。
具体的命令如下:
#登录Azure China,以Admin身份登录
Add-AzureRmAccount -Environment AzureChinaCloud #选择当前订阅
Select-AzureRmSubscription -SubscriptionName '[订阅名称]' #查看Azure已经存在的Role的Name,Id,IsCustom属性
Get-AzureRmRoleDefinition | Select Name,Id,IsCustom
执行结果如下图:

2.然后我们就可以编辑json Template,模板如下:
{
//这里是自定义Role的名称,请不要与Azure默认的Name冲突
"Name": "Cannot Delete Storage Account Role",
//这里是Role的ID,请不要与Azure默认的Id冲突
"Id": "11794e3b-eeeb-4e5c-a98b-27cc053a0b35",
//因为是自定义设置,所以Value为true
"IsCustom": true,
//这里是简单的Role的描述
"Description": "Cannot Delete Storage Account Role.",
"Actions": [
//这里是允许的操作
//对Azure Storage进行只读操作
"Microsoft.Storage/*/read",
//查看Role
"Microsoft.Authorization/*/read",
//对Resource Group的只读操作
"Microsoft.Resources/subscriptions/resourceGroups/read"
],
"NotActions": [
//请注意,这里不是拒绝的操作。
//用户最终的权限,是Actions,减去NotActions的权限
//The access granted by a custom role is computed by subtracting the NotActions operations from the Actions operations.
//https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-custom-roles#notactions
],
"AssignableScopes": [
//修改下面的subscription Id为用户Azure订阅ID
"/subscriptions/11111111-2222-3333-4444-1e2900a4504b"
]
}
将上面的文件保存为json格式,放在D盘根目录下,路径为D:\cannotdeletestorage.json
4.然后我们执行下面的Azure Powershell,把上面的cannotdeletestorage.json上传到Azure
#登录Azure China,以Admin身份登录
Add-AzureRmAccount -Environment AzureChinaCloud #选择当前订阅
Select-AzureRmSubscription -SubscriptionName '[订阅名称]' #上传本地PC机器上的json template文件
New-AzureRmRoleDefinition -InputFile 'D:\cannotdeletestorage.json'
执行成功后如下图:

四.设置相应的Role
1.打开Chrome浏览器,我们以服务管理员身份(Admin),登录Azure ARM Portal: https://portal.azure.cn
2.创建1个存储账户,还有2个Azure SQL Database资源。如下图:
可以看到一共有5个资源:

3.点击Azure Active Directory,把readonly账户,设置为自定义Role:Cannot Delete Storage Account Role

4.打开IE浏览器,以readonly账户登录Azure ARM Portal: https://portal.azure.cn,查看到的结果如下图:
可以看到只有1个资源。

这是因为我们在json template里面设置了Action
"Actions": [
//这里是允许的操作
//对Azure Storage进行只读操作
"Microsoft.Storage/*/read",
//查看Role
"Microsoft.Authorization/*/read",
//对Resource Group的只读操作
"Microsoft.Resources/subscriptions/resourceGroups/read"
],
对Storage存储账户是只读操作的,对Azure SQL Database不进行任何操作。所以readonly这个账户无法看到Azure SQL Database相应的资源。
5.因为readonly账户对Storage存储账户是只读操作的,所以无法删除存储账户。结果如下图:

五.删除自定义Role
1.如果用户不希望继续使用自定义Role,可以按照以下步骤操作。
2.打开Chrome浏览器,我们以服务管理员身份(Admin),登录Azure ARM Portal: https://portal.azure.cn。
把readonly账户删除自定义Role。如下图:

3.在Azure PowerShell里面执行以下命令:
#登录Azure China,以Admin身份登录
Add-AzureRmAccount -Environment AzureChinaCloud #选择当前订阅
Select-AzureRmSubscription -SubscriptionName '[订阅名称]' #可以根据自定义Role的Name进行删除
Remove-AzureRmRoleDefinition -Name 'Cannot Delete Storage Account Role' #或者根据自定义Role的ID,进行删除
Remove-AzureRmRoleDefinition -Id '[RoleID]'
执行结果:

最后如果大家有兴趣的话,可以查看下面这个自定义Role所拥有的权限
{
"Name": "Virtual Machine Operator",
"Id": "cadb4a5a-4e7a-47be-84db-05cad13b6769",
"IsCustom": true,
"Description": "Can monitor and restart virtual machines.",
"Actions": [
"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Authorization/*/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Insights/alertRules/*",
"Microsoft.Insights/diagnosticSettings/*",
"Microsoft.Support/*"
],
"NotActions": [
],
"AssignableScopes": [
"/subscriptions/c276fc76-9cd4-44c9-99a7-4fd71546436e",
"/subscriptions/e91d47c4-76f3-4271-a796-21b4ecfe3624",
"/subscriptions/34370e90-ac4a-4bf9-821f-85eeedeae1a2"
]
}
Azure ARM (17) 基于角色的访问控制 (Role Based Access Control, RBAC) - 自定义Role的更多相关文章
- Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role
<Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic ...
- Azure 门户中基于角色的访问控制入门
面向安全的公司应侧重于向员工提供他们所需的确切权限. 权限过多,可能会向攻击者公开帐户. 权限太少意味着员工无法有效地完成其工作. Azure 基于角色的访问控制 (RBAC) 可通过为 Azure ...
- YIi 权限管理和基于角色的访问控制
验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...
- RBAC (基于角色的访问控制)
基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而 ...
- RBAC: 基于角色的访问控制(Role-Based Access Control)
本文只讨论两种基于角色的访问控制的不同点,不涉及权限设计的数据库设计. 基于角色的访问控制(Role-Based Access Control)可分为隐式角色访问控制和显式角色访问控制. 隐式角色访问 ...
- 普通程序员看k8s基于角色的访问控制(RBAC)
一.知识准备 ● 上一节描述了k8s的账户管理,本文描述基于角色的访问控制 ● 网上RBAC的文章非常多,具体概念大神们也解释得很详细,本文没有站在高屋建瓴的角度去描述RBAC,而是站在一个普通程序员 ...
- [PHP]基于角色的访问控制RBAC
---------------------------------------------------------------------------------------------------- ...
- PHP RBAC权限管理 基于角色的访问控制演示
RBAC rbac:Role Based Access Controll,基于角色的访问控制. 今天理一理RBAC,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管 ...
- 移动服务和 Azure Active Directory 中基于角色的访问控制
编辑人员注释:本文章由 Matthew Henderson撰写 去年 11月,我们发布了 Azure Active Directory (AAD) 预览版作为移动服务身份提供程序.此举旨在为企业开 ...
随机推荐
- C语言 进程控制---创建进程fork()函数
#include "sys/types.h" #include "stdio.h" #include "stdlib.h" #include ...
- Android事件传递机制详解及最新源码分析——View篇
摘要: 版权声明:本文出自汪磊的博客,转载请务必注明出处. 对于安卓事件传递机制相信绝大部分开发者都听说过或者了解过,也是面试中最常问的问题之一.但是真正能从源码角度理解具体事件传递流程的相信并不多, ...
- 5_find grep sed awk 详解
find :查找文件系统中指定的文件.可以按文件名(-name) 权限(-perm) 归属人 查找. find 要查找文件的路径 表达式 *通配符 可以添加在文件名的任意位置 常用的例子( ...
- jmeter系列-------注意事项
1.自己创建的数据自己擅长,不要留垃圾数据 2.每个接口都需要增加断言,保证脚本的结果的正确性 3.相同的应用放在一个简单控制器下,所有的应用尽量放在一个线程组下面,将特殊场景单独抽离成一个线程组 4 ...
- URI和URL的区别 一起学习呗
一直存在很多技术上的争论,其中最为妙的恐怕就是web地址应该叫什么的问题.通常情况就是这样:有人把地址栏的内容叫"URL",这时候有些人就来劲了:"不!其实那就是URI. ...
- C# 爬虫 Jumony html解析
前言 前几天写了个爬虫,然后认识到了自己的不足.感谢 "倚天照海- -" ,我通过你推荐的文章,意外的发现了html解析的类库——Jumony. 研究了2天,我发现这个东西简单粗暴 ...
- LVS之DR模式实战及高可用性
author:JevonWei 版权声明:原创作品 LVS-DR实现同网段调度web模式 拓扑环境 网络环境 RS1 RIP 192.168.198.138/24 VIP 192.168.198.10 ...
- JAVA线程池应用的DEMO
在做很多高并发应用的时候,单线程的瓶颈已经满足不了我们的需求,此时使用多线程来提高处理速度已经是比较常规的方案了.在使用多线程的时候,我们可以使用线程池来管理我们的线程,至于使用线程池的优点就不多说了 ...
- ABP从入门到精通(6):快速重命名解决方案
SolutionRenamer SolutionRenamer 是一个解决方案快速重命名工具.经测试重命名一个全新asp.net zero core项目(ABP asp.net zero,.net c ...
- js变量以及其作用域详解
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp73 一.变量的类型 Javascript和Java.C这些语言不同 ...