我在S3 Cloudfront Signed Urls上遇到了CORS .
我的用例是:
第一个故事(成功):
-
我有一个带有Cloudfront的Amazon S3存储桶 .
DOMAIN1/file
链接可以访问文件 -
我编写了一个简单的测试JS脚本来从DOMAIN1获取文件并将其放在
DOMAIN2/test.html
-
我能够成功获取文件 . CORS is fine .
第二种情况(成功):
-
我使用签名网址限制Cloud Front分发 .
-
起初我尝试过访问DOMAIN1 without Signature上的文件 . 拒绝访问 . 没关系,因为请求没有签名 .
-
我已成功创建了一个已签名的URL和 able to download 文件 .
第三种情况(失败)
-
我将签名的URL(从第二个案例)放到
DOMAIN2/test.html
测试脚本中 -
总是出现
No 'Access-Control-Allow-Origin' header
错误 .
因此,Cloudfront不会在限制分发的情况下发送标头 .
CORS xml是:
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://*</AllowedOrigin>
<AllowedOrigin>https://*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>10</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
它必须是CloudFront / S3 / IAM设置中的某些问题 . 我该怎么办呢?
2 回答
似乎解决方案是设置对S3存储桶的正确访问权限 . 相反,“Everyone”访问需要“任何AWS身份验证用户”或“适合Cloudfront的用户” .
我去了
Cloudfront Distributions -> MYPRIVATECLOUDFRONTID -> Behaviors
并添加了以下内容:并添加到
Whitelist Header: Origin
不要忘记取消选中
Restrict Viewer Access (Use Signed URLs or Signed Cookies)
选项 - 对我来说,它被标记为不受限制,即使我已将整个缓存标记为限制 .我的下一步是根据需要自动设置此白名单 .