Statement IfExists条件运算符 IfExists:如果请求的内容中存在关键字,则依照策略所述的条件来处理关键字。如果该关键字不存在,则条件元素的计算结果将为true。 目前仅Bool型和数字类型的运算符支持使用IfExists条件运算符,表达形式:运算符IfExists,例如BoolIfExists、NumericEqualsIfExists。对于…IfExists的使用见示例1和示例2。 示例1 拒绝没有使用MFA认证的控制台请求,不拒绝使用MFA认证的控制台请求和使用密钥的API请求。但如果允许使用MFA认证的控制台请求和使用密钥的API请求,需要再写显性允许语句。 "Effect" : "Deny", "Condition" : { "Bool" : { "ctyun:MultiFactorAuthPresent" : false } } 拒绝没有使用MFA认证的控制台请求及使用密钥的API请求,不拒绝MFA认证的控制台请求。但如果允许MFA认证的控制台请求,需要再写显性允许语句。 "Effect" : "Deny", "Condition" : { "Bool" : { "ctyun:MultiFactorAuthPresent" : false } } 示例2 允许使用MFA认证在1800秒内的请求及使用密钥的API请求。 "Effect" : "Allow", "Condition" : { "NumericLessThanEqualsIfExists" : { "ctyun:MultiFactorAuthAge " : 1800 } } 允许使用MFA认证在1800秒内的请求,但不允许MFA认证在1800秒以上及没有使用MFA的请求(包括API请求)。 "Effect" : "Allow", "Condition" : { "NumericLessThanEquals" : { "ctyun:MultiFactorAuthAge " : 1800 } } 策略变量 在编写策略时,如果不能确定Resource、NotResource或Condition元素中的精确值,可以使用策略变量作为占位符。目前仅支持变量“ {ctyun:username} ”、“ {ctyun:AccessKey} ”。当策略执行时,策略变量将被替换为请求本身的用户名或AccessKeyID。 示例 1 : 将含有策略变量的策略附加给多个用户,当用户A发起请求时,username将替换为A的用户名;当用户B发起请求时,username将替换为B的用户名。 { "Version": "20121017", "Statement": [ { "Action": [ "oos:GetObject", "oos:PutObject" ], "Effect": "Allow", "Resource": ["arn:ctyun:oos::123456789012:mybucket/${ctyun:username}/"] } ] } 示例 2 :将含有策略变量的策略附加给多个用户,当用户A发起请求时,条件键oos:prefix将根据用户A的username进行判断;当用户B发起请求时,条件键oos:prefix将根据用户B的username进行判断。 { "Version": "20121017", "Statement": [ { "Action": [ "oos:GetObject", "oos:PutObject" ], "Effect": "Allow", "Resource": ["arn:ctyun:oos::123456789012:mybucket/${ctyun:username}/"] } ] }