Amazon S3查看私人文件

时间:2015-01-18 10:49:29

标签: amazon-web-services amazon-s3

我正在使用Amazon S3将文件上传到不同的文件夹中。所有文件夹和文件都是公开的,任何人都可以看到。我创建了一个私人文件夹,我想放置私有图像,这样我才能看到它们。我已经创建了一个存储桶策略规则,拒绝访问该文件夹。但是我怎么能看到文件呢?是否有像 https://s3.amazonaws.com/bucket/private_folder/file.jpg?secret_key=123 这样的特殊链接会让我和知道该密钥的人看到这些文件?

有没有办法上传可以通过使用secret_key,url或类似内容看到的私人文件?

2 个答案:

答案 0 :(得分:9)

默认情况下,Amazon S3中的所有对象都是私有的。然后可以通过以下方式之一添加权限,使对象成为“公共”:

  • 对象访问控制列表(ACL):直接在对象上设置权限
  • 存储桶策略:与存储桶相关,可以定义与子目录,密钥名称(文件名),时间,IP地址等相关的规则
  • IAM政策:与特定用户或群组相关

只要其中一种方法授予访问权限,该人就能够访问该对象。也可以指定覆盖允许权限的Deny权限。

当通过未经身份验证的网址(例如s3.amazonaws.com/bucket-name/object-key)访问对象时,上述规则决定了访问权限。但是,如果您对服务进行身份验证,则可以访问“私有”文件,例如使用您的用户凭据或使用预签名URL调用S3 API。

要了解其工作原理,请在Amazon S3管理控制台中单击一个私人文件,然后从“操作”菜单中选择打开。该对象将被打开。这是通过为浏览器提供预签名URL来完成的,该URL包括加密大小的URL和有效期。该URL将仅用于获取私有文件,直到定义的时间。

因此,要回答您的问题,您仍然可以通过以下方式访问私人文件:

  • 控制台中的“打开”命令
  • 网络浏览器中的预签名网址
  • 经过身份验证的API调用

请注意,您不要定义DENY规则,甚至覆盖您访问文件的能力。简单地允许您想要公开的目录更容易。

请参阅:Query String Request Authentication Alternative

答案 1 :(得分:0)

您可以通过使用s3方法创建temporary Url来访问temporaryUrl私有文件。

$url = Storage::temporaryUrl(
    'file.jpg', now()->addMinutes(5)
);

temporaryUrl方法的参数为$path$expiration$option = []。前两个参数是必需的,$option的默认值是空的array