学习阿里云的访问控制策略
学习阿里云的访问控制
我们使用访问控制策略来描述如何保护系统中的资源, 准许执行哪些操作, 禁止执行哪些操作. 本文从常见的访问控制策略入手, 逐步了解阿里云平台的访问控制策略表达方法.
常见的访问控制
不同的系统, 根据系统所管理的资源及所支持的操作的特性, 采取了不同的访问控制策略.
Linux文件访问控制
熟悉Linux的朋友都知道文件的访问控制,可以给用户、组及其他用户不同的读、写、执行权限。
$ ls -ltotal 0-rw-r--r-- 1 gang wheel 0 May 18 08:47 file1.txt-rw-r--r-- 1 gang wheel 0 May 18 08:47 file2.txt-rwxr-xr-x 1 gang wheel 0 May 18 08:47 file3.sh-rwxr--r-- 1 gang wheel 0 May 18 08:47 file4
对file1.txt和file2.txt,用户gang 有读写权限;其他用户有只读权限;
对file3.sh,用户gang有读写和执行权限;其他用户有读和执行的权限;
对于file4,用户gang有读写和执行权限;其他用户有只读权限。
SQL数据库访问控制
熟悉SQL的朋友都知道数据库的访问控制,可以给不同的数据库对象以不同的操作权限。
GRANT SELECT, INSERT, UPDATE, DELETE on <DB>.<TABLE> to <User>@<Host>;
上述语句授予了来自Host的用户User,对于数据库DB中的表Table的增删改查操作权限。
云平台访问控制
相比单个文件系统和单个数据库,云平台中的资源有以下特征
- 资源分散在不同区域的数据中心中。
- 资源种类更多。比如ECS虚拟机,RDB数据库,NoSQL数据库,FaaS等。
- 不同类型的资源,可以执行的操作不同。
第一个特征和第二个决定了我们在定位资源时,要比Linux文件系统及数据库表更复杂。从逻辑上来说,应该包括区域,服务类型,租户和服务实例。包含租户,是因为云平台都是多租户隔离的,服务实例运行在租户(逻辑上)隔离的环境中。
第三个特征决定了我们在授予用户操作权限时,可授权的操作是由服务类型决定的。
假如我们有以下的授权需求:
"允许租户A(TenantA)的用户User1重启(Reboot)该租户位于北京区域(cn-beijing)的ECS实例Instance-01"
如果用类似SQL的语法来表达如下:
GRANT ECS_Reboot on 'cn-beijing'.'ECS'.'TenantA'.'Instance-01' to 'User1'@'TenantA'
云平台的访问控制服务所采纳的语法是基于JSON格式的. JSON格式对于互联网开发者而言更常用 -- 绝大部分的互联网API的请求和响应格式都是JSON.
我们把上述SQL格式的授权, 翻译为JSON格式的:
{
"Resources": ["'cn-beijing'.'ECS'.'TenantA'.'Instance-01'" ],
"Actions": [ "ECS_Reboot"],
"Users": ["User1@TenantA"]
}
一方面, 同样的访问控制策略, 既可以赋给用户A, 也可以赋给用户B; 另一方面, 用户A可能的权限可能同时由多个访问控制策略所共同决定. 因此, 我们应该把访问控制策略独立出来.
访问控制策略:
{
"Id": "Policy-1",
"Resources": ["cn-beijing.ECS.TenantA.Instance-01" ],
"Actions": [ "ECS_Reboot"]
},
{
"Id": "Policy-2",
"Resources": ["cn-shanghai.OSS.TenantA.MyFiles"],
"Actions": ["OSS_View", "OSS_Create"]
}
我们称用户被授予访问控制策略的过程叫做用户与访问控制策略的绑定.
{
"Binding": {"User": "User1@TenantA","Policies": ["Policy-1", "Policy-2"]
}
}
本文的重点是访问控制策略. 因此, 让我们把绑定的事情先放一放.
首先, 我们上面只说了正向的"准许"的访问权限, 那么我们能不能反向"拒绝"呢? 假设某个服务实例S的大部分操作, 我们都想赋给用户U, 只有很少的操作(X, Y)不能给他(她). 这种情况下, 与其列出准许的操作, 不如列出拒绝的操作.
{"Id": "Policy-3",
"Statements": [{ "Effect": "Allow","Resources" : ["S"],"Actions" : [ "*" ]},{ "Effect": "Deny","Resources": ["S"],"Actions": ["X", "Y"]}
]
}
由于默认情况下是没有授权的, 因此, 我们需要增加一个表示允许全部授权的规则, 然后再加上拒绝的规则. 这也意味着, "拒绝"规则的效力是高于"准许"规则的. 由于我们申明有了两(多)个规则, 因此, 增加一个"Statements"数组来表达它们.
其次, 作为一个平台, 我们将来可能会引入更多的策略表达能力, 因此, 我们需要引入策略规则版本的概念.
{"Id": "Policy-3","Version": "1.0",
"Statements": [{ "Effect": "Allow","Resources" : ["S"],"Actions" : [ "*" ]},{ "Effect": "Deny","Resources": ["S"],"Actions": ["X", "Y"]}
]
}
阿里云平台的访问控制
让我们拿一个真正的阿里云访问控制策略的例子来对比一下上面我们自己假想的访问控制策略.
{
"Version": "1",
"Statement": [{ "Effect": "Allow","Resource" : ["acs:ecs:*:*:instance/inst-001",
"acs:ecs:*:*:instance/inst-002"],"Action" : [ "ecs:*" ]},{ "Effect": "Deny","Resource": ["acs:ecs:*:*:instance/inst-001",
"acs:ecs:*:*:instance/inst-002"],"Action": ["ecs:Delete*", "ecs:Modify*", "ecs:Re*"]}
]
}
差别在哪里?
- 阿里云采用了单数表达法. 我们前面使用的是"Statements", "Resources", "Actions", 在阿里云中实际上是"Statement", "Resource", "Action".
- 阿里云中的全局资源名称中,各个部分之间的分隔符是冒号":"而不是点".", 而且统一使用了小写的名称, 它的一般写法是
"acs:<service-name>:<region>:<account>:<instance>"
. 其中, acs代表阿里云; service-name代表阿里云所提供的云服务的名字(英文代码), region表示数据中心区域(英文代码); account代表我们的账号ID; instance代表服务实例的ID. - 服务的全局操作名称也是使用了冒号来分割服务名称和操作名称, 它的一般写法是
"<service-name>:<API name>|<API name starts with (*) >"
- 参考阿里云的帮助文档, 我们可以发现阿里云的访问策略语法功能更丰富.
练习
设想以下场景:
我们团队有两个项目P1和P2,项目人员有产品工程师,开发工程师,测试工程师,运维工程师。其中项目的产品工程师是只负责各自的项目,开发工程师,测试工程师和运维工程师则同时参与两个项目中。我们为每个项目分别申请了一台测试机器,两台生产机器以及一个测试RDB数据库和一个高可用生产RDB数据库。测试环境的机器,开发工程师和开发工程师都可以查看和重启。生产环境的机器,只有运维工程师可以查看和重启。产品工程师只能查看所负责项目. 这个需求怎么用阿里云的访问控制策略实现?
项目P1:
P1-Test-App1, 用于测试环境的应用程序节点
P1-Test-RDB1, 用于测试环境的RDB数据库
P1-Prod-App1, P1-Prod-App2 用于生产环境的应用程序节点
P1-Prod-RDB1 用于生产环境的高可用版本的RDB数据库
项目P2:
P2-Test-App1, 用于测试环境的应用程序节点
P2-Test-RDB1, 用于测试环境的RDB数据库
P2-Prod-App1, P2-Prod-App2 用于生产环境的应用程序节点
P2-Prod-RDB1 用于生产环境的高可用版本的RDB数据库
参考文档
阿里云访问控制策略. 语法结构: https://help.aliyun.com/document_detail/28664.html; 基本元素: https://help.aliyun.com/document_detail/28663.html; 权限规则: https://help.aliyun.com/document_detail/28665.html
阿里云ECS鉴权: https://help.aliyun.com/document_detail/25494.html
阿里云RDB鉴权: https://help.aliyun.com/document_detail/26307.html
学习阿里云的访问控制策略相关推荐
- Esp8266进阶之路12 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏灯!
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...
- 阿里云ACA认证课程学习(阿里云简介掌握云服务器ECS)
阿里云ACA认证课程学习 阿里云高校计划 https://developer.aliyun.com/adc/college/ 阿里云简介 阿里云 成立于2009年9月10日 在杭州.北京和硅谷设有研发 ...
- 新手如何免费开始学习阿里云ECS云服务器?
云服务器(Elastic Compute Service, 简称ECS),是一种简单高效,处理能力可以弹性伸缩的计算服务.ECS的相关术语说明如下: 实例(Instance):是一个虚拟的计算环境,由 ...
- 阿里云服务器访问windows下网页(内网穿透)
最近在阿里云服务器上运行一个jar包,需要将运行后的结果传输到windows下网页http://localhost:8080/xxx,然后在idea中打印下来.阿里云上要运行的jar包的配置文件中写的 ...
- 有关阿里云ECS访问端口和加入安全组的说明
之前在博客里提到安全组里开放端口,即可访问服务器端口,如mysql3306和nacos的8848 情况说明: 由于上次的服务器到期,在双十一的时候又买了一台(3年200多元),于是在这台机器上安装了一 ...
- 最便宜的方式学习阿里云产品之使用竞价式实例ECS
小汤报名参加了阿里云的ACP考试.所以他想去阿里云官网购买一个ECS实例来进行练习,但是进入首页,他首先看到的是这样的,这让刚刚接触阿里云的小汤退却了.不过仔细研究阿里云的ECS后,小汤发现了一个特别 ...
- 高考后能学习——阿里云-winserver服务器购买以及使用(包含【.Net】、【PHP】、【MySQL】、【Navicat】、【Java】、安装)
前置条件 阿里云首页:https://www.aliyun.com/ 本操作需要注册与登录,并且钱包金额超100元,整个测试过程大概需要15~20元,建议充值120元,练习完毕之后可以退出来. 目录 ...
- 阿里云 代码访问mysql_阿里云远程怎么访问mysql_mysql
阿里云远程如何访问mysql [查看mysql用户的初始密码] 如果是用的"市场镜像" 装过php环境的 使用 cat /你的安装环境/account.log 查看你的mysql ...
- 解决阿里云服务器访问端口不通问题
目标 阿里云服务器上部署应用,需要在公网上访问 问题 公网访问的话,应该使用公网ip地址,目前测试1935端口不通 排查范围 1.未在安全组开放1935端口与对应协议 2.云服务器的防火墙未开放193 ...
最新文章
- swift 加载gif 框架图片
- python绘图实例-Python使用matplotlib简单绘图示例
- 欧拉工程第57题:Square root convergents
- 微信实时Look-alike算法分享赏析
- jsp与jsp页面间的值传递与接收
- java如何画矩形条和填充_java.awt.Graphics 类的哪个方法可绘制填充矩形?
- java读取txt写入excel,java中对txt和excel的读取和写入
- ETL数据导入/导出工具 HData
- 为了拿Ph.D而做出的诺贝尔奖
- HUSTOJ SPJ 示例
- 基于opencv答题卡识别
- [ACTF新生赛2020]easyre
- 修正 Newton 公式
- HackerRank 题目目录
- 免费PDF转JPG的开源软件
- 中国房地产还能火多久?
- [LINUX]解决Linux下ubuntu 20.04暂时不能解析域名“cn.archive.ubuntu.com”问题
- mysql请输入一个有效类型的长度值_MySQL数据库基础(三)——SQL语言
- 2018普渡大学计算机科学本科,2018-2021QS美国普渡大学世界排名变化(附热门学科排名)...
- GIS数据下载,全国省市县乡行政区划分