开发者社区 问答 正文

关于Object操作之如何实现PutObjectACL?


Put Object ACL


Put Object ACL接口用于修改Object的访问权限。目前Object有三种访问权限: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就是什么权限


细节分析:

  1. Object的读操作包括:GetObject,HeadObject,CopyObject和UploadPartCopy中的对source object的读;Object的写操作包括:PutObject,PostObject,AppendObject,DeleteObject,DeleteMultipleObjects,CompleteMultipartUpload以及CopyObject对新的Object的写。
  2. x-oss-object-acl中权限的值必须在上述3种权限中。如果有不属于上述3种的权限,OSS返回400 Bad Request消息,错误码:InvalidArgument。
  3. 用户不仅可以通过PutObjectACL接口来设置Object ACL,还可以在Object的写操作时,在请求头中带上x-oss-object-acl来设置Object ACL,效果与PutObjectA ACL等同。例如PutObject时在请求头中带上x-oss-object-acl可以在上传一个Object的同时设置某个Object的ACL。
  4. 对某个Object没有读权限的用户读取某个Object时,OSS返回 403 Forbidden消息,错误码:AccessDenied,提示:You do not have read permission on this object.
  5. 对某个Object没有写权限的用户写某个Object时,OSS返回 403 Forbidden消息,错误码:AccessDenied,提示:You do not have write permission on this object.
  6. 只有Bucket Owner才有权限调用PutObjectACL来修改该Bucket下某个Object的ACL。非Bucket Owner调用PutObjectACL时,OSS返回 403 Forbidden消息,错误码:AccessDenied,提示:You do not have write acl permission on this object.
  7. Object ACL优先级高于Bucket ACL。例如Bucket ACL是private的,而Object ACL是public-read-write的,则访问这个Object时,先判断Object的ACL,所以所有用户都拥有这个Object的访问权限,即使这个Bucket是private bucket。如果某个Object从来没设置过ACL,则访问权限遵循Bucket ACL。


示例


[backcolor=transparent]请求示例: 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 qn6qrrqxo2oawuk53otfj byc:KU5h8YMUC78M30dXqf3JxrTZHiA=


[backcolor=transparent]返回示例: 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

展开
收起
青衫无名 2017-10-20 11:26:16 2718 分享 版权
阿里云 AI 助理回答

您已经详细描述了阿里云对象存储服务(OSS)中的Put Object ACL接口及其使用方法、权限类型和操作细节,这里我再简要概括并补充一些可能对用户有帮助的信息:

Put Object ACL 概述

  • 功能:此接口允许Bucket的Owner修改指定Object的访问控制列表(ACL),从而控制其他用户对该Object的访问权限。
  • 权限类型
    • private: 默认设置,仅Object Owner有读写权限。
    • public-read: 所有用户可读,但只有Owner有写权限。
    • public-read-write: 所有用户可读写。
    • default: Object权限与所属Bucket的权限一致。

请求示例解析

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 qn6qrrqxo2oawuk53otfj byc:KU5h8YMUC78M30dXqf3JxrTZHiA=
  • 请求路径:包含Object的名称及?acl参数,表示这是一个修改ACL的操作。
  • Header:
    • x-oss-object-acl: 设置Object的访问权限,此处设为public-read
    • Host: 指定OSS服务的Endpoint。
    • DateAuthorization: 用于签名验证,确保请求的安全性。

返回示例解析

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
  • 响应状态码200 OK 表示操作成功。
  • x-oss-request-id: 唯一标识该请求,可用于问题排查。

注意事项

  • 权限管理:确保执行此操作的用户是Bucket的Owner,否则会因权限不足而失败。
  • 优先级:Object ACL的设定优先于Bucket ACL,即直接针对Object设置的权限规则将覆盖Bucket级别的默认设置。
  • 安全性:公开权限(如public-read, public-read-write)应谨慎使用,以免敏感数据泄露。

通过上述接口和示例,您可以灵活地管理OSS中存储的Object权限,以满足不同场景下的安全和共享需求。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: