如何在AWS S3上读取匿名发布的文件?

时间:2016-05-21 15:47:24

标签: amazon-s3 aws-cli

我在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 。它列出了

  • READ
  • WRITE
  • READ_ACP
  • WRITE_ACP

用于我的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 。我试过了。但您必须使用文件所有者的凭据执行此操作 - 如果文件是匿名发布的,您如何才能执行此操作?

  • 我还能尝试什么?
  • S3上的对象,如桶,是否拥有所有者?
  • 如果是这样,我可以在Web控制台中找到该信息吗?

1 个答案:

答案 0 :(得分:1)

不允许匿名上传到您的存储桶。如果您这样做,并且上传者没有正确设置权限,那么您可以使用的 操作就是删除该对象。

可以设置存储桶策略,以便拒绝匿名上传,除非上传将ACL设置为存储桶拥有者完全控制,但这仅对将来的上传有用。

事件......是否有合法的匿名上传应用程序?非常可疑。