【问题标题】:Streaming server side encrypted videos on S3 with cloudfront使用云端在 S3 上流式传输服务器端加密视频
【发布时间】:2017-06-16 01:35:33
【问题描述】:

我正在使用亚马逊 S3 存储以及带有客户提供的密钥 (SSE-C) 的服务器端加密来存储视频文件。我使用 Django 作为我的后端服务器,并将与数据库中每个文件关联的所有名称密钥和密钥存储在 EC2 容器上。

我想使用亚马逊云端服务流式传输这些视频。我已经创建并配置了一个带有 S3 存储的云端分发。我可以很容易地提供非加密视频,但我无法访问加密视频,因为它需要名称密钥和密钥才能访问服务器端加密数据。

在这方面我找不到任何帮助。甚至可以使用云端提供服务器端加密 (SSE-C) 媒体文件吗?

如果可能,请指导我找到最佳解决方案。 在这方面的任何帮助将不胜感激。谢谢

【问题讨论】:

  • 我投票结束这个问题,因为它与编程无关

标签: amazon-s3 video-streaming amazon-cloudfront


【解决方案1】:

它需要名称密钥和密钥才能访问服务器端的加密数据。

这还不是问题的全部;然而。 CloudFront signed URLs with an origin access identity 将透明地重新签署请求,以便 S3 在 CloudFront 断定请求已获得授权时允许访问这些对象,但您无法创建与 SSE-C 兼容的 CloudFront 签名 URL。

这又是因为 S3 中的 SSE-C 不支持在查询字符串中将必要的参数传递给 S3。

使用预签名 URL 上传新对象、检索现有对象或仅检索对象元数据时,您必须在客户端应用程序中提供所有加密标头

http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html

使用 SSE-C,加密参数必须作为标头而不是查询参数发送。

而且,如果您考虑一下,似乎没有什么用密钥加密对象的目的,这些密钥在每次发出请求时并记录——密钥将在查询字符串中。

SSE-S3 与 CloudFront 透明地协同工作。 SSE-KMS,我也希望得到支持(因为根据 S3 API 文档,GET 请求不需要(或允许)与加密相关的标头)。

如果您的对象使用带有 AWS KMS 托管加密密钥 (SSE-KMS) 的服务器端加密或服务器端加密,则不应为 GET 请求发送加密请求标头,例如 x-amz-server-side-encryption使用 Amazon S3 托管的加密密钥 (SSE-S3)

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html

【讨论】:

  • 感谢迈克尔的回复。但这对我来说仍然有点不清楚。如果您能再详细说明一下,那就太好了。这是我从您的回答中了解到的(如果我错了,请纠正我):如果想通过云端流式传输内容,SSE-C 类型的加密不适合。为了通过云端提供数据并在 S3 上保持加密,必须使用一种服务器端加密,其中密钥由亚马逊本身管理,而不是像 SSE-KMS 这样的客户端。
  • 或者我仍然可以通过在请求标头中传递密钥和名称密钥来流式传输 SSE-C 加密视频吗?
  • 我认为 CloudFront 不会将必要的标头传递给 S3,即使您的应用程序可以将它们注入到请求中。事实上,考虑到这一点,我不确定 CloudFront 是否也可以与 SSE-KMS 一起使用,至少在某些 S3 区域是这样。伦敦等较新的地区可能会,但俄勒冈等较老的地区几乎肯定不会,因为一些就地设计特征需要进行更改,从而破坏某些现有用途。你能解释一下你以这种方式控制加密的动机吗?也许您正在解决错误的问题?
猜你喜欢
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多