我有一个示例网页,允许匿名用户上传对象并在我的 S3 存储桶中创建文件夹。
不幸的是,在此之前我没有设置任何特定的存储桶策略或 ACL。
现在我遇到了一个问题,一个匿名用户创建了一个文件夹并上传了我(作为 root 用户)无法下载或访问的对象。我计划在更多用户上传对象之前设置一个新的存储桶策略,但现在我需要访问匿名拥有的这些当前对象。
有人能告诉我我该怎么做吗?
我有一个示例网页,允许匿名用户上传对象并在我的 S3 存储桶中创建文件夹。
不幸的是,在此之前我没有设置任何特定的存储桶策略或 ACL。
现在我遇到了一个问题,一个匿名用户创建了一个文件夹并上传了我(作为 root 用户)无法下载或访问的对象。我计划在更多用户上传对象之前设置一个新的存储桶策略,但现在我需要访问匿名拥有的这些当前对象。
有人能告诉我我该怎么做吗?
“匿名用户”是指“未经身份验证的用户”吗?如果是这样,那么您有两个选择(下面的#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 的标准ACL为对象所有者和存储桶所有者提供了完全控制权。
查看您用于访问 AWS 管理控制台的身份和访问管理 (IAM) 用户的策略。如果它具有管理员或高级用户策略设置,那么您将拥有对与您的 AWS 账户关联的所有 Amazon S3 存储桶中的对象的完全访问权限。
您将需要通过经过身份验证的方法(例如 S3 管理控制台)访问对象。
如果您使用您账户的root用户,您还可以完全访问您的 S3 存储桶及其内容。不建议您每天都使用您的根用户,因为它可以完全访问您的帐户,并且如果被入侵会很危险——相反,使用根帐户在 IAM 中创建一个管理用户,这样可以更轻松地进行管理(例如更改权限、轮换密钥)。
如果您仍然难以查看对象,请通过选择对象然后从“操作”菜单中选择“打开”来确保正在访问它们。这将创建一个将打开文件的经过身份验证的 URL。如果您只是单击对象属性窗口中显示的链接,它将使用没有身份验证的 URL,并且可能会失败。