You need to enable JavaScript to run this app. AWS Lambda调用S3 GetObject出现AccessDenied错误如何排查?
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda调用S3 GetObject出现AccessDenied错误如何排查?

核心问题根因

你使用的Serverless Framework配置文件中的IAM权限配置存在错误,优先级高于你单独配置的IAM角色权限,导致最终生效的权限不符合要求:
s3:GetObject、s3:PutObject属于S3对象级操作,仅配置存储桶本身的ARN(arn:aws:s3:::my_bucket)无法覆盖桶内的具体对象,需要补充对象通配符路径arn:aws:s3:::my_bucket/*作为权限作用资源。

修复步骤

  1. 修正yml配置中的IAM语句Resource字段,修改后配置如下:
provider:
  name: aws
  runtime: python3.8
  lambdaHashingVersion: 20201221
  iam:
    role:
      statements:
        - Effect: 'Allow'
          Action:
            - 's3:GetObject'
            - 's3:PutObject'
          Resource: 
            - "arn:aws:s3:::my_bucket"
            - "arn:aws:s3:::my_bucket/*"
  1. 重新部署Serverless服务,确认新的IAM权限已经同步到Lambda执行角色中。

仍未解决时的额外排查项

  • 检查S3存储桶的桶策略,如果存在针对Lambda执行角色的Deny语句,会直接覆盖IAM角色的Allow权限,需要删除对应Deny配置。
  • 如果存储桶启用了KMS默认加密,需要给Lambda执行角色额外添加kms:Decrypt权限,作用资源为对应KMS密钥的ARN。
  • 排查对象不存在的场景:S3默认会对无ListBucket权限的请求返回AccessDenied而非404,避免泄露对象存在性。你可以给Lambda角色添加s3:ListBucket权限(Resource配置为桶本身ARNarn:aws:s3:::my_bucket),确认报错是否变为404,再排查Key参数是否正确。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:39:02