设置对象访问权限
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)