为什么 'Missing Key-Pair-Id query parameter or cookie value'

Why 'Missing Key-Pair-Id query parameter or cookie value'

我正在尝试使用已签名的 url 通过 AWS 云端将 S3 存储桶作为私有内容提供。

但是我一直收到这个错误'Missing Key-Pair-Id query parameter or cookie value'

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

这是一个例子url

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 显然存在于已签名的 url 中。

我的问题:

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

2) 是否必须在已签名的 url 中提供政策?

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

编辑

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

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

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

您必须使用 CloudFront 特定的密钥对。有关如何下载或上传您自己的 public 密钥的更多信息:

http://docs.aws.amazon.com/AWSSecurityCredentials/1.0/AboutAWSCredentials.html#KeyPairs

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html#private-content-creating-cloudfront-key-pairs

1) 不应在 IAM 下创建 my-test-key。您需要登录到根帐户并转到您帐户名下的 "My Security Credentials" 菜单。展开 "CloudFront Key Pairs" 并创建新的。下载私钥文件。

2) 在url中包含一个策略是必须的,但它应该是加密的。请参阅 "Creating a Policy Statement for a Signed URL That Uses a Custom Policy" 部分。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html

3) 不,不应授予任何 public 访问权限。只需要一个存储桶策略,这样您的服务器 url 就可以请求 get 或任何方法。