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

AWS S3桶已配置公共访问策略,但部分对象仍无法公开访问

S3桶公共策略生效但部分文件访问被拒绝的问题排查与解决

问题概述

现有AWS S3桶cancon已配置公开读取的桶策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::cancon/*"
    }
  ]
}

桶内多数旧文件可正常公开访问,但新上传的文件(如static/img/star_half.svg)访问时返回AccessDenied错误:

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>EJ8K3ZG143FAHD3X</RequestId>
<HostId>QLVfJC56e0elbw7HbLMZ7J8zrfg1H/CxhP2Qtz/prV5TozEjavkb4ciXZxV8F2oRBENti9V72Q8=</HostId>
</Error>
> 注:旧文件使用区域Endpoint(如`s3.eu-central-1.amazonaws.com`)可正常访问,新文件使用全局Endpoint(`s3.amazonaws.com`)报错;且控制台新上传文件默认无法访问。

## 可能原因及解决方法

### 1. 公共访问阻止(Public Access Block)未完全关闭
S3的公共访问阻止设置若开启特定选项,会直接覆盖桶策略的公共访问授权,即使策略配置正确也无法生效。

**解决步骤**:
- 登录AWS S3控制台,进入`cancon`桶的「权限」标签页
- 找到「公共访问设置」模块,点击「编辑」
- 取消勾选以下全部四个选项,保存更改:
  - Block public access to buckets and objects granted through any access control lists (ACLs)
  - Block public access to buckets and objects granted through new access control lists (ACLs)
  - Block public access to buckets and objects granted through bucket policies
  - Block public and cross-account access to buckets and objects if bucket policies allow public access

### 2. 对象ACL为私有且未适配桶策略
S3控制台默认上传文件的ACL为「私有」,若对象所有者与桶所有者不一致(如跨账号上传),私有ACL会限制公共访问,桶策略可能无法直接覆盖。

**解决步骤**:
#### 单文件修复:
- 在S3控制台找到无法访问的对象,进入「权限」标签页
- 编辑「访问控制列表(ACL)」,添加规则:授予「所有人(Everyone)」「读取」权限,保存更改

#### 批量修复(使用AWS CLI):
```bash
# 批量修改指定前缀下的所有对象ACL为公共读取
aws s3 cp s3://cancon/static/img/ s3://cancon/static/img/ --recursive --acl public-read --metadata-directive REPLACE

3. 上传时未配置公共ACL

新文件上传时若未明确设置公共读取ACL,即使桶策略允许,也可能因默认私有ACL导致访问异常(尤其受公共访问阻止设置影响时)。

解决步骤:

  • 控制台上传文件时,在「设置」-「权限」中,将「ACL」设置为「授予公共读取访问权限」
  • 若使用脚本/SDK上传,需在上传参数中指定ACL='public-read'

4. Endpoint区域不匹配

旧文件使用区域特定Endpoint(如eu-central-1)可访问,新文件使用全局Endpoint(s3.amazonaws.com)报错,说明桶实际位于eu-central-1区域,全局Endpoint会因区域不匹配触发权限拦截。

解决步骤:

  • 查看桶的实际区域:进入桶的「属性」标签页,查看「区域」字段
  • 统一使用区域特定Endpoint访问文件,例如:https://cancon.s3.eu-central-1.amazonaws.com/static/img/star_half.svg
  • 配置Web应用时,将静态资源地址替换为对应区域的S3 Endpoint

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:33:14