获取和上传的 AWS S3 存储桶策略

获取和上传的 AWS S3 存储桶策略

我有两个存储桶,每个存储桶都有自己的目标。到目前为止,我无法理解存储桶设置的复杂配置。似乎有三件事需要配置

  1. 阻止公共访问
  2. 存储桶策略
  3. 访问控制列表

我知道,如果我关闭 (1),我想要完成的所有事情都会成功。尽管这是我见过的最没有意义的四个设置(我为什么要关心根据策略修改时间限制对存储桶的访问???)

看来我向 (2) 添加的内容并不重要。例如,我有一个策略只允许 GetObject,但我可以从 SDK 中删除对象和放入对象。我还有另一个策略允许 DeleteObject、GetObject 和放入对象,但只有删除有效,放入会抛出访问被拒绝(来自具有管理访问权限的 IAM 账户)。

我甚至不知道 (3) 的意义。我为什么要允许权限任何AWS 用户?无论如何……

我有两个桶,两个目标,我不知道该如何组合才能完成它们。

A:静态网站公共bucket

对于这个,我拥有 Bock 对 OFF 的公共访问权限,以及类似的策略(我认为它什么都不做)。任何人都可以查看存储桶内容(很好!)但此策略不应该允许任何 PutObject,但它却允许了。

{
    "Version": "2012-10-17",
    "Id": "Policy1632669906301",
    "Statement": [
        {
            "Sid": "Stmt1632669869776",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::publicwebsite/*"
        }
    ]
}

为什么只定义了GetObject就可以上传和删除呢?

B:用于备份的安全存储桶

这个存储桶用于我的应用发送数据备份。因此,唯一应该能够读取/写入的是我的应用。但如果我打开“阻止公共访问”,我就无法上传,但可以删除。同样,这完全没有意义。如果我关闭“阻止公共访问”,我就可以做任何事情。以下是政策

{
    "Version": "2012-10-17",
    "Id": "Policy1635858319261",
    "Statement": [
        {
            "Sid": "Stmt1635858317672",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXX:user/backup-user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::backups/*"
        }
    ]
}

为什么可以删除,但是放不下呢?


此外,亚马逊坚定关于始终保持阻止公共访问,但如果启用了此功能,您甚至无法修改存储桶策略!这太疯狂了!!!!


以下是我经过一些测试后发现的。

我的帐户如下

  1. root 账户,存储桶的所有者
  2. 具有管理所有权限的 IAM 帐户(管理员)
  3. IAM 账户(用户)完全无权执行任何操作

有关存储桶策略,请参阅上面发布的第二个策略。

我正在探索策略和阻止公共访问设置的组合会有什么作用。它们仍然毫无意义。

情况1

  • 阻止所有公共访问:关闭
  • 存储桶策略:EMPTY
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以上传和删除,用户无法做任何事情

案例 2

  • 阻止所有公共访问:
    • [x] 新的访问控制列表
  • 存储桶策略:EMPTY
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以删除,但不能上传,用户无法做任何事情

案例 3

  • 阻止所有公共访问:
    • [x] 新的访问控制列表
    • [x] 任何访问控制列表
  • 存储桶策略:EMPTY
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以删除,但不能上传,用户无法做任何事情

案例 4

  • 阻止所有公共访问:
    • [x] 新的访问控制列表
    • [x] 任何访问控制列表
    • [x] 新的接入点策略
  • 存储桶策略:EMPTY
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以删除,但不能上传,用户无法做任何事情

案例五

  • 阻止所有公共访问:开启
  • 存储桶策略:EMPTY
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以删除,但不能上传,用户无法做任何事情

结论:设置为 ON 时阻止公共访问,允许一切。任何其他配置允许删除(也许允许更多,例如获取),但不允许放置。


案例六

  • 阻止所有公共访问:关闭
  • 存储桶策略:管理员(获取/放置/删除对象)用户(无)
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以上传和删除,用户无法做任何事情

案例 7

  • 阻止所有公共访问:
    • [x] 新的访问控制列表
  • 存储桶策略:管理员(获取/放置/删除对象)用户(无)
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以删除,用户无法执行任何操作

案例 8

  • 阻止所有公共访问:
    • [x] 新的访问控制列表
    • [x] 任何访问控制列表
  • 存储桶策略:管理员(获取/放置/删除对象)用户(无)
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以删除,用户无法执行任何操作

案例9

  • 阻止所有公共访问:
    • [x] 新的访问控制列表
    • [x] 任何访问控制列表
    • [x] 新的接入点策略
  • 存储桶策略:管理员(获取/放置/删除对象)用户(无)
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以删除,用户无法执行任何操作

案例 10

  • 阻止所有公共访问:开启
  • 存储桶策略:管理员(获取/放置/删除对象)用户(无)
  • ACL:存储桶拥有者(列出、写入 | 读取、写入)

结果:管理员可以删除,用户无法执行任何操作

结论:存储桶策略实际上对任何事情都没有任何影响


TLDR:存储桶策略似乎毫无作用。只有阻止公共访问才有可衡量的效果,唯一可用的选项是将其关闭。我还从公共存储桶中删除了存储桶策略,但它也没有改变任何东西。

我的结论是,要么是 Bucket 策略有问题,要么是文档不够充分,要么是设置本身违反直觉,实际上并没有按照说明执行。或者任何情况的组合。

此时,我宁愿将我的内容托管在我地下室的 FTP 服务器上。

相关内容