【问题标题】:Authorising HLS streaming files from Amazon S3 directory从 Amazon S3 目录授权 HLS 流文件
【发布时间】:2020-09-23 04:40:45
【问题描述】:

我们有将原始视频转换为 HLS 格式(.m3u8 和 .ts 文件)并将它们组织到 s3 存储桶内的目录中的设置。桶内的每个目录代表一个视频。由于 s3 在其实现中实际上并没有目录的概念,因此它不允许我们获取签名的 url 来读取目录的内容以馈送到视频播放器中。

我尝试单独使用 getObject 对 .m3u8 文件的 URL 进行签名,但由于尝试获取要播放的视频部分,它将被 s3 抛出 403。在这个阶段,使用 cloudfront 不是我们的选择。

有没有更好、更安全的方法来处理来自 s3 的流而不公开整个存储桶?

【问题讨论】:

  • 我的情况也和你一样。你找到处理它的选项了吗?如果是这样,你介意分享它吗?提前致谢。
  • 添加了我们所做的解决方案作为对这个问题的回答。 @Aritrik

标签: node.js amazon-web-services amazon-s3 http-live-streaming aws-sdk-js


【解决方案1】:

对于仍在寻找类似解决方案的任何人,您无法单独使用 s3 获得目录或通配符的签名 url。更好的方法是将 CloudFront 放在 s3 前面,并使用 CloudFront 签名的 URL/Cookie 和自定义策略,允许在签名时使用通配符。

来自 AWS Docs 的示例:

{ 
   "Statement": [
      { 
         "Resource":"http://d111111abcdef8.cloudfront.net/training/*", 
         "Condition":{ 
            "DateLessThan":{"AWS:EpochTime":1357034400}
         }
      }
   ] 
}

更多信息在这里解释:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html

尽管我们最初不想使用 CloudFront,但最终还是使用了它,因为这在当时似乎是唯一可行的选择,而且来自 AWS 的开发人员也建议这样做。

如果您对构建自定义解决方案感到满意,您可以构建一个充当授权方的 lambda,并在 s3 之上验证通配符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多