一、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/object2qcs::cos:ap-shanghai:uid/10001234:bucket1-10001234/object2// CMQ 产品的队列,上海地域,资源拥有者的 uin 是12345678,资源名是12345678/queueName1,资源前缀是 queueNameqcs::cmqqueue:sh:uin/12345678:queueName/12345678/queueName1// CVM 产品的云服务器,上海地域,资源拥有者的 uin 是12345678,资源名是 ins-abcdefg,资源前缀是 instanceqcs::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:request_tag 和 qcs:resource_tag 等。具体信息请参阅 生效条件。
九、principal_id_string
对于 CAM 而言,用户也是它的资源。因此委托人 principal 也采用六段式描述。示例如下,具体信息请参阅 资源描述方式。
"principal": {"qcs":["qcs::cam::uin/1238423:uin/3232", "qcs::cam::uin/1238423:groupid/13"]}