如何在 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。它列出
- 阅读
- 写入
- 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
问题
在 上,我发现可以使用 put-object-acl 将 acl 设置为 bucket-owner-full-control 。我试过了。但是您必须使用文件所有者的凭据来执行此操作 - 如果文件是匿名发布的,您将如何执行此操作?
- 我还能尝试什么?
- S3 上的对象(如存储桶)是否有所有者?
- 如果是这样,我可以在 Web 控制台的哪个位置找到该信息?
不允许匿名上传到您的存储桶。如果您这样做,并且上传者没有正确设置权限,您可以使用的唯一操作是删除该对象。
可以设置存储桶策略以拒绝匿名上传,除非上传者将 ACL 设置为存储桶拥有者完全控制,但这仅对以后的上传有用。
如果...是否有匿名上传的合法申请?高度怀疑。
我在 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。它列出
- 阅读
- 写入
- 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
问题
在
- 我还能尝试什么?
- S3 上的对象(如存储桶)是否有所有者?
- 如果是这样,我可以在 Web 控制台的哪个位置找到该信息?
不允许匿名上传到您的存储桶。如果您这样做,并且上传者没有正确设置权限,您可以使用的唯一操作是删除该对象。
可以设置存储桶策略以拒绝匿名上传,除非上传者将 ACL 设置为存储桶拥有者完全控制,但这仅对以后的上传有用。
如果...是否有匿名上传的合法申请?高度怀疑。