【发布时间】:2018-03-29 17:34:52
【问题描述】:
试图找出一种使用 Boto3 在 S3 存储桶中的对象上设置 ACL 的方法。 输入应该是 S3 存储桶名称,并将所有对象的 ACL 更改为公共只读
【问题讨论】:
标签: amazon-web-services amazon-s3 boto3 bucket
试图找出一种使用 Boto3 在 S3 存储桶中的对象上设置 ACL 的方法。 输入应该是 S3 存储桶名称,并将所有对象的 ACL 更改为公共只读
【问题讨论】:
标签: amazon-web-services amazon-s3 boto3 bucket
您可以在设置 ACL 时将对象 copy_object() 设置为自身。
因此,源将与目标相同,但将 ACL 设置为您想要的值。
【讨论】:
要更改单个对象的 ACL,首先获取 Object 实例,然后更改 ACL。下一个示例两者兼而有之:
(boto3
.session
.Session(region_name=<region_name>)
.resource('s3')
.Object(<bucket_name>, <key>)
.Acl()
.put(ACL='public-read'))
要更改存储桶的 ACL,假设您已经拥有存储桶实例:
bucket.Acl().put(ACL='public-read')
【讨论】:
在我的情况下,我必须为在 S3 中编写的新对象指定 ACL,因此基于 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Object.put
import boto3
s3 = boto3.resource("s3")
s3.Object(my_bucket_name, my_key_path).put(Body=my_body, ACL=my_acl)
my_acl 可以是以下之一:
'private'|'public-read'|'public-read-write'|'authenticated-read'|'aws-exec-read'|'bucket-owner-read'|'bucket-owner-full-control'
【讨论】:
另一种处理身体的方法是:
aws s3api put-bucket-acl --bucket bucket_name --access-control-policy file://grant.json
grant.json 文件:
{
"Grants": [
{
"Grantee": {
"ID": "CANONICAL_ID_TO_GRANT",
"Type": "CanonicalUser"
},
"Permission": "WRITE"
},
{
"Grantee": {
"ID": "CANONICAL_ID_TO_GRANT",
"Type": "CanonicalUser"
},
"Permission": "READ"
}
],
"Owner": {
"DisplayName": "example_owner",
"ID": "CANONICAL_ID_OWNER"
}
}
【讨论】: