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

S3上传在sls offline正常,部署到AWS后出现Access Denied错误

问题原因分析

你的Lambda执行角色缺少对S3桶内对象的操作权限。在serverless.yml的IAM角色声明中,S3资源仅指定了桶本身(arn:aws:s3:::${self:custom.imagesBucketName}),但s3.putObject操作需要的是桶内对象层级的权限,当前配置无法覆盖这个操作。

解决方案

修改serverless.yml中provider.iam.role.statements里的S3资源配置,添加/*后缀,让权限覆盖桶内所有对象:

provider:
  iam:
    role:
      statements:
      - Effect: Allow
        Action:
        - "s3:*"
        Resource: 
          - "arn:aws:s3:::${self:custom.imagesBucketName}"
          - "arn:aws:s3:::${self:custom.imagesBucketName}/*" # 新增该行,覆盖桶内对象权限
额外验证点
  • 确认Lambda环境变量BUCKET_NAME正确指向目标桶:可在AWS控制台的Lambda函数配置中查看环境变量值是否与实际桶名一致。
  • 检查S3桶的公共访问设置:当前桶已关闭所有公共访问阻止规则,这部分配置无问题,但需确保没有其他桶策略或IAM策略冲突。
  • 本地测试正常的原因:sls offline通常使用本地AWS凭证(如~/.aws/credentials),该凭证可能拥有更宽泛的S3权限,因此不会触发权限错误;而线上Lambda使用专属IAM角色,权限限制更严格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:40