从 Amazon S3 目录授权 HLS 流文件

Authorising HLS streaming files from Amazon S3 directory

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

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

有没有更好更安全的方法来处理来自 s3 的流,而无需制作整个存储桶 public?

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

来自 AWS 文档的示例:

{ 
   "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 之上验证通配符。