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