【问题标题】:AWS S3 Bucket Policy - Allow GetObject only within a prefixAWS S3 存储桶策略 - 仅在前缀内允许 GetObject
【发布时间】:2018-05-21 01:08:05
【问题描述】:

我正在尝试在我的存储桶上设置一个策略,以允许对我的对象进行公共“GetObject”访问,但仅限于特定前缀内的那些。像这样:

    {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::mybucket/publicstuff/*"
    }

问题是,AWS 警告我这会使整个存储桶公开。果然,确实如此;如果我尝试从 /mybucket/anywhereelse/ 获取对象,S3 会免费提供它。所以 'mybucket' 之后的所有内容都会被忽略。

有没有办法建立适用于存储桶中特定前缀的存储桶策略?我尝试了一个策略条件,但发现在使用 s3:GetObject 操作时无法使用 s3:prefix。

【问题讨论】:

  • 删除此策略,您应该会发现存储桶已经并且仍然是公共的,原因与此策略无关。请指教。
  • 嗨@Michael-sqlbot,否则存储桶是私有的。如果我删除此策略,则存储桶是私有的。如果我包含它,则存储桶是完全公开的。
  • 我会尝试复制,但直觉告诉我你误解了一些东西,虽然我不知道是什么。验证一下,这是您的整个政策吗?并且您确实删除并重新添加了此策略以仔细检查/验证此路径前缀之外的测试对象“x”在添加时是否变为公共,并在删除时恢复为私有?这是在哪个地区?

标签: amazon-web-services amazon-s3 bucket


【解决方案1】:

感谢@michael 和@mok,我找到了答案:我是个白痴。我用来验证标准行为的其他对象碰巧对它们具有单独的权限以允许 getObject,我不记得将它们放在那里或注意到它们在那里。当我删除这些权限时,我似乎仍然可以访问这些对象,但我实际上是在获取缓存的副本。当删除这些虚假权限并使用完全不同的浏览器时,我验证了我最初发布的策略是正确的。抱歉,添麻烦了。

【讨论】:

    【解决方案2】:

    这完全没问题,尽管您会看到一个指示,表明您的存储桶可以公开访问。您应该注意到,此指示器显示提供了对该存储桶(的某些内容)的公共访问权限。
    因此,要检查是否没有问题,您只需测试可公开访问的文件夹之外的文件,并将其与根据您的政策应该可公开访问的文件进行比较。
    您可以在下图中看到我已经创建了我的存储桶 (toignore) 的子文件夹,可供公众访问:

    这是存储桶的树状视图:

    ├── 目录
    │ ├── toignore
    │ │ └── i.txt
    └── ni.txt

    根据我的政策,i.txt 是可公开访问的,但 ni.txt 不是,并且指示器显示可公开访问。

    【讨论】:

    • 谢谢@mok,这不是我得到的结果。一切都变得公开,无论是否在前缀中,通过访问内容进行验证。您的存储桶在哪个地区?
    猜你喜欢
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多