阅读417 返回首页    go 阿里云


Policy语法结构__附录1: 授权策略语言_用户指南_访问控制-阿里云

Policy结构简述

Policy结构包括Policy版本号及授权语句列表。每个授权语句又包括Effect(授权类型)、Action(操作名称列表)、Resource(操作对象列表)以及Condition(条件限制),其中Condition是可选项。

Policy结构简述如下:

Policy结构简述

支持JSON格式描述

目前RAM仅仅支持JSON格式的描述。当创建或更新Policy时,RAM会首先检查JSON格式的正确性。关于JSON的语法标准请参考RFC 7159。用户也可以使用一些在线的JSON格式验证器和编辑器来校验JSON文本的有效性。

Policy语法

语法描述的符号使用说明

  1. 1. Policy所包含的JSON字符有:
  2. { } [ ] " , :
  3. 2. 描述语法使用的特殊字符有:
  4. = < > ( ) |
  5. 3. 当一个元素允许多值时,这里使用逗号和省略号来表达,比如:
  6. [<action_string>, <action_string>, ...]
  7. 4. 在所有支持多值的语法中,使用单值也是有效的。而且这两种表达方式是等效的:
  8. "Action": [<action_string>] 和 "Action": <action_string>
  9. 5. 带有问号的元素表示这是一个可选元素,比如:
  10. <condition_block?>
  11. 6. 多值之间用竖线(|)隔开,表示取值只能选取这些值中的某一个。比如:
  12. ("Allow" | "Deny")
  13. 7. 使用双引号引起了的元素,表示它是文本串。比如:
  14. <version_block> = "Version" : ("1")

语法描述

  1. policy = {
  2. <version_block>,
  3. <statement_block>
  4. }
  5. <version_block> = "Version" : ("1")
  6. <statement_block> = "Statement" : [ <statement>, <statement>, ... ]
  7. <statement> = {
  8. <effect_block>,
  9. <action_block>,
  10. <resource_block>,
  11. <condition_block?>
  12. }
  13. <effect_block> = "Effect" : ("Allow" | "Deny")
  14. <action_block> = ("Action" | "NotAction") :
  15. ("*" | [<action_string>, <action_string>, ...])
  16. <resource_block> = ("Resource" | "NotResource") :
  17. ("*" | [<resource_string>, <resource_string>, ...])
  18. <condition_block> = "Condition" : <condition_map>
  19. <condition_map> = {
  20. <condition_type_string> : {
  21. <condition_key_string> : <condition_value_list>,
  22. <condition_key_string> : <condition_value_list>,
  23. ...
  24. },
  25. <condition_type_string> : {
  26. <condition_key_string> : <condition_value_list>,
  27. <condition_key_string> : <condition_value_list>,
  28. ...
  29. }, ...
  30. }
  31. <condition_value_list> = [<condition_value>, <condition_value>, ...]
  32. <condition_value> = ("String" | "Number" | "Boolean")

Policy语法说明:

  • 当前支持的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。比如,

  1. "Effect": "Allow"

Action(操作名称列表)

Action支持多值,取值为云服务所定义的API操作名称,其格式定义如下:

  1. <service-name>:<action-name>

格式说明:

  • service-name: 阿里云产品名称,如ecs, rds, slb, oss, ots等。
  • action-name: service相关的api操作接口名称。

描述样例:

  1. "Action": ["oss:ListBuckets", "ecs:Describe*", "rds:Describe*"]

Resource(操作对象列表)

Resource通常指操作对象,比如ECS虚拟机实例,OSS存储对象。我们使用如下格式来命名阿里云服务的资源命名。

  1. 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对象。

描述样例:

  1. "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

条件关键字

阿里云保留的条件关键字命名格式为:

  1. 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 用户登录时是否使用了多因素认证(二步认证)

部分产品定义了产品级别的条件关键字,格式如下:

  1. <service-name>:<condition-key>

不同产品定义的条件关键字,请参见各产品的用户文档。

Policy样例

如下的Policy样例包含两条授权语句(Statement):第1条授权语句是允许对ecs的华东 1 (杭州) region所有资源有查看权限(ecs:Describe*);第2条授权语句是允许对oss的mybucket存储桶中的对象具有读访问权限(oss:ListObjects, oss:GetObject),并限制请求者的IP来源必须是”42.120.88.10”或”42.120.66.0/24”。

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": "ecs:Describe*",
  7. "Resource": "acs:ecs:cn-hangzhou:*:*"
  8. },
  9. {
  10. "Effect": "Allow",
  11. "Action": [
  12. "oss:ListObjects",
  13. "oss:GetObject"
  14. ],
  15. "Resource": [
  16. "acs:oss:*:*:mybucket",
  17. "acs:oss:*:*:mybucket/*"
  18. ],
  19. "Condition":{
  20. "IpAddress": {
  21. "acs:SourceIp": ["42.120.88.10", "42.120.66.0/24"]
  22. }
  23. }
  24. }
  25. ]
  26. }

最后更新:2016-11-23 16:04:01

  上一篇:go Policy基本元素__附录1: 授权策略语言_用户指南_访问控制-阿里云
  下一篇:go 权限检查规则__附录1: 授权策略语言_用户指南_访问控制-阿里云