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