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

How can I read anonymously POSTed files on AWS S3?

我在 AWS S3 上有一个存储桶(我们称之为 bucket-1),我无法从中读取。我有另一个存储桶(我们称之为 bucket-2),我可以从中 读取 .

我可以列出两个桶的内容,但我无法复制 bucket-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 有一项权限:FULL_CONTROL 我的 AWS 账户。

bucket-1列出了几个权限,FULL_CONTROL是not。它列出

我的 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

问题

上,我发现可以使用 put-object-acl 将 acl 设置为 bucket-owner-full-control 。我试过了。但是您必须使用文件所有者的凭据来执行此操作 - 如果文件是匿名发布的,您将如何执行此操作?

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

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

如果...是否有匿名上传的合法申请?高度怀疑。