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 私有文件