2016-02-21 58 views
0

我在S3 + Cloudfront +签名的Url上坚持使用CORS。AWS CloudFront访问控制 - 允许来源和签名Cookie/Url

我的使用情况是:

第一个故事(成功):

  1. 我有一个Amazon S3存储用的Cloudfront。文件由DOMAIN1/file链接

  2. 我写了一个简单的测试,JS脚本从DOMAIN1获取文件,并把它放在DOMAIN2/test.html

  3. 我能够得到文件成功访问。 CORS很好

第二种情况(太成功):

  1. 我用标识的URL限制云锋分布。
  2. 起初我试过的是在DOMAIN1 下访问一个文件,没有签名。被拒绝访问。没关系,因为请求没有签名。
  3. 我创建了一个签名的URL,并且能够成功下载该文件。

第三种情况(失败)

  1. 我把标识的URL(从第二种情况)的DOMAIN2/test.html测试脚本
  2. 并始终得到了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设置一些问题。我如何解决它?

+0

如果您可以从失败的案例中捕获请求和响应头文件,那么您将更容易理解您要报告的内容。 –

回答

0

看起来像一个解决方案是设置一个正确的S3存储桶的访问权限。相反,“所有人”访问需要“任何AWS认证用户”或“Cloudfront适当用户”。

0

我去Cloudfront Distributions -> MYPRIVATECLOUDFRONTID -> Behaviors并补充如下:

Path Pattern = path/to/my/file.ext 

Forward Headers = Whitelist 

,并添加到Whitelist Header: Origin

不要忘了取消Restrict Viewer Access (Use Signed URLs or Signed Cookies)选项 - 对我来说,它被标记为不即使我限制已标记整个缓存被限制。

我的下一步是根据需要自动设置此白名单。