一、生效条件构成
生效条件由一个或多个条件子句构成。一个条件子句由条件键、运算符和条件值组成,一个条件键可以指定一个或多个条件值。
"condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}
二、条件子句示例
请求 IP 为 192.168.1.1,且请求日期小于2022-05-31 00:00:00,Condition 如下:
"condition":{ "ip_equal": { "qcs:ip": "192.168.1.1" }, "date_less_than": { "qcs:current_time": "2022-05-31 00:00:00" } }
三、生效条件匹配逻辑
生效条件的评估逻辑如下:
| 评估逻辑 | 说明 |
| 条件满足 | 一个条件键可以指定一个或多个条件值,在条件检查时,如果条件键的值与指定值中的某一个相同,即可判定条件满足。 |
| 条件子句满足 | 同一条件操作类型的条件子句下,若有多个条件键,则所有条件键必须同时满足,才能判定该条件子句满足。 |
| 条件块满足 | 条件块下的所有条件子句同时满足的情况下,才能判定该条件块满足。 |
| 条件运算符(null_equal 除外)加上后缀 if_exist | 表示上下文信息中即便不包含对应的键值依然生效。 |
| for_all_value | 限定词搭配条件运算符使用,表示上下文信息中条件键的每个条件值都满足要求时才生效。 |
| for_any_value | 限定词搭配条件运算符使用,表示上下文信息中条件键的任意一个条件值满足要求时就可以生效。 |
注意:按标签授权仅支持 for_any_value,按标签授权请参考 基于标签管理项目资源。
四、生效条件示例
"condition":{ "ip_equal": { "qcs:ip": "192.168.1.1" } }
请求中的条件值由条件键表示,在此示例中为 qcs:ip。将上下文键值与你指定为文本值的值进行比较,例如 192.168.1.1。要进行的比较类型由条件运算符指定(此处为 ip_equal)。
在某些情况下,需要匹配多种访问情况来满足实际需求,这时你可以在设置 Condition 时,指定多个条件值来匹配,例如:用户必须在 10.217.182.3/24 或者 111.21.33.72/24 网段才能上传对象(cos:PutObject),权限策略内容如下:
{ "version": "2.0", "statement": [ { "effect": "allow", "action": [ "cos:PutObject" ], "resource": [ "*" ], "condition":{ "ip_equal": { "qcs:ip": [ "10.217.182.3/24", "111.21.33.72/24" ] } } } ]}