《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.

  https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-custom-roles#notactions

  二.通过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的更多相关文章

  1. Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role

    <Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic ...

  2. Azure 门户中基于角色的访问控制入门

    面向安全的公司应侧重于向员工提供他们所需的确切权限. 权限过多,可能会向攻击者公开帐户. 权限太少意味着员工无法有效地完成其工作. Azure 基于角色的访问控制 (RBAC) 可通过为 Azure ...

  3. YIi 权限管理和基于角色的访问控制

    验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...

  4. RBAC (基于角色的访问控制)

    基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而 ...

  5. RBAC: 基于角色的访问控制(Role-Based Access Control)

    本文只讨论两种基于角色的访问控制的不同点,不涉及权限设计的数据库设计. 基于角色的访问控制(Role-Based Access Control)可分为隐式角色访问控制和显式角色访问控制. 隐式角色访问 ...

  6. 普通程序员看k8s基于角色的访问控制(RBAC)

    一.知识准备 ● 上一节描述了k8s的账户管理,本文描述基于角色的访问控制 ● 网上RBAC的文章非常多,具体概念大神们也解释得很详细,本文没有站在高屋建瓴的角度去描述RBAC,而是站在一个普通程序员 ...

  7. [PHP]基于角色的访问控制RBAC

    ---------------------------------------------------------------------------------------------------- ...

  8. PHP RBAC权限管理 基于角色的访问控制演示

    RBAC rbac:Role Based Access Controll,基于角色的访问控制. 今天理一理RBAC,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管 ...

  9. 移动服务和 Azure Active Directory 中基于角色的访问控制

    编辑人员注释:本文章由 Matthew Henderson撰写 去年 11月,我们发布了 Azure Active Directory (AAD) 预览版作为移动服务身份提供程序.此举旨在为企业开 ...

随机推荐

  1. MySQL (八)

    1 事务 需求:有一张银行账户表,A用户给B用户转账,A账户先减少,B账户增加,但是A操作完之后断电了. 解决方案:A减少钱,但是不要立即修改数据表,B收到钱之后,同时修改数据表. 事务:一系列要发生 ...

  2. 关于操作系统中多个fork()会创建几个进程的理解

    最近在看操作系统的书,在讲到用fork()创建子进程时,有些地方一时迷惑,最终理解,特记录下来.如下: //创建一个子进程:#include "csapp.h" int main( ...

  3. Android辅助功能原理与基本使用详解-AccessibilityService

    辅助功能原理与基本使用详解 本文主要介绍辅助功能的使用 辅助功能基本原理 辅助功能基本配置和框架搭建 辅助功能实战解析 辅助功能基本原理   辅助功能(AccessibilityService)其实是 ...

  4. 【MD5解密】免费帮大家解MD5

    除睡觉时间外最慢2小时内回复!结合各种国内外免费收费引擎和高效彩虹表,需要解的在评论下方评论即可

  5. java-多个数的和

    目的:实现多个整数相加. 思路:1.首先要确定用户所需整数的个数n,此部分由用户在键盘上输入. 2.创建一个长度为n的数组. 3.用户从键盘上输入n个整数并判断是否输入正确,正确则存入数组,否则重新输 ...

  6. shell变量$(CURDIR),$0,$1,$2,$#含义解释

    $(CURDIR):   CURDIR是make的内嵌变量, 为当前目录 实例 SRCTREE := $(CURDIR) *$(CURDIR)为当前目录,相当于SRCTREE=./ MKCONFIG ...

  7. HDU 6200 2017沈阳网络赛 树上区间更新,求和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6200 题意:给个图,有2种操作,一种是加一条无向边,二是查询u,v之间必须有的边的条数,所谓必须有的边 ...

  8. 从聚合数据请求菜谱大全接口数据,解析显示到ListView

  9. datable 翻页事件处理

    JQuery datatable插件,点下一页在点击事件无效问题 (2013-10-16 16:01:54) 转载▼   分类: C# 在MVC的项目中,我利用jquery datatable 来实现 ...

  10. 自制MPLS解决路由黑洞实验

    利用mpls解决BGP路由黑洞配置命令全解析 --By Jim 什么是BGP路由黑洞? BGP规定无论路由器是否启动bgp都要无条件地转发BGP消息和更新包(凌驾于IGP之上),违背了IGP" ...