阿里云 RAM 策略整理
RAM授权策略语言
基本元素
RAM中使用Policy(授权策略)来描述授权的具体内容,授权内容主要包含效力(Effect)、资源(Resource)、对资源所授予的操作权限(Action)以及限制条件(Condition)这几个基本元素。
效力(Effect)
授权效力包括两种:允许(Allow)和拒绝(Deny)。
资源(Resource)
资源是指被授权的具体对象。比如,访问策略“允许张三对资源SampleBucket执行GetBucket操作”中的资源是“SampleBucket”。
操作方法(Action)
操作方法是指对具体资源的操作。比如,访问策略“允许张三对资源SampleBucket执行GetBucket操作”中的操作是“GetBucket”。
限制条件(Condition)
限制条件是指授权生效的限制条件。比如,访问策略“允许张三在2011年12月31日之前对资源SampleBucket执行GetBucket操作”中的限制条件是“在2011年12月31日之前”。
语法结构
Policy结构包括Policy版本号及授权语句列表。每个授权语句又包括Effect(授权类型)、Action(操作名称列表)、Resource(操作对象列表)以及Condition(条件限制),其中Condition是可选项。
Policy结构简述如下:
支持JSON格式描述
目前RAM仅仅支持JSON格式的描述。当创建或更新Policy时,RAM会首先检查JSON格式的正确性。关于JSON的语法标准请参考RFC 7159。用户也可以使用一些在线的JSON格式验证器和编辑器来校验JSON文本的有效性。
Policy语法
语法描述的符号使用说明:
1. Policy所包含的JSON字符有: { } [ ] " , : 2. 描述语法使用的特殊字符有: = < > ( ) | 3. 当一个元素允许多值时,这里使用逗号和省略号来表达,比如: [<action_string>, <action_string>, ...] 4. 在所有支持多值的语法中,使用单值也是有效的。而且这两种表达方式是等效的: "Action": [<action_string>] 和 "Action": <action_string> 5. 带有问号的元素表示这是一个可选元素,比如: <condition_block?> 6. 多值之间用竖线(|)隔开,表示取值只能选取这些值中的某一个。比如: ("Allow" | "Deny") 7. 使用双引号引起了的元素,表示它是文本串。比如: <version_block> = "Version" : ("1")
语法描述:
policy = { <version_block>, <statement_block> } <version_block> = "Version" : ("1") <statement_block> = "Statement" : [ <statement>, <statement>, ... ] <statement> = { <effect_block>, <action_block>, <resource_block>, <condition_block?> } <effect_block> = "Effect" : ("Allow" | "Deny") <action_block> = ("Action" | "NotAction") : ("*" | [<action_string>, <action_string>, ...]) <resource_block> = ("Resource" | "NotResource") : ("*" | [<resource_string>, <resource_string>, ...]) <condition_block> = "Condition" : <condition_map> <condition_map> = { <condition_type_string> : { <condition_key_string> : <condition_value_list>, <condition_key_string> : <condition_value_list>, ... }, <condition_type_string> : { <condition_key_string> : <condition_value_list>, <condition_key_string> : <condition_value_list>, ... }, ... } <condition_value_list> = [<condition_value>, <condition_value>, ...] <condition_value> = ("String" | "Number" | "Boolean")
- 当前支持的Policy版本为1。
- 一个Policy可以有多条授权语句(Statement)。
- 每条授权语句要么是Deny,要么是Allow。一条授权语句中,Action是一个支持多个操作的列表,Resource也是一个支持多个对象的列表。
- 每条授权语句都支持独立的限制条件。一个条件块可以支持多种条件操作类型,以及对这多种条件的逻辑组合。
- 一个用户可以被授予多个Policy,当这些Policy存在多条授权语句既包含有Allow又包含有Deny时,我们遵循Deny优先(只认Deny不认Allow)原则。
- 当取值为数字或布尔值时,与字符串类似,需要用双引号引起。
- 当元素取值为字符串值时,可以支持(*)和(?)模糊匹配。(*)可以代表0个或多个任意的英文字母,(?)可以代表1个任意的英文字母。比如,”ecs:Describe*” 可以表示ecs的所有以Describe开头的API操作名称。
Effect(授权类型)
Effect取值为Allow或Deny。比如,
"Effect": "Allow"
Action(操作名称列表)
Action支持多值,取值为云服务所定义的API操作名称,其格式定义如下:
<service-name>:<action-name>
格式说明:
service-name: 阿里云产品名称,如ecs, rds, slb, oss, ots等。
action-name: service相关的api操作接口名称。
描述样例:
"Action": ["oss:ListBuckets", "ecs:Describe*", "rds:Describe*"]
Resource(操作对象列表)
Resource通常指操作对象,比如ECS虚拟机实例,OSS存储对象。我们使用如下格式来命名阿里云服务的资源命名。
acs:<service-name>:<region>:<account-id>:<relative-id>
格式说明:
- acs: Aliyun Cloud Service的首字母缩写,表示阿里云的公有云平台
- service-name: 阿里云提供的Open Service的名字,如ecs, oss, ots等
- region: 地区信息。如果不支持该项,可以使用通配符“*”号来代替
- account-id: 账号ID,比如 1234567890123456,也可以用“*”代替
- relative-id: 与service相关的资源描述部分,其语义由具体service指定。这部分的格式描述支持类似于一个文件路径的树状结构。以oss为例,relative-id = “mybucket/dir1/object1.jpg”表示一个OSS对象。
描述样例:
"Resource": ["acs:ecs:*:*:instance/inst-001", "acs:ecs:*:*:instance/inst-002", "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*"]
Condition(条件限制)
条件块(Condition Block)由一个或多个条件子句构成。一个条件子句由条件操作类型、条件关键字和条件值组成。条件操作类型和条件关键字在下文中会有详细描述。
是否满足条件的判断原则如下图所示。描述如下:(1) 一个条件关键字可以指定一个或多个值,在条件检查时,如果条件关键字的值与指定值中的某一个相等,即可判定条件满足。(2) 同一种条件操作类型的条件子句下的多个条件关键字同时满足的情况下,才能判定该条件子句满足。(3) 条件块下的所有条件子句同时满足的情况下,才能判定该条件块满足。
条件块判断逻辑:
条件操作类型
我们支持如下条件操作类型:字符串类型、数字类型、日期类型、布尔类型和IP地址类型。每种条件操作类型分别支持如下的方法:
String
- StringEquals
- StringNotEquals
- StringEqualsIgnoreCase
- StringNotEqualsIgnoreCase
- StringLike
- StringNotLike
Numeric
- NumericEquals
- NumericEquals
- NumericLessThan
- NumericLessThanEquals
- NumericGreaterThan
- NumericGreaterThanEquals
Date and time
- DateEquals
- DateNotEquals
- DateLessThan
- DateLessThanEquals
- DateGreaterThan
- DateGreaterThanEquals
Boolean
- Bool
IP address
- IpAddress
- NotIpAddress
条件关键字
阿里云保留的条件关键字命名格式为:
acs:<condition-key>
阿里云保留了如下通用条件关键字:
ACS保留条件关键字 | 类型 | 说明 |
---|---|---|
acs:CurrentTime | Date and time | Web Server接收到请求的时间,以ISO 8601格式表示,如2012-11-11T23:59:59Z |
acs:SecureTransport | Boolean | 发送请求是否使用了安全信道,如HTTPS |
acs:SourceIp | IP address | 发送请求时的客户端IP地址 |
acs:MFAPresent | Boolean | 用户登录时是否使用了多因素认证(二步认证) |
部分产品定义了产品级别的条件关键字,格式如下:
<service-name>:<condition-key>
不同产品定义的条件关键字,请参见各产品的用户文档。
权限检查规则
基本模型
- 当主账号身份访问资源时,如果主账号是资源Owner,则允许访问;否则不允许访问。该规则的例外情况说明:存在极少数云产品(如SLS)直接支持对跨云账号ACL授权,如果通过ACL授权检查,则允许访问。
- 当RAM用户身份访问资源时,如果RAM用户所属的主账号对资源有访问权限,并且主账号对RAM用户有显式的Allow授权策略,则允许访问;否则不允许访问。
- 当RAM角色身份访问资源时,如果RAM角色所属的主账号对资源有访问权限,并且主账号对RAM角色有显式的Allow授权策略,并且角色访问令牌(STS-Token)有显式的授权,则允许访问;否则不允许访问。
RAM用户身份的授权策略检查逻辑
RAM用户访问资源时,默认没有任何权限,除非有进行显式的授权(给RAM用户绑定授权策略)。授权策略语句支持Allow(允许)和Deny(禁止)两种授权类型,当多个授权语句对一个资源操作分别出现Allow和Deny授权时,我们使用Deny优先的原则。
授权策略检查逻辑如下图所示:
RAM用户访问资源时,权限检查逻辑如下:
- 按照RAM用户身份所绑定的授权策略是否有授权,如果是Deny,则拒绝访问;否则进入下一步检查。
- 检查RAM角色所属的主账号是否有访问权限。如果是资源Owner,则允许访问;否则查看该资源是否有支持跨账号ACL许可,有则允许访问,否则拒绝访问。
RAM角色身份的授权策略检查逻辑
RAM角色(使用角色访问令牌)访问资源时,权限检查逻辑如下:
- 如果当前访问令牌有指定授权策略(调用AssumeRole时所传入的授权策略参数),则按照上述授权策略检查逻辑进行判断,如果是Deny,则拒绝访问;否则进入下一步检查。 如果当前访问令牌没有指定授权策,则直接进入下一步检查。
- 检查RAM角色身份所绑定的授权策略是否有授权。如果是Deny,则拒绝访问;否则进入下一步检查。
- 检查RAM角色所属的主账号是否有访问权限。如果是资源Owner,则允许访问;否则查看该资源是否有支持跨账号ACL许可,有则允许访问,否则拒绝访问。
注:本文章摘抄于阿里云帮助文档,用来汇总起来方便自己查看。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《凌云》第六期——直击AWDC2014-阿里云生态系统观察
透过AWDC 2014,可以看到一个生机盎然、物种丰富的云计算生态圈正在蓬勃发展。观云计算的技术力量在更多传统领域的应用与发展,敬请阅读第六期《凌云》-“直击AWDC2014-阿里云生态系统观察”。 点击以下链接阅读文章: 视点 云栖小镇—阿里特色的云计算生态系统 刘振飞:做云计算比保障双十一要难得多 困知,勉行—阿里云服务观 驻云栖,观云起—2014阿里云开发者大会观察 技术专题 OpenSearch:轻松构建大数据搜索服务 探秘采云间:全链路数据处理工具直击传统DW/BI痛点 SLS:海量日志数据管理利器 迁云架构实践 云上游戏数据分析实践 实战云端CRM变革,挖掘零售电商潜能 从“如何设计用户超过1亿的应用”说起——数据库调优实战 应用实践 证券创新之翼—阿里金融云 Cloud先行者 跃兔:专注游戏业务,创业在云端 PP租车:共享型经济的倡导者与开拓者 新奥特云视:记者在现场,视频在云端 德澜:打造“未来之家”,把家电搬上互联网 网新恩普:电子政务云平台,助力人社系统新发展 网新创建:让停车智慧起来,快乐出行 顺风车:让身边的空座,成为他人的希望 为知笔记:用科技改变工作方式 点...
- 下一篇
全国首家阿里巴巴大数据学院落地贵州,计划三年内培养25000名人才
近日,贵州理工学院与阿里云宣布联合共建“阿里巴巴·贵州理工大数据学院”,促进高校、科研院所、企业科技教育资源共享,创立高校与科研院所、行业、企业联合培养人才的新机制。据悉,此次合作也是贵州省人民政府与阿里巴巴战略合作的重要落地项目之一。 今年8月,贵州省同阿里巴巴集团签署深化全面合作协议,计划在大数据人才培养、技术研发、创新创业、智慧城市等多个新领域展开合作,推动贵州成为“数据之都”。其中,大数据人才培养是合作的重要基础之一,当时即提出要在三年内为贵州培养2500名云计算与大数据高端专业人才和10000名专业技术人才。 此次贵州理工学院与阿里云联合建设“阿里巴巴•贵州理工大数据学院”,将探索新型校企合作模式。大数据学院将建设理工学院-大数据创新人才实训基地(联合实验室),引入企业场景的学习空间、阿里巴巴公共云工程实训平台、在线学
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Hadoop3单机部署,实现最简伪集群
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用