首页 > 解决方案 > S3 - 撤销拥有对象的“full_control”权限

问题描述

在编写 S3 服务器实现时,遇到了我在任何地方都找不到答案的问题。

例如,我是存储桶所有者,也是上传对象的所有者。

如果我撤销对象所有者(我自己)的“full_control”权限,我可以访问和修改该对象吗?以下示例中的预期行为是什么:

s3cmd setacl --acl-grant full_control:ownerID s3://bucket/object
s3cmd setacl --acl-revoke full_control:ownerID s3://bucket/object
s3cmd setacl --acl-grant read:ownerID s3://bucket/object

谢谢

标签: amazon-web-servicesamazon-s3

解决方案


所以有来自 AWS 支持的官方回答:

对该问题的简短回答是肯定的,存储桶/对象所有者有权读取和更新存储桶/对象 ACL,前提是没有附加存储桶策略显式删除所有者的这些权限。例如,以下策略将阻止所有者对存储桶执行任何操作,包括更改存储桶的 ACL:

 {
  "Id": "Policy1531126735810",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Example bucket policy",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::<bucket>",
      "Principal": "*"
    }
  ]
}

但是,作为 root(存储桶所有者),您仍然有权删除该策略,然后恢复您作为存储桶所有者的权限以更新 ACL。

默认情况下,所有 S3 资源、存储桶、对象和子资源都是私有的;只有资源所有者(即创建它的 AWS 账户)才能访问资源 [1]。作为资源所有者(AWS 账户),您可以选择通过向用户附加访问策略来向其他用户授予权限。

示例:假设您创建了一个名为 -S3User1- 的 IAM 用户,并授予其在 S3 中创建存储桶并更新其 ACL 的权限。然后有问题的用户继续创建一个存储桶并将其命名为“s3user1-bucket”。之后,他进一步从 ACL 部分的根帐户中删除了 List 对象、Write 对象、Read bucket 权限和 Write bucket 权限。此时,如果您以 root 身份登录并尝试读取该存储桶中的对象,则会抛出“拒绝访问”错误。但是,作为 root,您将能够转到存储桶的“权限”部分并重新添加这些权限。


推荐阅读