AWS S3 Bucket删除对象失败,报403 Access Denied错误
针对删除S3对象时返回403 (Forbidden)、抛出Uncaught (in promise) AccessDenied: Access Denied异常的情况,结合你的Bucket策略及其他操作正常的现象,可按以下方向排查解决:
1. 检查Bucket的Block Public Access设置
若Bucket开启了Block all public access或其中的Block public access to buckets and objects granted through any access control lists (ACLs)/Block public access to buckets and objects granted through new public bucket policies选项,会直接覆盖当前Bucket策略,阻止公共访问操作。
- 进入S3控制台,找到目标Bucket,切换到「权限」标签页
- 查看「Block public access」设置,按需调整限制选项
2. 补充Bucket级别的Resource权限
你的Bucket策略仅指定了对象级资源arn:aws:s3:::MY_BUCKET_NAME/*,部分删除场景(如批量删除前的s3:ListBucket权限校验)需要Bucket级别的权限支持。修改策略如下:
{ "Version": "2012-10-17", "Id": "Policy1643194772258", "Statement": [ { "Sid": "Stmt1628194965425", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::MY_BUCKET_NAME", "arn:aws:s3:::MY_BUCKET_NAME/*" ] } ] }
3. 验证CORS配置(前端直接调用场景)
如果是通过浏览器前端直接调用S3 API删除对象,需确保Bucket的CORS配置允许DELETE方法:
- 在Bucket「权限」标签页找到「Cross-origin resource sharing (CORS)」
- 确认配置包含
DELETE方法,示例如下:
<CORSConfiguration> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration>
4. 检查Bucket版本化状态
若Bucket开启了版本化,默认删除操作仅会添加删除标记;若需彻底删除对象版本,需确认无额外权限限制(你的策略中s3:*已包含s3:DeleteObjectVersion权限,但需排查是否有其他规则冲突)。
5. 排查IAM权限冲突
如果使用IAM用户/角色访问S3,除Bucket策略外,需检查IAM策略是否存在Deny语句限制删除操作——IAM的Deny规则会优先于Bucket策略的Allow规则生效。
内容的提问来源于stack exchange,提问作者Jade

