AWS CloudFront Access-Control-Allow-Origin和签名Cookie /网址

时间:2016-02-21 17:20:32

标签: amazon-s3 amazon-cloudfront amazon-signed-cookie

我在S3 + Cloudfront +签名网址上遇到了CORS。

我的用例是:

第一个故事(成功):

  1. 我有一个带有Cloudfront的Amazon S3存储桶。 DOMAIN1/file链接

  2. 可以访问文件
  3. 我编写了一个简单的测试JS脚本来从DOMAIN1获取文件并将其放在DOMAIN2/test.html

  4. 我能够成功获取文件。 CORS很好
  5. 第二种情况(也是成功的):

    1. 我使用签名网址限制Cloud Front发布。
    2. 首先,我尝试访问DOMAIN1 的文件,不带签名。拒绝访问。没关系,因为请求没有签名。
    3. 我已成功创建了已签名的网址并能够下载该文件。
    4. 第三种情况(失败)

      1. 我将签名的网址(从第二个案例)放到DOMAIN2/test.html测试脚本
      2. 总是遇到No 'Access-Control-Allow-Origin' header错误。
      3. 因此,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 个答案:

答案 0 :(得分:0)

似乎解决方案是设置对S3存储桶的正确访问权限。相反,&#34; Everyone&#34;访问,需要一个&#34;任何AWS认证用户&#34;或&#34; Cloudfront适当的用户&#34;。

答案 1 :(得分: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)选项 - 对我来说,即使我已将整个缓存标记为限制,也标记为不受限制。

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