场景:
我有基于IP条件的公共读/写桶 .
当匿名用户上传文件时,所有者是 65a011a29cdf8ec533ec3d1ccaae921c 我无法重命名/移动/复制此类文件,因为我'm lacking permissions and bucket replication is not working for them for the same reason. However i can delete (because I' m桶所有者)和白名单IP中的其他人都可以使用S3提供的链接下载它们 .
此标头已添加到用于上载内容的脚本中,以解决复制问题 .
{'x-amz-grant-full-control': 'id=my canonical id'}
现在我完全控制对象和复制工作正常,但我不能使用S3或wget或CLI的链接下载它们实际上没有人能...
HTTP request sent, awaiting response... 403 Forbidden
2017-09-22 00:04:32 ERROR 403: Forbidden.
只有S3 Web界面中文件概述的下载按钮似乎可以正常工作 .
为什么在应用此ACL后,对象不再符合存储桶策略?
2 回答
好吧,我认为可能是这种情况,但想确认一些细节 .
S3有两种不同的权限模型: Access Control Lists (ACL)和 Bucket Policies .
Access Control Lists
S3中的每个对象都有自己的 Access Control List (ACL) . 有了这个,个人用户可以授予对单个文件的读访问权限 . 这也可以授予对Bucket Owner的访问权限以便能够控制文件 .
Bucket Policies
这使用更具描述性的权限格式,类似于IAM策略 . 有了它,可以为跨账户访问,特定IAM用户和角色等授予访问权限 .
Bucket Policies are only observed when the owner of the object is also the owner of the bucket .
Options
让您的脚本同时授予对象的ACL公共读取权限
使用您的应用程序(EC2,Lambda)生成的签名网址,以允许用户代表您安全上传
让对象所有者动态更改 . 这将涉及在PutObject上执行的lambda函数,如果存储桶拥有者和对象所有者不同,则将对象复制回来 .
您好Jamie谢谢您的简明回答,我想出了这个脚本,将所有者从匿名更改为桶主:
大约150GB的数据需要68m45.076s . 不打算再使用匿名上传了:)