我正在尝试整合从S3存储桶获取的CloudFront分配的签名cookie,但获取访问被拒绝的错误消息:
<Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>BLAH BLAH</RequestId> <HostId>BLAH BLAH</HostId> </Error>
让我感到困惑的是,一些文件似乎一直工作,而其他人在我的自定义策略允许同一目录使用相同的签名的cookie失败。
例如:我在/projects/index.html上有一个文件,在/projects/src/Runtime.js上有一个文件,它不会使用自定义策略,通过在资源中使用通配符: http : //test.mydomain.com/projects/ *
这两个文件都设置为私人在S3上,我可以想到这两个文件之间的唯一区别是请求/projects/src/Runtime.js文件请求引用test.mydomain.com而不是mydomain.com这是第一个/projects/index.html请求的服务。
我知道这两个请求的cookie都被正确设置,并且这些自定义策略和签名对他们来说是有效的,因为当我弄乱他们并给他们错误的值时,我会得到不同的错误信息。
无论如何! 我的configuration如下:
CloudFront设置: i.imgur.com/DMcUeDY.png (服务器默认链接限制,b)
我有一个替代的主机名,这是服务该文件的网站的子域(例如test.mydomain.com)。 它不是一个真正的CNAME条目,我没有它的证书 – 我通过本地/ etc / hosts条目使用该名称引用CloudFront。
CloudFront原点设置: i.imgur.com/ereGJ42.png (服务器默认链接限制,meh)
起源很简单 – 引用我的S3桶的根,我不限制桶,因为它还包含我想保持公开可用的文件。
我修改了default的行为: i.imgur.com/5N2RlxM.png (Serverfault链接限制,呃)
基本上打开了限制查看器访问。 可信签名者是s3存储桶的所有者的根帐户。
其余的CloudFront选项保持不变。 我有一个由亚马逊生成的CloudFront密钥对,我使用它提供给PHP(使用openssl_sign)亚马逊的片段来签署一个自定义策略访问整个目录。
我真的不能真正validation问题的地方在于真正模糊的“访问被拒绝”错误消息,但我敢肯定,它不是我签署cookie的方式。 我试过使用错误的值,并得到不同的错误,如“格式错误的签名”或“格式错误的政策”,所以我假设我的签名检查。 另外,正如我所提到的一些文件的工作。
我已经坚持了几天现在,任何帮助将不胜感激!