如何在Amazon S3 Bucket上设置公共只读访问?

7
我在StackOverflow上发现了一些类似的问题,比如这个,但是它们都很老了,自那时以来S3的东西已经发生了变化。他们添加了这四个设置,令人困惑: enter image description here 如果我关闭这些设置,这是否意味着我的存储桶可以被公开写入? 此外,我还添加了这个策略:
{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "PublicReadForGetBucketObjects",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::REDACTED/*"
    },
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::REDACTED:user/REDACTED"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::REDACTED",
            "arn:aws:s3:::REDACTED/*"
        ]
    }
]

以及这个CORS配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>REDACTED</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我正在尝试向我在 IAM 中创建的用户提供公共读取权限并限制其完全访问权限。 如果有人能确认我的设置是否正确,或者在它们不正确的情况下指导我获取正确的资源,我将不胜感激。


你的策略似乎有误。请参考此文,设置正确的策略并关闭阻止公共访问(已完成)。 - Lamanus
不,禁用“公共访问块”并不会使您的存储桶公开可写(或可读)。禁用它只是允许您将对象设为公开。 - jarmod
谢谢,有了你的帮助我找到了正确的设置! - awaelchli
是的,我遇到了类似的问题...设置非常令人困惑。 - Nigel Fds
1个回答

22

要使对象公开可访问,请使用以下策略:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicRead",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}
请注意使用 "Principal": "*" 与您的策略使用的 "Principal": {"AWS": "*"} 是不同的。
这允许访问对象(GetObject),但无法列出存储桶的内容。 这需要对存储桶本身(没有 /*)具有 ListBucket 权限。
您还需要关闭与 Bucket Policies 相关的两个阻止公共访问设置。

+1 是为了解释列出存储桶内容的权限以及需要关闭哪些块设置。这正是我需要知道的。 - awaelchli
@john-rotenstein 你指的是哪两个区块需要关闭?有一个控制所有区块的,还有其他四个单独的选项可以打开/关闭。 - Cesar Flores
1
@CesarFlores 在个人选项中,关闭提到 Bucket Policy 的两个选项。 - John Rotenstein

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