将存储桶 public 中的 s3 文件设为默认
Make s3 file in bucket public as default
我的 s3 存储桶设置 Access
是 public
并且 block public aceess
是 off
现在我通过aws-web控制台上传了文件。
文件被阻止来自 public。
我这里勾选page,设置
Bucketpolicy如下所示。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:GetBucket*",
],
"Resource": [
"arn:aws:s3:::si12-s3-resource-up",
"arn:aws:s3:::si12-s3-resource-up/*"
]
}
]
}
但是,还是一样。
我应该多检查哪里?
手动上传文件后。
来到每个对象页面并为所有人设置ACL public。
可以看到文件
所以,在我看来。
已设置存储桶策略,但不知何故 ACL 优先或忽略存储桶策略???
解决方案
我关闭ACL并设置
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket--name/*"
}
]
}
有效,我不确定为什么以前的存储桶策略无效
但是非常感谢您的评论。
在 Bucket 中使用此策略创建对象 public,请不要允许具有 public 访问权限的 DELETE 操作,如果您的应用程序想要以编程方式删除,那么最好为此创建 ROLE 并分配给你的机器那个应用程序是 运行.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":[
"arn:aws:s3:::si12-s3-resource-up",
"arn:aws:s3:::si12-s3-resource-up/*"
]
}
]
}
此外,在 django-s3direct 的目标对象中使用添加 ACL
S3DIRECT_DESTINATIONS = {
'example_destination': {
'key': 'uploads/images',
'acl': 'public-read', # [optional] Custom ACL for object is 'private'
'server_side_encryption': 'AES256',
}
}
我的 s3 存储桶设置 Access
是 public
并且 block public aceess
是 off
现在我通过aws-web控制台上传了文件。
文件被阻止来自 public。
我这里勾选page,设置
Bucketpolicy如下所示。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:GetBucket*",
],
"Resource": [
"arn:aws:s3:::si12-s3-resource-up",
"arn:aws:s3:::si12-s3-resource-up/*"
]
}
]
}
但是,还是一样。
我应该多检查哪里?
手动上传文件后。
来到每个对象页面并为所有人设置ACL public。
可以看到文件
所以,在我看来。
已设置存储桶策略,但不知何故 ACL 优先或忽略存储桶策略???
解决方案
我关闭ACL并设置
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket--name/*"
}
]
}
有效,我不确定为什么以前的存储桶策略无效
但是非常感谢您的评论。
在 Bucket 中使用此策略创建对象 public,请不要允许具有 public 访问权限的 DELETE 操作,如果您的应用程序想要以编程方式删除,那么最好为此创建 ROLE 并分配给你的机器那个应用程序是 运行.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":[
"arn:aws:s3:::si12-s3-resource-up",
"arn:aws:s3:::si12-s3-resource-up/*"
]
}
]
}
此外,在 django-s3direct 的目标对象中使用添加 ACL
S3DIRECT_DESTINATIONS = {
'example_destination': {
'key': 'uploads/images',
'acl': 'public-read', # [optional] Custom ACL for object is 'private'
'server_side_encryption': 'AES256',
}
}