为什么'缺少Key-Pair-Id查询参数或cookie值'

时间:2015-04-21 22:47:23

标签: amazon-s3 amazon-cloudfront

我正在尝试使用signed url通过AWS cloudfront将S3存储桶作为私有内容提供服务。

但是我不断收到此错误'Missing Key-Pair-Id查询参数或Cookie值'

<Error>
<Code>MissingKey</Code>
<Message>
Missing Key-Pair-Id query parameter or cookie value
</Message>
</Error>

这是一个示例网址

http://test.example.com/TestContent/test.html?Expires=1431195459&Signature=DSk8HwFScg6EFJla1p8UHB9EM28zXB7k5AwrXZjzByzdlTSMCG-md6MvUFT~pneaahfPbCcvxNWqZNYu5Dc1IE1JrjOhFP52APFsVmJDlPmqoQzOoCECclEsSvMpTPgva8L4TazDLtI6E5EuV632y76ZA8XoT2KHhzcj7ux9XhvQ6wyiiQxK9rb13sZJ~Cm~4qI-028dd6UkEIu1tUIM~SFh72wYjik7v8sfz2z5T5bZGZJrrfryO0zA9wpkabFA8JkrmfuBm55XWqcVk5OSOkrNn7iyuXwmrEeBJxufaiWE84UbfS8He12fh6~-seTr7UnOCtC4mBf4qlGsxCzKiw__&Key-Pair-Id=my-test-key

我已经确认签名中没有任何无效字符('+','=','/')。

Key-Pair-Id显然存在于已签名的网址中。

我的问题:

1)使用我的IAM创建my-test-key。这是一个问题吗?

2)是否必须在签名网址中提供政策?

3)我是否需要向OAI授予对象TestContent/test.html的任何权限?

修改

如果我将Key-Pair-Id值更改为其他值,我将收到不同的错误消息

<Error>
<Code>InvalidKey</Code>
<Message>Unknown Key</Message>
</Error>

显然,aws cloudfront接受了Key-Pair-Id。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

1)不应在IAM下创建my-test-key。您需要登录root帐户并转到帐户名下的“我的安全凭证”菜单。展开“CloudFront密钥对”并创建新的密钥对。下载私钥文件。

enter image description here

2)必须在URL中包含策略,但应加密。请参阅“为使用自定义策略的签名URL创建策略声明”一节。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html

3)不,不应该授予任何公共访问权限。只需拥有一个存储桶策略,以便允许您的服务器URL请求获取或任何方法。