亚马逊S3 - 正确的存储桶策略却返回403禁止访问

6

我试图使用以下存储桶策略,使我在S3存储桶中存储的所有图像都可以公开阅读。

{
"Id": "Policy1380877762691",
"Statement": [
    {
        "Sid": "Stmt1380877761162",
        "Action": [
            "s3:GetObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::<bucket-name>/*",
        "Principal": {
            "AWS": [
                "*"
            ]
        }
    }
]

我有4个类似的S3存储桶,具有相同的存储桶策略,但我一直收到403错误。

这个存储桶中的图像是使用s3cmd sync传输的,因为我正在尝试将存储桶的内容迁移到一个新帐户。

我唯一看到的区别是:

  1. 我正在使用具有管理员访问权限的IAM用户,而不是根用户
  2. 文件没有每个文件的“grantee:everyone open/download file”权限,这是旧存储桶中文件所具有的权限

1
需要记住的一件事是,如果您在对象上授予了“所有人”打开/下载的权限,则不需要任何存储桶策略即可使其正常工作,因此您现有的策略实际上可能是错误的,并且没有任何有用的作用。 - Michael - sqlbot
4个回答

2

我通过再次运行s3cmd命令并在末尾添加--acl-public来解决了这个问题。看起来已经修复了我的问题。


2
如果您希望所有人都可以访问您桶内的S3对象,则主体应为“*”,即如下所示:
{
"Id": "Policy1380877762691",
"Statement": [
    {
        "Sid": "Stmt1380877761162",
        "Action": [
            "s3:GetObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::<bucket-name>/*",
        "Principal": "*"
        }
    }
]

}

来源:http://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#Principal

Principal元素指示该策略适用于哪个主体(即AWS账户、IAM用户或角色)。 要在策略中指定主体,请使用ARN或AWS帐户ID。

可以在一个策略中指定多个主体。 如果您想要选择所列出的任何一个主体,可以使用OR运算符来将它们分隔开。


刚试了一下,问题依旧-403错误访问被拒绝。我尝试了几种不同的策略组合,但都没有成功。 - Seán O'Grady
很奇怪。我的一些S3存储桶上有类似的策略,它确实有效。我唯一能发现的区别是你的存储桶策略中没有"Version":"2012-10-17"。也许可以试试加上这个? - Markus Klems
在我的其他存储桶上,策略是有效的。似乎在存储桶之间的传输中出了些问题。除了授权对象:每个对象的所有人权限外,没有其他不同的配置。 - Seán O'Grady

1

我知道这是一个旧问题,但对于那些在AWS控制台上遇到此问题的人,请前往AWS S3控制台中的存储桶:

  1. 打开权限选项卡。
  2. 打开公共访问设置。
  3. 点击编辑

enter image description here

然后在编辑页面:

  1. 取消选中"阻止新的公共存储桶策略(建议)"
  2. 取消选中"如果存储桶有公共策略,则阻止公共和跨帐户访问(建议)"
  3. 点击保存

enter image description here

注意

请注意,这将使您的存储桶对任何人都可以在互联网上访问,即使他们没有AWS账户,他们仍然可以访问存储桶和存储桶的内容。 请谨慎处理!


1
+1:在我禁用“阻止公共和跨帐户访问”之后,修复了我的问题。另一个选项“阻止新的公共桶策略”已经被禁用以允许保存策略。虽然我是AWS的新手,但这帮助我在静态网站设置方面取得了一些进展。 - sarh

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接