限制访问amazon s3文件,仅允许登录用户访问

时间:2016-06-04 23:44:02

标签: php amazon-web-services amazon-s3

当我转到我的存储桶文件的网址时,它立即下载。但是,我只希望登录到我的应用程序的用户能够访问这些文件。

我一直在搜索几个小时,但无法从我的应用程序中找到如何在PHP中执行此操作。我正在使用laravel来执行此操作,因此代码可能看起来不熟悉。但实质上它只是生成我的存储桶文件的URL,然后重定向到下载它的链接

$url = Storage::url('Shoots/2016/06/first video shoot/videos/high.mp4');
return redirect($url);

如何才能让登录到我的应用程序的用户可以访问此文件?

1 个答案:

答案 0 :(得分:10)

对于我正在处理的应用程序,我们遇到了类似的问题。我们最终使用的解决方案是生成S3 signed URLS,它们的到期时间很短。这允许我们生成一个新的签名链接,其中包含对Web服务器的每个请求,将该链接传递给我们已知的auth'd用户,然后用户可以访问非常有限的时间(几秒钟)。对于我们想要在DOM中显示的图像,我们让我们的API使用HTTP 303(请参阅其他)标头和签名的URL进行响应,该URL在几秒钟内过期。这使浏览器有时间下载图像并在链接过期之前显示它。

此解决方案存在两个风险:我们知道用户可能会在程序化过期之前请求已签名的URL并与其他服务共享,或者正在拦截网络流量的未授权用户可能会拦截请求并自己制作,我们认为这些是足够的边缘情况,我们对我们的解决方案感到满意。