有奖捉虫:行业应用 & 管理与支持文档专题 HOT
整个策略的语法结构如下图所示。策略 policy 由版本 version 和语句 statement 构成。 语句 statement 是由若干个子语句构成。每条子语句包括操作 action、资源 resource、生效条件 condition 以及效力 effect 四个元素,其中生效条件 condition、委托人信息 principal 是非必填项。
?
?
?

JSON 格式

策略语法以 JSON 格式为基础。创建或更新的策略不满足 JSON 格式时,将无法提交成功,所以用户必须要确保 JSON 格式正确。 JSON 格式标准在 RFC7159 中定义,您也可以使用在线 JSON 验证程序检查策略格式。

语法约定

语法描述中有如下约定:
以下字符是包含在策略语法中的 JSON 字符:
{ } [ ] " , :
以下字符是用于描述策略语法中的特殊字符,不包含在策略中:
= < > ( ) |
当一个元素允许多个值时,使用逗号分隔符和省略号进行表示。例如:
[<resource_string>, < resource_string>, ...]
<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }
允许多个值时,也可以只包含一个值。当元素只有一个值时,尾部的逗号必须去掉,且中括号"[]"标记可选。例如:
"resource": [<resource_string>]
"resource": <resource_string>
元素后的问号 (?) 表示该元素是非必填项。例如:
<condition_block?>
元素是枚举值的情况下,枚举值之间用竖线 "|" 表示,并用 "()" 括号定义枚举值的范围。例如:
("allow" | "deny")
字符串元素用双引号包括起来。例如:
<version_block> = "version" : "2.0"

语法描述

policy = {
<version_block>
<principal_block?>,
<statement_block>
}
?
<version_block> = "version" : "2.0"
?
<statement_block> = "statement" : [ <statement>, <statement>, ... ]
?
<statement> = {
<effect_block>,
<action_block>,
<resource_block>,
<condition_block?>
}
?
<effect_block> = "effect" : ("allow" | "deny")
?
<principal_block> = "principal": ("*" | <principal_map>)
?
<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }
?
<principal_map_entry> = "qcs":
[<principal_id_string>, <principal_id_string>, ...]
?
<action_block> = "action":
("*" | [<action_string>, <action_string>, ...])
?
<resource_block> = "resource":
("*" | [<resource_string>, <resource_string>, ...])
?
<condition_block> = "condition" : { <condition_map> }
<condition_map> {
<condition_type_string> : { <condition_key_string> : <condition_value_list> },
<condition_type_string> : { <condition_key_string> : <condition_value_list> }, ...
}
<condition_value_list> = [<condition_value>, <condition_value>, ...]
<condition_value> = ("string" | "number")
语法说明:
一个策略 policy 可以包含多条语句 statement。 策略的最大长度是6144个字符(不包含空格),具体信息请参阅 限制。 各个块 block 的显示顺序无限制。例如,在策略中, version_block 可以跟在 effect_block 后面等。
当前支持的语法版本为 2.0。
principal_block 元素仅支持在角色的信任策略和 cos 的存储桶策略中使用。
操作 action 和资源 resource 都支持列表。
生效条件可以是单个条件,或者包括多个子条件块的逻辑组合。每个生效条件包括条件操作符 condition_type、条件键 condition_key,条件值 condition_value。
每条语句 statement 的效力 effect 为 deny 或 allow 。当策略中包含的语句中既包含有 allow 又包含有 deny 时,遵循 deny 优先原则。

字符串说明

语法描述的元素字符串说明如下:

action_string

由描述作用域、服务类型和操作名称组成。
// 所有产品所有操作
"action":"*"
"action":"*:*"
// COS 产品所有操作
"action":"cos:*"
// COS 产品的名为 GetBucketPolicy 的操作
"action":"cos:GetBucketPolicy"
// COS 产品部分匹配 Bucket 的操作
"action":"cos:*Bucket*"
// cos 产品,名为 GetBucketPolicy\\PutBucketPolicy\\DeleteBucketPolicy 的操作列表
"action":["cos:GetBucketPolicy","cos:PutBucketPolicy","cos: DeleteBucketPolicy"]
?

resource_string

资源通过六段式描述。
qcs: project :serviceType:region:account:resource
示例如下所示:
// COS 产品的 object 资源,上海地域,资源拥有者的 uid 是10001234,资源名是 bucket1/object2
qcs::cos:ap-shanghai:uid/10001234:bucket1-10001234/object2
// CMQ 产品的队列,上海地域,资源拥有者的 uin 是12345678,资源名是12345678/queueName1,资源前缀是 queueName
qcs::cmqqueue:sh:uin/12345678:queueName/12345678/queueName1
// CVM 产品的云服务器,上海地域,资源拥有者的 uin 是12345678,资源名是 ins-abcdefg,资源前缀是 instance
qcs::cvm:sh:uin/12345678:instance/ins-abcdefg
如果您想了解各个产品对应的资源定义详情,请参阅 支持CAM 的产品 中对应产品的参考文档。

condition_type_string

条件操作符,描述测试条件的类型。例如 string_equal、string_not_equal、date_equal、date_not_equal、ip_equal、ip_not_equal、numeric_equal、numeric_not_equal 等。示例如下所示:
"condition":{
"string_equal":{"cvm:region":["sh","gz"]},
"ip_equal":{"qcs:ip":"10.131.12.12/24"}
}

condition_key_string

条件键,表示将对其值采用条件操作符进行操作,以便确定条件是否满足。CAM 定义了一组在所有产品中都可以使用的条件键,包括 qcs:current_time、qcs:ip 、qcs:uin 和 qcs:owner_uin 等。具体信息请参阅 生效条件

principal_id_string

对于 CAM 而言,用户也是它的资源。因此委托人 principal 也采用六段式描述。示例如下,具体信息请参阅 资源描述方式
"principal": {"qcs":["qcs::cam::uin/1238423:uin/3232",
"qcs::cam::uin/1238423:groupid/13"]}
?


http://www.vxiaotou.com