php - AmazonAWS 保护 S3 Bucket 视频
问题描述
我以一种非常简单的方式使用 AWS S3 存储桶。
- 有一个桶,<somebucket1>
- 有一个文件夹,<somebucket1>/sitevideos
- 以及其中的视频文件,<somebucket1>/sitevideos/video.mp4
我使用此存储桶,因此与仅从网站的同一服务器调用视频相比,使用 HTML5 视频 ( <video></video>
) 的播放更加优化并且不会滞后(这很荒谬)。
视频文件是加密的,但它们被设置为只读到公开。
现在,我担心的是,因为它们是公开的,人们可以从 S3 存储桶下载它们,而不是在网站上播放它们。
问题
有没有办法在远程网站的 HTML 视频上播放 S3 存储桶中的视频文件,但如果通过 S3 路径直接访问文件,将拒绝下载该文件?
如果有这方面的教程,我将不胜感激。如果这已经在 S3 文档中,我为懒惰道歉,请给我看链接。我还听说您可以将它们设置为私有权限,但它们仍然可以在远程服务器上播放(尽管我还没有做到这一点)。
干杯和非常感谢
解决方案
Bucket Policy 可以配置为限制对特定 HTTP Referrer 的访问。
例如,如果网页在页面上包含图像,则对该对象的 HTTP 请求将包含referer
. (我认为这也适用于视频。)
然而,这并不是很好的安全性,因为可以很容易地操纵 HTTP 请求以包含referer
(例如,在网络爬虫中)。
更安全的方法是使用预签名 URL。这是一个特殊构造的 URL,它授予对私有 Amazon S3 对象的限时访问权限。
呈现网页时,您的应用程序将确定是否允许用户访问该对象。如果是这样,它将使用 AWS 凭证构建预签名 URL。然后可以将 URL 包含在标准 HTML 标记中(例如<img src='...'>
)。在到期时间之前,用户将能够访问该对象。如果他们与其他人共享 URL(例如在推文中),其他人也将能够访问该对象,直到到期时间。
顺便说一句,Amazon CloudFront 还可以使用各种视频协议来提供视频内容。它还支持预签名的 URL(以及签名的 cookie)。
推荐阅读
- python - cv2.imshow() 多次调用后给出随机错误
- javascript - 使用 Object.keys 从映射对象输出键/值时出现打字稿错误
- c++ - 如何缩短此迭代问题的运行时间
- javascript - 接受文件上传类型
- reactjs - 打字稿错误对象的类型为“未知”
- c++ - 具有偶数和奇数分开的数组的函数复杂性
- javascript - Vue 中静态站点的动态 URL 路由
- javascript - 当服务器需要时间来接收消息时,Firefox 会复制大型 websocket 消息
- c++ - 使用复制构造函数时,类数据成员是否在复制构造函数之前初始化?
- excel - 尝试制作一个搜索功能,将一列过滤为包含 VBA 中的输入的行