首页 > 解决方案 > S3 - Cloudfront - Access-Control-Allow-Origin 标头

问题描述

我有一个存储 hls 文件的 s3 存储桶,如果使用默认的 s3 url,我需要能够在播放器中流式传输这些文件,它可以工作,但不安全。

我阅读并发现您可以使用 CloudFront 并创建签名的 url 或 cookie。然后我使用以下选项创建了一个新发行版

Origin Domain Name: Name of my s3 bucket
Restrict Bucket Access: yes
Create a New Identity
Yes, Update Bucket Policy
Allowed HTTP Methods: GET, HEAD, OPTIONS
Cached HTTP Methods: select checkbox OPTIONS
Use legacy cache settings
And then I selected whitelist and choose
Access-Control-Request-Headers
Access-Control-Request-Method
Origin

最后我选择了

Restrict Viewer Access (Use Signed URLs or Signed Cookies): yes

创建发行版后,我尝试通过 zxxxx.cloudfront.net/ls/600/10/playlist.m3u8 访问文件

我得到了Missing Key-Pair-Id 查询参数或 cookie 值

到目前为止,我认为一切正常。

我创建了一个 ruby​​ 脚本来获取这些证书

CloudFront-Policy
CloudFront-Signature
CloudFront-Key-Pair-Id

如果那时我尝试使用 cookie 或 url 访问文件

zxxxx.cloudfront.net/ls/600/10/playlist.m3u8?Policy=&Signature=&Key-Pair-Id

我能够下载该文件,这意味着一切正常。

问题是当我尝试通过我的 rails 应用程序访问文件时,我收到消息:已被 CORS 策略阻止

我阅读并发现请求应该来自同一个域以便能够发送 cookie
然后我在名为 cloud.example.com 的云端分发中添加了一个 CNAME 在
本地我在名为 dev.example 的主机文件中创建了一条记录.com,端口 80


再次尝试播放该文件,我仍然收到相同的错误:
'http://cloud.example/hls/600/10/playlist.m3u8' from origin 'http://dev.example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

桶里的cors是

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
    <AllowedHeader>Range</AllowedHeader>
</CORSRule>
</CORSConfiguration>

谁能帮我?

标签: amazon-web-servicesamazon-s3corsamazon-cloudfront

解决方案


推荐阅读