2015-04-05 156 views
2

我创建了一个新的S3存储桶,并启用了版本控制功能,并在我的cloudfront发行版上打开了“转发查询字符串”。Amazon S3 +针对特定版本存储文件的CloudFront查询

我知道你可以通过发送versionId作为查询字符串来访问不同的对象版本。

这是如何与云端和签名的URL一起工作的?

如果我想返回一个文件的特定版本,我必须签署附加,如查询字符串的URL:

http://example.cloudfront.net/files/file.pdf?verisonId=[id]

好吧,我试着连同签署网址versionId - 它不起作用。 仅对网址签名,然后在版本ID后面添加访问被拒绝的响应。

<Error> 
<Code>AccessDenied</Code> 
<Message>Access Denied</Message> 
<RequestId>89F25EB47DDA64D5</RequestId> 
<HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId> 
</Error> 

任何帮助将不胜感激。

+0

*“它不工作” * ...你能更具体? – 2015-04-05 20:05:41

回答

6

您需要设置适当的ACL以允许您的CloudFront规范ID访问版本化对象,或者您需要设置bucket policy that allows the action "s3:GetObjectVersion"。您可能只有GetObject,它允许您通过CloudFront检索普通对象,但不是?versionId = <>对象。

添加类似于桶政策:

{ 
    "Version":"2012-10-17", 
    "Id": "PolicyForCloudFrontPrivateContent", 
    "Statement": [{ 
      "Action": ["s3:GetObject", "s3:GetObjectVersion" ], 
      "Effect": "Allow", 
      "Principal":{"CanonicalUser":"<CLOUDFRONT CANONICAL ID>"}, 
      "Resource": "<BUCKET RESOURCE IDENTIFIER>", 
      "Sid": "Grant a CloudFront Origin Identity access to support private content and versioned content." 
    }] 
} 
相关问题