amazon-s3 – 如何使S3 bucket公开(亚马逊示例策略不起作用)?

亚马逊提供了授予匿名用户权限的示例,如下所示(见Example Cases for Amazon S3 Bucket Policies):

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

在我的政策中,我将“”arn:aws:s3 ::: bucket /“中的”bucket“改为”我的“。

但是,一旦我尝试访问一个文件夹中的图像,我得到以下访问被拒绝的错误:

This XML file does not appear to have any style information associated
with it. The document tree is shown below.

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

我究竟做错了什么?

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

更新#2:桶策略不适用于其他人拥有的对象,即使它们在您的存储区中,有关详细信息,请参阅my answer

最佳答案
更新

根据GoodGets的评论,真正的问题是,桶策略不适用于其他人拥有的对象,即使它们在您的存储区中,有关详细信息,请参阅GoodGets’ own answer(1)。

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

在后一种情况下,由于可用的三种不同的S3访问控制机制之间的相互作用,您可能会遇到相关的陷阱,这可能会令人困惑。这被解决。在Using ACLs and Bucket Policies Together

When you have ACLs and bucket policies assigned to buckets, Amazon S3
evaluates the existing Amazon S3 ACLs as well as the bucket policy
when determining an account’s access permissions to an Amazon S3
resource. If an account has access to resources that an ACL or policy
specifies, they are able to access the requested resource.

虽然这听起来很简单,但无意间的干扰可能来自于ACL之间微妙的不同默认策略:

With existing Amazon S3 ACLs, a grant always provides access to a
bucket or object. When using policies, a deny always overrides a
grant
. [emphasis mine]

这就解释了为什么添加ACL授权总是保证访问权限,但是,这并不适用于添加策略授予,因为您的设置中其他地方提供的显式策略拒绝仍然会被强制执行。 IAM and Bucket Policies TogetherEvaluation Logic

因此,我建议从新的桶/对象设置开始,以便在将其应用于生产场景(可能仍然会干扰当然,但识别/调试差异将更容易)之前测试所需的配置。

祝你好运!

转载注明原文:amazon-s3 – 如何使S3 bucket公开(亚马逊示例策略不起作用)? - 代码日志