Amazon CloudFront - 使用签名 URL 保护视频

Posted

技术标签:

【中文标题】Amazon CloudFront - 使用签名 URL 保护视频【英文标题】:Amazon CloudFront - protect video with Signed URL 【发布时间】:2016-12-06 18:07:22 【问题描述】:

背景:

使用 S3 存储的 Amazon Cloudfront 视频交付:我使用的是自定义 360 度视频播放器。播放器只是链接到 MP4 视频。视频不会流式传输,而只是带有渐进式下载的直接链接。

要解决的问题 ---> 签名 URL

1) 视频只能从我的网站播放,不能从其他网站播放。否则有人会热链接到视频文件,我将不得不为亚马逊的流量付费。

2) 在何处以及如何插入 CloudFront“签名 URL”策略?大多数提示建议使用连接到 CloudFront 的“签名 URL”。但我不能把谜题放在一起,太混乱了,因为我只是一个半高级的自学成才的人。所以..:

2A --> 在哪里插入 CloudFront 策略?在 S3 控制台上?或者在哪里?

2B --> 究竟要写什么,请。提供一个工作示例!

2C --> 如何包含一个特定的域

3)我还怀疑保护 S3 存储桶中的文件权限是不够的,CloudFront 可能会忽略该权限规则。对吗?

指导:

如果没有任何效果,我正在寻找一个付费的 1 小时 Skype 指导会话,我们使用屏幕共享设置 1 个视频和 CloudFront 签名 URL。所有内容都带有分步说明,因此我可以自己为其他视频重复该过程。对于预算敏感的 Kickstarter / Indiegogo 项目,Skype 会话是负担得起的。

感谢您的帮助,真的!谢谢!

【问题讨论】:

你读过这篇文章了吗? docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… 是的,但我不明白在哪里插入策略。它没有说,或者我错过了......(老实说,对于一个只想设置一些安全视频的小型初创公司来说,他们的文档太困难和令人困惑。) 您知道在哪里插入策略吗? 视频存储在哪里?另外这个视频包含演示youtube.com/watch?v=tpdlVrliMf0 是的,我看过那个视频,但他们没有说在哪里以及如何插入签名 URL 策略.. 他们只是简单地跳过那部分说“如果你愿意,你可以设置它”。 (太棒了..)视频将存储在 Amazon S3 上。 【参考方案1】:

1) 视频只能从我的网站播放,不能从其他网站播放。否则有人会热链接到视频文件,我将不得不为亚马逊的流量付费。

是的,因此您的网站需要运行在可以动态生成链接到视频的 html 页面的平台上。

2) 在何处以及如何插入 CloudFront“签名 URL”策略?大多数提示建议使用连接到 CloudFront 的“签名 URL”。但我不能把谜题放在一起,太混乱了,因为我只是一个半高级的自学成才的人。所以..:

该策略用于生成签名,它包含在您生成的链接中,如果您使用custom policy ...它看起来像&Policy=... 后跟策略的base64 编码版本。

在网址里?!是的。签名使策略防篡改。这嵌入在您的代码在每次页面加载时生成的签名 URL 中。如果您使用固定策略,那么您不会将其保存/发送到任何地方。您将它用于签名计算,然后将其丢弃,因为 CloudFront 已经知道它包含什么,因为它与正在发出的请求相匹配(否则它是无效的,因此请求正确失败)。

2A --> 在哪里插入 CloudFront 策略?在 S3 控制台上?或者在哪里?

没有这样的地方。见上文。

2B --> 究竟要写什么,请。提供一个工作示例!

有一个工作示例in the documentation。

Stack Overflow 没有免费的代码赠送服务。

2C --> 如何包含一个特定的域

这并不完全是这样的。按域保护内容根本不是保护内容,因为可以伪造。

您的网站提供签名链接。这些链接是有效的,因为它们是从您那里获得的。它们只有几秒钟的时间——足够开始下载——然后它们就会过期......所以即使有人热链接到它们,你也不在乎,因为链接已经过时了。但这就是您在每次页面加载时生成它们的原因。

或者,通过 CloudFront 为您的整个站点提供服务,然后使用 CloudFront 签名的 cookie 允许登录到您站点的任何人访问您的受限内容。

3)我还怀疑保护 S3 存储桶中的文件权限是不够的,CloudFront 可能会忽略该权限规则。对吗?

不,CloudFront 没有对您的存储桶的特权访问,除非您安排它。 CloudFront 源访问身份赋予其访问存储桶中对象的必要权限。

阅读Serving Private Content through CloudFront。

【讨论】:

哦,哇,非常感谢您提供如此详细的见解。图片越来越清晰了。老实说,AWS 文档在没有清楚解释逻辑的情况下跳得太深了。至少我现在开始了解这个机制。我希望这个页面对其他新的 AWS 用户有所帮助。 但是,我不明白为什么您可以在 Amazon S3 上按域限制访问,但不能在 CloudFront 上限制访问。这是来自 S3 文档的引用,在我看来,S3 似乎很容易允许域限制。 QUOTE ---> " 要允许从您的网站读取这些对象,您可以添加一个允许 s3:GetObject 权限的存储桶策略,使用 aws:referer 键,获取请求必须来自特定网页。 " --- 有没有办法让这种方法也适用于 CloudFront? 这是一种原始的访问控制机制。它并不能真正保护您的内容不被下载,但确实使原始的盗链策略变得困难。它可以在 CloudFront 中使用 Web Application Firewall 来完成,或者,如果内容在 S3 上是公开的并且没有使用 CloudFront 身份验证,则可以在 S3 中启用此功能并将存储桶配置为“自定义”(而不是“S3”)源,并且在 CloudFront 分配的缓存行为设置中将 Referer 标头列入白名单。 谢谢!几秒钟前我刚刚在主墙上发布了同样的问题,但与此同时你已经在这里回答了。但我想这只是对社区有所帮助。 我还没有看到它,但是当我看到它时,我会考虑发布一个正确的答案或检查一个已经存在的答案并将其作为副本关闭——我怀疑它之前被问过,所以请记住在发布之前搜索,因为如果您不这样做,那么我们必须这样做。 :/ 这个想法是 SO 是一个参考站点,而不是一个论坛,许多问题已经有了答案。问题和答案应该对未来的客人有用,而 cmets 及其内容是短暂的 - 理想情况下,它们用于有限的讨论,提示对问题和/或答案进行编辑以提高其实用性。

以上是关于Amazon CloudFront - 使用签名 URL 保护视频的主要内容,如果未能解决你的问题,请参考以下文章

Amazon CloudFront - 使用签名 URL 保护视频

Amazon Cloudfront 签名 URL 访问被拒绝问题

如何为 Amazon CloudFront 签署 RTMP URL

Amazon S3 无法通过 Cloudfront 上传文件

使用 Ruby 为 CloudFront 创建签名 URL

Amazon S3 + CloudFront 查询特定版本的存储文件