我在AWS S3上有一个桶(让我们称之为 bucket-1 ),我无法读取。我有另一个桶(让我们称之为 bucket-2 ),我可以阅读。
我可以列出两个存储桶的内容,但是我无法复制存储桶-1的任何内容。
% aws s3 ls s3://bucket-1/ | grep 0046
2016-03-09 15:39:50 4413909 0046f326-6e7d-4c16-80e4-491fa0b19dd7
% aws s3 cp s3://bucket-1/0046f326-6e7d-4c16-80e4-491fa0b19dd7 .
A client error (403) occurred when calling the HeadObject operation: Forbidden
在尝试解决此问题的过程中,我切换回使用AWS账户的访问密钥而不是IAM用户(假设AWS账户基本上具有所有权限)。
假设原因在权限中,我运行
% aws s3api get-bucket-acl --bucket my-bucket-1
% aws s3api get-bucket-acl --bucket my-bucket-2
它将我的AWS账户显示为两个存储桶的所有者。
bucket-2 拥有一项权限:我的AWS账户的FULL_CONTROL。
bucket-1 列出了多个权限,其中FULL_CONTROL 不。它列出了
用于我的AWS账户。
在Web控制台中, bucket-1 中的对象没有任何权限集。 bucket-2 中的对象与其所在的存储区具有相同的权限。
可能使用不同的方法将文件存储在两个存储桶中。 bucket-2 中的对象可能是通过API创建的,而 bucket-1 中的对象来自匿名POST。 (是的, bucket-1 拥有对每个人的权限WRITE。)
即使使用我的AWS账户的凭据,我也没有权限查询该对象的acl。
% aws s3api get-object-acl --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7
A client error (AccessDenied) occurred when calling the GetObjectAcl operation: Access Denied
% aws s3api get-object --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7 local.file
A client error (AccessDenied) occurred when calling the GetObject operation: Access Denied
% aws s3api head-object --bucket bucket-1 --key 0046f326-6e7d-4c16-80e4-491fa0b19dd7
A client error (403) occurred when calling the HeadObject operation: Forbidden
在helpful site on the internet上我发现可以使用 put-object-acl 将acl设置为 bucket-owner-full-control 。我试过了。但您必须使用文件所有者的凭据执行此操作 - 如果文件是匿名发布的,您如何才能执行此操作?
答案 0 :(得分:1)
不允许匿名上传到您的存储桶。如果您这样做,并且上传者没有正确设置权限,那么您可以使用的 操作就是删除该对象。
可以设置存储桶策略,以便拒绝匿名上传,除非上传将ACL设置为存储桶拥有者完全控制,但这仅对将来的上传有用。
事件......是否有合法的匿名上传应用程序?非常可疑。