下面介绍statements中的各个元素。
Version
Version是Bucket Policy语言的版本,它是个可选项,目前OOS API只允许填写2012-10-17。
"Version":"2012-10-17"
Id
Id是Bucket Policy的一个可选标识。推荐使用UUID来指明Bucket Policy。
Statement
Statement是个重要的元素,它可以包含多个元素。Statement元素可以包含一组独立的statements,每个独立的Statement是一个包含在大括号({})内的严格的JSON块。
"Statement":[{...},{...},{...}]
Sid
Sid(statement ID)是statement的一个可选标识,它可以看作是policy id的子id。
"Sid" : "1"
Effect
Effect是一个必填元素,用于表示允许访问或拒绝访问,有效值只能是Allow或Deny。
"Effect":"Allow"
Principal
Principal用于指定被允许或被拒绝访问的用户,Principal可以为:
- "Principal": " *"、*或"Principal": {"CTYUN":" "}:表示所有用户。
- "Principal": { "CTYUN": "arn:ctyun:iam::*accountId*:root" }:表示根用户。
- "Principal": { "CTYUN": "arn:ctyun:iam::accountId:user/user-name" }:表示子用户。
可以指定根用户和多个子用户,如下表示方法:
"Principal": {
   "CTYUN": [
        "arn:ctyun:iam::accountId:root",
        "arn:ctyun:iam::accountId:user/user-name1",
        "arn:ctyun:iam::accountId:user/user-name2"
    ]
}
Action
Action用于指定被允许或拒绝访问的操作,必填项。只有拥有相关权限的用户能执行Bucket相关写操作,以及Bucket子资源的相关操作。Action中可以配置以下权限。
与Bucket相关的OOS权限列表如下。
| 权限 | OOS操作 | 
|---|---|
| oos:ListBucket | GET Bucket(List Objects)、HEAD Bucket | 
| oos:ListBucketMultipartUploads | List Multipart Uploads | 
| oos:DeleteMultipleObjects | DeleteMultipleObjects | 
文件操作的OOS权限列表如下。
| 权限 | OOS操作 | 
|---|---|
| oos:AbortMultipartUpload | Abort Multiple Upload | 
| oos:DeleteObject | DELETE Object | 
| oos:GetObject | GET Object、HEAD Object | 
| oos:ListMultipartUploadParts | List Part | 
| oos:PutObject | PUT Object、PUT Object-Copy、POST Object、Initiate Mulitipart Upload、Upload Part、Compelete Multipart Upload、Upload Part –Copy | 
可使用通配符 (*) 来访问OOS产品提供的所有操作。例如,以下Action元素适用于所有OOS操作。
"Action": "oos:*"
还可以使用通配符 (*) 作为操作名称的一部分。例如下面的Action元素,适用于PutObject, GetObject, DeleteObject。
"Action": "oos:*Object"
Resource
Resource是指Policy覆盖的文件或文件集合,可以使用通配符*和?。
当Action中有桶级别权限时(如oos:ListBucket),Resource需配置到具体Bucket名称,如"Resource":"arn:ctyun:oos:::example-bucket"。
当Action中有文件级别权限时(如oos:GetObject),Resource需配置到具体Bucket下的文件,如"Resource":"arn:ctyun:oos:::example-bucket/objectname"、"Resource":"arn:ctyun:oos:::example-bucket/*"。
例如要使Policy对于所有以image开头的Object生效,可以这样配置:
"Resource":"arn:ctyun:oos:::example-bucket/image*"
Condition
Condition是Statement中最复杂的一个元素,我们把它称之为condition块,虽然只有一个condition元素,但是它可以包含多个conditions,而且每个condition可以包含多个key-value对。如下图所示,condition块中的各个condition之间是逻辑与关系,condition key之间也是逻辑与关系,各个value之间是逻辑或关系。

条件运算符
条件运算符是条件的“动词”形式,可指定OOS执行的比较类型。条件运算符可分为以下类别:String Conditions、布尔值条件运算符、IP Address Conditions。
String Conditions
String conditions可以允许设置string的匹配规则。
| Condition | 描述 | 
|---|---|
| StringEquals | 精准匹配指定的值,区分大小写。 | 
| StringNotEquals | 与指定的值不匹配,区分大小写。 | 
| StringEqualsIgnoreCase | 与指定的值精准匹配,不区分大小写。 | 
| StringNotEqualsIgnoreCase | 与指定的值不匹配,不区分大小写。 | 
| StringLike | 与指定的值精准匹配。或通过填充通配符,与指定的值相似,可以包括多字符匹配的通配符 (*)或单字符匹配的通配符 (?)。区分大小写。 | 
| StringNotLike | 与指定的值不匹配,区分大小写的无效匹配。或通过填充通配符,与指定的值也不匹配。 | 
例如,要匹配HTTP Referer头是以“http://www.ctyun.cn/”开头的请求,可以这样配置:
"StringLike":{
          "ctyun:Referer":[
            "http://www.ctyun.cn/*"
          ]
        }
布尔值条件运算符
利用布尔值条件,用户可以通过与“正确”或“错误”的对比,来设置Condition元素。
| 条件运算符 | 描述 | 
|---|---|
| Bool | 布尔值匹配。 | 
例如,下列声明使用 Bool 条件运算符与 ctyun:SecureTransport 键来指定必须使用 SSL 发出请求。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal":{ "CTYUN": ["*"] },
      "Action": "oos:GetObject",
      "Resource": "arn:ctyun:oos:::example_bucket/*",
      "Condition": {"Bool": {"ctyun:SecureTransport": "true"}}
    }
  ]
}
IP Address Conditions
IP address conditions允许设置IP地址的匹配规则,与ctyun:SourceIp key配合使用。此项的值必须符合标准的CIDR格式(例如:10.52.176.0/24),参考RFC 4632。
| Condition | 描述 | 
|---|---|
| IpAddress | IP地址或范围的白名单。 | 
| NotIpAddress | IP地址或范围的黑名单。 | 
条件键
| 条件键 | 描述 | 
|---|---|
| ctyun:Referer | 与字符串运算符结合使用。用于检查请求中的Referer请求头。 | 
| ctyun:SecureTransport | 与布尔值运算符结合使用。检查请求是否是使用SSL发送的。 | 
| ctyun:SourceIp | 与IP地址运算符结合使用。用于检查请求者的IP地址。 | 
| ctyun:UserAgent | 与字符串运算符结合使用。用于检查请求者的客户端应用程序。 | 
