我正在尝试使用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>
这是一个示例网址
我已经确认签名中没有任何无效字符('+','=','/')。
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。
答案 0 :(得分:2)
您必须使用CloudFront特定密钥对。有关如何下载或上传自己的公钥的更多信息:
http://docs.aws.amazon.com/AWSSecurityCredentials/1.0/AboutAWSCredentials.html#KeyPairs
答案 1 :(得分:2)
1)不应在IAM下创建my-test-key。您需要登录root帐户并转到帐户名下的“我的安全凭证”菜单。展开“CloudFront密钥对”并创建新的密钥对。下载私钥文件。
2)必须在URL中包含策略,但应加密。请参阅“为使用自定义策略的签名URL创建策略声明”一节。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html
3)不,不应该授予任何公共访问权限。只需拥有一个存储桶策略,以便允许您的服务器URL请求获取或任何方法。