我正在尝试使用签名的 url 通过 AWS cloudfront 将 S3 存储桶作为私有(private)内容提供服务。
但是我不断收到此错误“缺少 key 对 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)
my-test-key
是使用我的 IAM 创建的。这是个问题吗?
2) 是否必须在签名的网址中提供政策?
3) 我需要授予对象
TestContent/test.html
的任何权限吗?到 OAI?
编辑
如果我将 Key-Pair-Id 值更改为其他值,我将收到不同的错误消息
<Error>
<Code>InvalidKey</Code>
<Message>Unknown Key</Message>
</Error>
所以显然 Key-Pair-Id 被 aws cloudfront 接受。
请您参考如下方法:
您必须使用 CloudFront 特定的 key 对。有关如何下载或上传您自己的公钥的更多信息:
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