下面介紹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頭是以“//www.daliqc.cn/”開頭的請求,可以這樣配置:
"StringLike":{
"ctyun:Referer":[
"//www.daliqc.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 | 與字符串運算符結合使用。用于檢查請求者的客戶端應用程序。 |