PutObjectACL介面用於修改Object的存取權限。
目前Object有四種存取權限:default,private, public-read, public-read-write。Put Object ACL操作通過Put請求中的“x-oss-object-acl”頭來設定,這個操作只有Bucket Owner有許可權執行。如果操作成功,則返回200;否則返回相應的錯誤碼和提示資訊。
請求文法
PUT /ObjectName?acl HTTP/1.1
x-oss-object-acl: Permission
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Object ACL釋義
名稱 | 描述 |
---|---|
private | 該ACL表明某個Object是私有資源,即只有該Object的Owner擁有該Object的讀寫權限,其他的用戶沒有許可權操作該Object |
public-read | 該ACL表明某個Object是公共讀資源,即非Object Owner只有該Object的讀許可權,而Object Owner擁有該Object的讀寫權限 |
public-read-write | 該ACL表明某個Object是公共讀寫資源,即所有用戶擁有對該Object的讀寫權限 |
default | 該ACL表明某個Object是遵循Bucket讀寫權限的資源,即Bucket是什麼許可權,Object就是什麼許可權 |
細節分析
- Object的讀操作包括:GetObject,HeadObject,CopyObject和UploadPartCopy中的對source object的讀;Object的寫操作包括:PutObject,PostObject,AppendObject,DeleteObject,DeleteMultipleObjects,CompleteMultipartUpload以及CopyObject對新的Object的寫。
- x-oss-object-acl中許可權的值必須在上述4種許可權中。如果有不屬於上述4種的許可權,OSS返回400 Bad Request消息,錯誤碼:InvalidArgument。
- 用戶不僅可以通過PutObjectACL介面來設定Object ACL,還可以在Object的寫操作時,在要求標頭中帶上x-oss-object-acl來設定Object ACL,效果與PutObjectA ACL等同。例如PutObject時在要求標頭中帶上x-oss-object-acl可以在上傳一個Object的同時設定某個Object的ACL。
- 對某個Object沒有讀許可權的用戶讀取某個Object時,OSS返回 403 Forbidden消息,錯誤碼:AccessDenied,提示:You do not have read permission on this object。
- 對某個Object沒有寫入權限的用戶寫某個Object時,OSS返回 403 Forbidden消息,錯誤碼:AccessDenied,提示:You do not have write permission on this object。
- 只有Bucket Owner才有許可權調用PutObjectACL來修改該Bucket下某個Object的ACL。非Bucket Owner調用PutObjectACL時,OSS返回 403 Forbidden消息,錯誤碼:AccessDenied,提示:You do not have write acl permission on this object。
- Object ACL優先順序高於Bucket ACL。例如Bucket ACL是private的,而Object ACL是public-read-write的,則訪問這個Object時,先判斷Object的ACL,所以所有用戶都擁有這個Object的存取權限,即使這個Bucket是private bucket。如果某個Object從來沒設定過ACL,則存取權限遵循Bucket ACL。
樣本
請求樣本:
PUT /test-object?acl HTTP/1.1
x-oss-object-acl: public-read
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Wed, 29 Apr 2015 05:21:12 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=
返回樣本:
HTTP/1.1 200 OK
x-oss-request-id: 559CC9BDC755F95A64485981
Date: Wed, 29 Apr 2015 05:21:12 GMT
Content-Length: 0
Connection: keep-alive
Server: AliyunOSS