在编写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
谢谢
答案 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用户,您可以转到 存储桶的“权限”部分,然后添加这些权限 回来。