我有一个示例网页,允许匿名用户上传对象并在我的S3存储桶中创建文件夹。
不幸的是,在执行此操作之前,我没有设置任何特定的存储桶策略或ACL。
现在我遇到一个问题,即匿名用户创建了一个文件夹并上传了我(作为root用户)无法下载或访问的对象。我计划在更多用户上传对象之前设置新的存储桶策略,但是现在我需要访问匿名拥有的这些当前对象。
有人能告诉我怎么做吗?
答案 0 :(得分:3)
匿名用户',您的意思是未经身份验证的用户&#39 ;?如果是这样,那么你有两个选择(下面是#1和#2)。如果没有,那么你有一个选项(下面#1)。当然,所有这些都假定您无法说服上传者自己修改这些对象的ACL。
删除对象。作为存储桶拥有者,您始终可以删除对象(并停止为其付费)。
成为对象所有者并授予存储桶拥有者(您)完全控制权。任何人都可以是未经身份验证的用户,因此也可以是对象所有者。
以下是使用node.js和AWS JavaScript SDK如何为bkt / cat.jpg执行#2的示例。此代码将putObjectAcl作为未经身份验证的用户调用,并使存储桶拥有者(您)完全控制该对象。
var aws = require('aws-sdk');
var s3 = new aws.S3();
var p = { Bucket: 'bkt', Key: 'cat.jpg', ACL: 'bucket-owner-full-control' };
s3.makeUnauthenticatedRequest('putObjectAcl', p, function(e,d) {
if (e) console.log('err: ' + e);
if (d) console.log('data: ' + d);
});
不幸的是,awscli似乎不支持未经身份验证的S3调用,否则我会建议使用它来修改对象的ACL。
请注意,bucket-owner-full-control的canned ACL为对象所有者和提供了对所有者的完全控制权。
答案 1 :(得分:0)
查看您用于访问AWS管理控制台的身份和访问管理(IAM)用户的策略。如果它具有管理员或高级用户策略设置,那么您将拥有与您的AWS账户关联的所有Amazon S3存储桶中对象的完全访问权限。
您需要通过经过身份验证的方法访问对象,例如S3 Management Console。
如果您使用的是帐户的 root 用户,则您还可以完全访问S3存储桶及其内容。建议您不要每天使用root用户,因为它可以完全访问您的帐户,如果受到攻击则很危险 - 而是使用root帐户在IAM中创建管理用户,这样可以更轻松地管理(例如,更改权限,旋转键)。
如果您仍然无法查看对象,请确保通过选择对象然后从“操作”菜单中选择打开来访问它们。这将创建一个经过身份验证的URL,用于打开文件。如果只是单击对象属性窗口中显示的链接,它将使用没有身份验证的URL,并且可能会失败。