【问题标题】:Amazon S3 see private filesAmazon S3 查看私有文件
【发布时间】: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 执行此操作,但它相当复杂。相反,请将您的私人文件放在第二个存储桶中。

标签: amazon-web-services amazon-s3


【解决方案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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

  • 这行不通。
  • @ShreyanshPanchal 你试试Storage::response($request->filename)。希望这对你有用
  • 很抱歉,这似乎可行。我很抱歉投反对票。我现在正在尝试更改它,但除非答案更改,否则 Stackoverflow 不会让我更改我的投票。
猜你喜欢
  • 2019-12-31
  • 1970-01-01
  • 2012-10-11
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2011-12-02
相关资源
最近更新 更多