Amazon S3 + CloudFront 查询特定版本的存储文件
Posted
技术标签:
【中文标题】Amazon S3 + CloudFront 查询特定版本的存储文件【英文标题】:Amazon S3 + CloudFront query for specific version of stored file 【发布时间】:2015-06-10 02:46:20 【问题描述】:我创建了一个具有版本控制功能的新 S3 存储桶,并在我的云端发行版上打开了“转发查询字符串”。
我知道您可以通过将 versionId 作为查询字符串发送来访问不同的对象版本。
这如何与云端和签名网址一起使用?
如果我想返回一个特定版本的文件,我是否必须使用附加的查询字符串对 url 进行签名,例如:
http://example.cloudfront.net/files/file.pdf?verisonId=[id]
好吧,我尝试将 url 与 versionId 一起签名 - 它不起作用。 仅对 url 进行签名,然后在稍后附加 versionId 会给出拒绝访问响应。
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>89F25EB47DDA64D5</RequestId>
<HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId>
</Error>
任何帮助将不胜感激。
【问题讨论】:
“它不起作用” ...你能说得更具体些吗? 【参考方案1】:您需要设置正确的 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."
]
【讨论】:
这是正确答案,但是我继续收到拒绝访问,直到我使 CloudFront 缓存无效。以上是关于Amazon S3 + CloudFront 查询特定版本的存储文件的主要内容,如果未能解决你的问题,请参考以下文章
Amazon S3 是不是向 CloudFront 发送失效信号?