将存储桶 public 中的 s3 文件设为默认

Make s3 file in bucket public as default

我的 s3 存储桶设置 Accesspublic 并且 block public aceessoff

现在我通过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',
    }
}