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

Node.js使用aws-sdk可上传S3但删除报AccessDenied如何修复?

问题现象

Node.js环境下使用aws-sdk操作S3存储桶时,文件上传功能正常,但对象删除操作抛出403 AccessDenied错误,该删除功能5分钟前可正常运行。当前使用的IAM用户已配置S3全量访问权限。
错误核心日志:

err AccessDenied: Access Denied
  code: 'AccessDenied',
  region: null,
  statusCode: 403,
  retryable: false
排查方向与修复方案

按故障触发概率从高到低排序:

  • 凭证身份与上层权限拦截排查
    日志中region: null说明SDK客户端配置加载存在异常,首先不要直接信任控制台看到的IAM用户权限,先在代码中调用sts.getCallerIdentity()打印当前SDK实际使用的身份ARN、账号信息,确认代码没有通过环境变量、本地凭证文件、实例角色等默认凭证链加载到其他无权限的身份。
    确认身份一致后,排查上层权限拦截:
    1. 如果使用临时凭证(AssumeRole、实例角色、Lambda角色等),检查会话策略、角色权限边界是否存在s3:DeleteObject的显式拒绝
    2. 如果账号属于AWS组织,检查最近5分钟是否有新的SCP(服务控制策略)下发,拦截了S3删除操作
    3. 点进IAM用户绑定的所谓“S3全量访问”策略查看JSON内容,确认不存在NotAction: s3:DeleteObject、资源范围只配置桶ARN未配置桶ARN/*这类配置错误
  • S3桶侧配置变更排查(突发故障最高概率原因)
    由于故障是无代码改动下突发的,优先检查最近5分钟桶侧的配置改动:
    1. 检查桶策略:是否新增了针对当前身份、当前请求来源IP/VPC的s3:DeleteObject显式Deny规则,S3权限判定中显式Deny优先级高于所有允许规则,哪怕IAM给了全权限也会被拦截
    2. 检查MFA Delete配置:是否刚开启了MFA Delete,开启后所有永久删除版本化对象的操作必须携带有效MFA验证码,上传操作不受影响,完全匹配“能上传不能删”的现象
    3. 检查Object Lock配置:是否刚开启了桶级Object Lock默认保留期,或目标对象被加了Legal Hold(合法保留),合规模式下的保留对象任何身份都无法在保留期内删除,治理模式下需要带绕过保留参数才能删除
    4. 如果通过访问点(Access Point)访问桶,检查访问点策略是否拦截了删除操作
  • 请求参数与SDK配置排查
    1. 初始化S3客户端时明确指定桶所在的正确区域,不要留空,避免跨区重定向导致签名校验失败,示例初始化代码:
      const s3 = new AWS.S3({ region: '替换为桶实际所在区域,如ap-northeast-1' })
      
    2. 如果桶开启了版本控制,检查删除请求是否正确传入VersionId参数,若需要绕过治理模式Object Lock,额外传入BypassGovernanceRetention: true
    3. 检查待删除对象的Key是否存在URL编码错误、多余斜杠等参数问题
  • 对象所有权与加密排查
    1. 如果待删除对象是其他AWS账号上传,且上传时未授予桶所有者完整权限,桶所有者默认无法直接删除,需要由上传账号授予权限,或使用上传账号身份删除
    2. 如果对象使用客户管理KMS密钥加密,确认当前身份有密钥的使用权限,避免密钥策略拦截关联操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:45:50