S3-撤消拥有对象的“完全控制”权限

时间:2018-06-28 11:25:21

标签: amazon-web-services amazon-s3

在编写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

谢谢

2 个答案:

答案 0 :(得分:1)

这些天,建议使用官方的AWS Command-Line Interface (CLI)而不是s3cmd

通常应避免使用对象级权限来控制访问。最好使它们全部为“ 存储桶所有者完全控制”,然后使用存储桶策略来授予对存储桶或路径的访问权限。

如果希望提供按对象的访问权限,建议使用Amazon S3 pre-signed URLs,它可以对私有对象进行时间限制的访问。时间到期后,URL将不再起作用。您的应用程序将负责确定是否允许用户访问对象,然后生成预签名的URL(例如,作为HTML页面上的链接或href)。

答案 1 :(得分:0)

因此,AWS支持人员提供了官方答案:

  

T 该问题的简短答案是“是”,存储桶/对象   所有者有权读取和更新存储桶/对象ACL,   如果没有明确附加的存储桶策略   从所有者中删除这些权限。例如,以下内容   政策将阻止所有者进行任何操作,   包括更改存储桶的ACL:

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

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

     

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

     

示例:假设您创建了一个名为-S3User1-的IAM用户,并给出了   它具有在S3中创建存储桶并更新其ACL的权限。中的用户   问题然后继续并创建一个存储桶并命名   “ s3user1-bucket”。在那之后,他走得更远,删除列表对象,   写入对象,读取存储桶权限和写入存储桶权限   从ACL部分的root帐户中。此时,如果您登录   以root身份并尝试读取该存储桶中的对象,   系统会引发“拒绝”错误。但是,作为root用户,您可以转到   存储桶的“权限”部分,然后添加这些权限   回来。