RAM中使用Policy(授权策略)来描述授权的具体内容,授权内容主要包含效力(Effect)、资源(Resource)、对资源所授予的操作权限(Action)以及限制条件(Condition)这几个基本元素。
授权效力包括两种:允许(Allow)和拒绝(Deny)。
资源是指被授权的具体对象。比如,访问策略“允许张三对资源SampleBucket执行GetBucket操作”中的资源是“SampleBucket”。
操作方法是指对具体资源的操作。比如,访问策略“允许张三对资源SampleBucket执行GetBucket操作”中的操作是“GetBucket”。
限制条件是指授权生效的限制条件。比如,访问策略“允许张三在2011年12月31日之前对资源SampleBucket执行GetBucket操作”中的限制条件是“在2011年12月31日之前”。
Policy结构包括Policy版本号及授权语句列表。每个授权语句又包括Effect(授权类型)、Action(操作名称列表)、Resource(操作对象列表)以及Condition(条件限制),其中Condition是可选项。
Policy结构简述如下:
目前RAM仅仅支持JSON格式的描述。当创建或更新Policy时,RAM会首先检查JSON格式的正确性。关于JSON的语法标准请参考RFC 7159。用户也可以使用一些在线的JSON格式验证器和编辑器来校验JSON文本的有效性。
语法描述的符号使用说明: 2. 描述语法使用的特殊字符有: 3. 当一个元素允许多值时,这里使用逗号和省略号来表达,比如: 4. 在所有支持多值的语法中,使用单值也是有效的。而且这两种表达方式是等效的: 5. 带有问号的元素表示这是一个可选元素,比如: 6. 多值之间用竖线(|)隔开,表示取值只能选取这些值中的某一个。比如: 7. 使用双引号引起了的元素,表示它是文本串。比如:
Action支持多值,取值为云服务所定义的API操作名称,其格式定义如下:
Resource通常指操作对象,比如ECS虚拟机实例,OSS存储对象。我们使用如下格式来命名阿里云服务的资源命名。
条件块(Condition Block)由一个或多个条件子句构成。一个条件子句由条件操作类型、条件关键字和条件值组成。条件操作类型和条件关键字在下文中会有详细描述。
是否满足条件的判断原则如下图所示。描述如下:(1) 一个条件关键字可以指定一个或多个值,在条件检查时,如果条件关键字的值与指定值中的某一个相等,即可判定条件满足。(2) 同一种条件操作类型的条件子句下的多个条件关键字同时满足的情况下,才能判定该条件子句满足。(3) 条件块下的所有条件子句同时满足的情况下,才能判定该条件块满足。
我们支持如下条件操作类型:字符串类型、数字类型、日期类型、布尔类型和IP地址类型。每种条件操作类型分别支持如下的方法:
阿里云保留的条件关键字命名格式为:
阿里云保留了如下通用条件关键字:
发送请求是否使用了安全信道,如HTTPS |
发送请求时的客户端IP地址 |
用户登录时是否使用了多因素认证(二步认证) |
部分产品定义了产品级别的条件关键字,格式如下:
不同产品定义的条件关键字,请参见各产品的用户文档。
RAM用户身份的授权策略检查逻辑
RAM用户访问资源时,默认没有任何权限,除非有进行显式的授权(给RAM用户绑定授权策略)。授权策略语句支持Allow(允许)和Deny(禁止)两种授权类型,当多个授权语句对一个资源操作分别出现Allow和Deny授权时,我们使用Deny优先的原则。
授权策略检查逻辑如下图所示:
RAM用户访问资源时,权限检查逻辑如下:
RAM角色身份的授权策略检查逻辑
RAM角色(使用角色访问令牌)访问资源时,权限检查逻辑如下:
注:本文章摘抄于阿里云帮助文档,用来汇总起来方便自己查看。