如何公开S3存储桶(亚马逊示例策略不起作用)?

Goo*_*ets 19 policy amazon-s3 bucket amazon-web-services

Amazon提供了向匿名用户授予权限的示例,如下所示(请参阅Amazon S3存储桶策略的示例案例):

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在我的政策中,我已将"arn:aws:s3 ::: bucket /"中的"bucket"更改为"my-bucket".

但是,一旦我尝试访问该存储桶的文件夹中的图像,我就会收到以下访问被拒绝错误:

此XML文件似乎没有与之关联的任何样式信息.文档树如下所示.

(如果我明确地将该图像的属性更改为public,则重新加载其url,图像加载完美)

我究竟做错了什么?


更新#1:显然它与我可以访问的第三方网站有关.虽然它具有作为主用户(me)的所有权限,并且其对象位于同一文件夹中,具有完全相同的权限,但仍然不允许我将它们公开显示.不知道为什么.

更新#2:存储桶策略不适用于其他人"拥有"的对象,即使它们在您的存储桶中,请参阅我的答案以获取详细信息.

Ste*_*pel 20

更新

根据GoodGets的评论,真正的问题是存储桶策略不适用于其他人"拥有"的对象,即使它们在你的桶中,请参阅GoodGets自己的详细解答(+1).


这是一个新的存储桶/对象设置还是您尝试将存储桶策略添加到预先存在的设置?

在后一种情况下,由于可用的三种不同的S3访问控制机制之间的相互作用,您可能偶然发现了相关的陷阱,这可能相当混乱.例如,在一起使用ACL和存储桶策略中解决了这个问题:

当您将ACL和存储桶策略分配给存储桶时,Amazon S3会在确定帐户对Amazon S3资源的访问权限时评估现有的Amazon S3 ACL以及存储桶策略.如果帐户可以访问ACL或策略指定的资源,则他们可以访问所请求的资源.

虽然这听起来很容易,但是ACL之间的细微不同默认值可能会导致无意的干扰:

使用现有的Amazon S3 ACL,授权始终提供对存储桶或对象的访问.使用策略时,拒绝始终会覆盖授权.[强调我的]

这解释了为什么添加ACL授权始终保证访问权限,但是,这不适用于添加策略授予,因为仍会强制执行设置中其他位置提供的显式策略拒绝,如IAM和Bucket Policies TogetherEvaluation中进一步说明的那样.逻辑.

因此,我建议首先使用新的存储桶/对象设置来测试所需的配置,然后再将其应用到生产场景中(当然,这可能仍会产生干扰,但识别/调试差异会更容易).

祝好运!

  • Steffen,我接受了你的答案,因为它确实帮我调试了我的问题.但真正的问题是,存储桶策略不适用于其他人"拥有"的对象,即使它们存在于您的存储桶中. (3认同)

Goo*_*ets 8

存储桶策略不会将文件应用于其他所有者.因此,虽然我已经给第三方写入权限,但所有权仍然存在,我的存储桶策略将不适用于这些对象.

  • 你是怎么修理的? (9认同)
  • @GoodGets?? How did you resolve this issue? (2认同)