我在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
在试图弄清楚这一点的过程中,我转回使用不是IAM用户的AWS账户的访问密钥(假设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控制台中,存储桶1中的对象未设置任何权限。bucket-2中的对象与其所在的桶具有相同的权限。
可能使用了不同的方法将文件存储在两个存储桶中。bucket-2中的对象很可能是通过API创建的,而bucket-1中的对象则源自匿名POST。(是的,bucket-1的权限为“所有人”。)
即使使用我的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
在互联网上的一个有用站点上,我发现可以使用put-object-acl将acl设置为bucket-owner-full-control。我试过了 但是,您必须使用文件所有者的凭据来执行此操作-如果文件是匿名发布的,该怎么办?
不允许匿名上传到您的存储桶。如果这样做,并且上传者未正确设置权限,则唯一可用的操作是删除对象。
可以设置存储桶策略,以使匿名上传被拒绝,除非上载将ACL设置为bucket-owner-full-control,但这仅对以后的上传有用。
万一...有合法的匿名上传申请吗?高度可疑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句