Amazon S3 查看私有文件

Posted

技术标签:

【中文标题】Amazon S3 查看私有文件【英文标题】:Amazon S3 see private files 【发布时间】:2015-01-18 10:49:28 【问题描述】:

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

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

【问题讨论】:

您可以使用a condition block 执行此操作,但它相当复杂。相反,请将您的私人文件放在第二个存储桶中。 【参考方案1】:

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

对象访问控制列表 (ACL): 直接在对象上设置权限 Bucket Policy:与bucket相关,可以定义与子目录、键名(文件名)、时间、IP地址等相关的规则 IAM 政策:与特定用户或组相关

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

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

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

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

控制台中的打开命令 Web 浏览器中的预签名 URL 经过身份验证的 API 调用

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

见:Query String Request Authentication Alternative

【讨论】:

你能在这里回答我的问题吗:***.com/questions/29749203/… @iCoders 您的后端应用程序(在 Web 服务器上运行)负责确定用户是否有权访问 Amazon S3 中的对象。如果是这样,应用程序可以生成预签名 URL 并将 URL 作为网页的一部分返回。见:Pre-signed URL documentation for php @JohnRotenstein.Thanks.你能像任何代码一样更详细地回答这个问题吗***.com/questions/40168221/… 见:Pre-signed URL documentation for PHP【参考方案2】:

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

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

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

【讨论】:

这行不通。 @ShreyanshPanchal 你试试Storage::response($request->filename)。希望这对你有用 很抱歉,这似乎可行。我很抱歉投反对票。我现在正在尝试更改它,但除非答案更改,否则 *** 不会让我更改我的投票。

以上是关于Amazon S3 查看私有文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Amazon S3 中将在 aws3 存储桶中创建的文件夹设为公共或私有文件夹

Elastic beanstalk 实例无法访问私有 S3 文件

Amazon s3:“阻止公共访问”设置以允许使用签名 URL 进行公共读取私有写入

在 S3 和 cloudfront 上使用 rails carrierwave 私有文件

使用 Node JS 从 Amazon S3 私有存储桶中检索图像

如何使托管在 Amazon S3 上的图像不那么公开但不完全私有?