天翼云对象存储(经典版)I型访问控制教程-IAM策略编写规则Statement | |||||||||||||||||||||||||||||||||||||
产品推荐: 1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>; 2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>> 3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>> 4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>> 点击这里注册天翼云特邀VIP帐号,立即体验天翼云对象存储>>> 天翼云对象存储(经典版)I型访问控制教程-IAM策略编写规则Statement Statement为策略的主要元素,该元素为必填项。Statement中可含一条单独的JSON语句,也可包含由多条语句组成的JSON语句块。每条单独的语句块必须使用大括号{}括起来。每个JSON语句块中包括下列元素:Sid(非必填)、Effect(必填)、Action或NotAction(二选一)、Resource或NotResource(二选一)、Condition(非必填)。 Statement语句的结构如下: “Statement”: [ {…}, {…}, {…}, …] 例如下例为多个JSON语句块组成的示例: { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToManageTrail", "Effect": "Allow", "Action": "cloudtrail:*", "Resource": "*" }, { "Sid": "AllowGroupToSeeBucket", "Effect": "Allow", "Action": [ "oos:GetObject", "oos:ListBucket" ], "Resource": [ "arn:ctyun:oos::10rc2arpn6306:trailbucket", "arn:ctyun:oos::10rc2arpn6306:trailbucket/*" ] } ] } SidSid是针对策略语句提供的可选标识符,用户可以为声明数组中的每份声明指定Sid值,Sid值是策略文件ID的子ID。在IAM中,Sid值在JSON策略中必须唯一。 EffectEffect元素是必需具备的元素,用于指定声明所产生的结果是“允许”还是“显式拒绝”。Effect的有效值为Allow和Deny。在默认情况下,将拒绝访问资源。如要允许访问资源,必须将Effect元素设置为Allow。 ActionAction元素描述将允许或拒绝的指定操作。每个服务有对应的任务操作,用户可以使用相应服务来执行所描述的任务。目前提供的服务有:oos(对象存储)、cloudtrail(操作跟踪)、statistics(统计)和iam。具体每种服务包括的操作详见操作列表。 Action元素的语法结构为:”Action”: “服务:具体操作”。其中具体操作也可以用通配符(*)表示某类操作。 示例1:OOS:获取对象操作。 "Action": "oos:GetObject" 示例2:IAM:创建IAM用户。 "Action": "iam:CreateUser" 示例3:使用通配符(*)表示执行OOS的所有服务。 "Action": "oos:*" 示例4:使用通配符(*)表示执行IAM服务中包含AccessKey的操作。 "Action": "iam:*AccessKey*" NotActionNotAction元素描述与指定操作列表之外的所有内容显式匹配。使用NotAction时只列出不应匹配的一些操作。使用NotAction时:
示例1:除删除存储桶操作外,允许用户执行OOS其他所有操作。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "oos:DeleteBucket", "Resource": "arn:ctyun:oos::10rc2arpn6306:*", } ] } 示例2:允许用户执行除IAM服务外的所有操作。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*", } ] }
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "NotAction": [ "oos:*", "cloudtrail:*", "statistics:*", ], "Resource": "*", } ] } ResourceResource元素指定执行策略的资源,可以指定一个或多个对象。 格式可以为:
其中:
说明:
如下列举例,将含有策略变量的策略附加给多个用户,当用户A发起请求时,username将替换为A的用户名;当用户B发起请求时,username将替换为B的用户名。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "oos:DeleteBucket", "Resource": "arn:ctyun:oos::10rc2arpn6306:*", } ] } NotResourceNotResource元素指除指定资源列表之外的所有内容显式匹配的策略元素。使用NotResource时,只列出不应匹配的一些资源,而不是包括将匹配的资源列表。使用NotResource时应注意,在此元素中指定的资源是受限的资源,即:
ConditionCondition元素描述允许用户指定策略生效的条件。在Condition元素中,用户可构建表达式,并使用条件运算符将策略中的条件与请求值相匹配。 Condition元素可以由多个条件组成。条件包括:条件运算符、条件键和条件值组成,一个条件键可以对应多个条件值。 Condition的语法结构如下:
说明:条件键不区分大小写。如果条件值是时间,将需要设置的时间转换为UTC+0时区的时间。 若存在多个条件,各个条件之间的约束如下:
条件键、运算符、条件值见下表:
说明:
示例:将含有策略变量的策略附加给多个用户,当用户A发起请求时,条件键oos:prefix将根据用户A的username进行判断;当用户B发起请求时,条件键oos:prefix将根据用户B的username进行判断。 { "Version": "2012-10-17", "Statement": [ { "Action": ["oos:ListBucket"], "Effect": "Allow", "Resource": ["arn:ctyun:oos::123456789012:mybucket"], "Condition": {"StringLike": {"oos:prefix": ["${ctyun:username}/*"]}} } ] } 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}”。当策略执行时,策略变量将被替换为请求本身的用户名或AccessKey。 示例1:将含有策略变量的策略附加给多个用户,当用户A发起请求时,username将替换为A的用户名;当用户B发起请求时,username将替换为B的用户名。 { "Version": "2012-10-17", "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": "2012-10-17", "Statement": [ { "Action": [ "oos:GetObject", "oos:PutObject" ], "Effect": "Allow", "Resource": ["arn:ctyun:oos::123456789012:mybucket/${ctyun:username}/*"] } ] } |