我正在尝试使用signed url通过AWS cloudfront将S3存储桶作为私有内容提供服务 .
但是我一直收到此错误'缺少密钥对Id查询参数或cookie值'
<Error>
<Code>MissingKey</Code>
<Message>
Missing Key-Pair-Id query parameter or cookie value
</Message>
</Error>
这是一个示例网址
我已经确认签名中没有任何无效字符('','=','/') .
Key-Pair-Id
明显存在于已签名的网址中 .
我的问题:
1) my-test-key
是使用我的IAM创建的 . 这是个问题吗?
2)是否必须在签名网址中提供政策?
3)我是否需要向oAI授予对象 TestContent/test.html
的任何权限?
Edit
如果我将Key-Pair-Id值更改为其他值,我将收到不同的错误消息
<Error>
<Code>InvalidKey</Code>
<Message>Unknown Key</Message>
</Error>
显然,密钥对Id被aws cloudfront接受 .
2 回答
您必须使用CloudFront特定密钥对 . 有关如何下载或上传自己的公钥的更多信息:
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 . 您需要登录root帐户并转到帐户名下的“我的安全凭据”菜单 . 展开“CloudFront密钥对”并创建新的密钥对 . 下载私钥文件 .
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)不,不应该授予任何公共访问权限 . 只需拥有一个存储桶策略,以便允许您的服务器URL请求获取或任何方法 .