You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS S3带public=yes标签的版本化对象历史版本无法公开访问咨询

问题解答

这是配置遗漏导致的问题,不属于S3的预期行为,调整桶策略即可解决。

核心原因

S3针对对象的不同版本,对应了两个不同的权限控制动作:

  • 读取对象最新版本需要的权限是 s3:GetObject,也就是你当前策略里已经配置的项
  • 读取对象的历史非最新版本需要额外配置 s3:GetObjectVersion权限

你已经给所有对象版本都打上了public=yes的标签,标签规则是生效的,只是没有给公开用户开放历史版本的读取权限,所以才会出现只有最新版本能访问的情况。

修正后的桶策略

把策略里的Action字段修改为数组,同时包含两个权限动作即可,其余配置不需要改动:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": ["s3:GetObject", "s3:GetObjectVersion"],
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/public": "yes"
                }
            }
        }
    ]
}

额外注意事项

  • 桶策略修改后最多会有2分钟左右的生效延迟,修改后可以稍等再测试
  • 访问历史版本时需要在请求里携带对应版本的versionId参数,否则S3默认会返回对象的最新版本

内容的提问来源于stack exchange,提问作者rosysnake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:06:07