2015-04-05 96 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." 
    }] 
}