amazon-web-services - AWS S3 : Why Public object d

我已经上传了对象并在我的存储桶下将其标记为公开。当我点击 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/

相关文章:

haskell - 如何为自定义数据类型定义 (+) 函数?

python - 打印 RGB 背景

rust - Substrate - 在此范围内找不到类型 `Vec`

c++ - glm::rotate() 改变旋转轴,但为什么呢?

c++ - 为什么编译器允许用户更改 'auto' 变量的类型?

() takes ">python - 为什么在我给出位置参数时 lambda 返回 "() takes

c++ - 当变量不是局部变量时我应该继续返回吗

git - 我无法在 aws sagemaker notebook 实例上安装 "git-lfs"

rust - @ operator bindings over extra conditionals

r - 在 R 中查找汇总列的相对频率