我有一个名为'ben-bucket'的桶,我有多个文件。 我希望能够为每个文件URL设置权限。 我不太确定,但我假设我想要一个桶内每个文件的URL。 我的网址会是这样的吗?
https://ben-bucket.s3.amazonaws.com/<file_name>
基本上,我想设置对该URL的公共访问权限。我该怎么办? 我试过这个并没有用
bucket = s3.Bucket('ben-bucket').Object('db.sqlite')
bucket.BucketAcl('public-read')
print bucket_acl
提供的代码。 db.sqlite是我的存储桶ben-bucket中的一个文件代码不起作用。我希望能够公开访问以下网址
https://ben-bucket.s3.amazonaws.com/db.sqlite
我提供的代码未设置公开阅读权限。
答案 0 :(得分:8)
默认情况下,Amazon S3中的所有对象都是私有的。然后,您可以添加权限,以便人们可以访问您的对象。这可以通过以下方式完成:
如果您希望授予公众访问整个广告资源的权限,最简单的选项就是创建一个广告系列政策(来自Bucket Policy Examples]:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::MY-BUCKET/*"]
}
]
}
如果您希望仅授予对存储桶中的子目录 的公共访问权限,请使用:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::MY-BUCKET/PATH/*"]
}
]
}
是的,您还可以为每个单独的文件设置权限。代码将是:
import boto3
s3 = boto3.resource('s3')
object = s3.Bucket('ben-bucket').Object('db.sqlite')
object.Acl().put(ACL='public-read')