设置对象访问权限

put_object_acl操作可以为媒体存储服务中的对象设置ACL,与存储桶的ACL设置类似,对象ACL同样具有 CannedAccessControlList 与 AccessControlList 两种。对一个对象执行该操作需要具有WRITE_ACP权限。

  • Canned ACL

媒体存储支持一组预先定义的授权,称为Canned ACL。每个Canned ACL都有一组预定义的被授权者和权限,下表列出了相关的预定义授权含义。

ACL有如下几种”private”(私有读写),”public-­read”(公共读私有写),”public-­read­-write”(公共读写),”authenticated-­read”(注册用户可读)。

权限 描述
私有读写 对象拥有者有读写权限,其他用户没有访问权限。
公共读私有写 对象拥有者有读写权限,其他用户只有该存储桶的读权限。
公共读写 所有用户都有该对象的读写权限。
注册用户可读 对象拥有者有读写权限,注册用户具有该对象的读限。
def put_object_acl():
    try:
        resp = s3_client.put_object_acl(
            # ACL = private or public-read or public-read-write or authenticated-read
            ACL='public-read',
            Bucket='YOUR_BUCKET_NAME',
            Key='workflow.png'
        )
        print(resp)
    except ClientError as e:
        logging.error(e)
  • ACL

此种指定方式可以更加灵活的设置具体用户或组的访问权限。同样,用户在设置对象的ACL之前需要具备WRITE_ACP 权限。

权限参数 描述
GrantFullControl 赋予被授权者READ、READ_ACP和WRITE_ACP权限。
GrantRead 赋予被授权者读的权限。
GrantReadACP 赋予被授权者读取对象的访问控制列表(ACL)
GrantWriteACP 赋予被授权者写入对象的访问控制列表(ACL)
def put_object_acl():
    try:
        resp = s3_client.put_object_acl(
            Bucket='YOUR_BUCKET_NAME',
            Key='workflow.png',
            GrantFullControl='id=YOUR_USER_ID_1,id=YOUR_USER_ID_2',
            # GrantRead='id=YOUR_USER_ID',
            # GrantReadACP='id=YOUR_USER_ID',
            # GrantWrite='id=YOUR_USER_ID',
            # GrantWriteACP='id=YOUR_USER_ID',
        )
        print(resp)
    except ClientError as e:
        logging.error(e)