我已经上传了对象并在我的存储桶下将其标记为公开。当我点击 Object URL
时,我可以在浏览器上看到它(可公开访问)。
然后我在 s3 存储桶级别启用了版本控制,然后我更改了对象中的内容并将其再次上传到同一个存储桶。版本控制效果很好,我可以看到同一对象的两个不同版本。但是,公共(public)访问没有。当我点击新的 Object's URL
时,它显示access denied。
此行为背后有任何具体原因,或者这是 S3 的已知问题,或者我正在做一些不符合标准做法的事情?
最佳答案
如果您启用了版本控制并且想要查看存储桶中文件的特定版本,则必须在存储桶策略中添加 GetObjectVersion
的权限。存储桶策略应如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
如果公共(public) URL 包含 versionId
查询参数,此策略将允许打开您存储桶中的文件:
https://my-bucket-123456789.s3.amazonaws.com/file3.json?versionId=RXbjBh8SzW9RpEsxX.xzkYb1RTK4pjwF
如果您的公共(public) URL 中没有 versionId
,它应该可以工作,即使您没有向策略添加 GetObjectVersion
权限。在这种情况下,它将打开最新版本。
请注意,此答案假定存储桶未启用访问控制列表 (ACL),并期望每个对象的所有权设置为 Bucket owner enforced
。
关于amazon-web-services - AWS S3 : Why Public object doesn't work with versioning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70468569/