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

使用AWS Lambda上传图片至S3时遇Access Denied错误求助

解决AWS Lambda部署后S3上传Access Denied问题

我之前踩过完全一样的坑!本地用serverless invoke local function --function khanh测试正常,一部署到Lambda就报S3权限错误,核心原因是本地测试和Lambda运行时用的是不同的AWS凭证体系,给你几个最有效的排查和解决步骤:

1. 检查Lambda执行角色的S3权限

本地测试时,你的代码用的是本地环境的AWS凭证(比如~/.aws/credentials里的密钥),而Lambda运行时用的是它的执行IAM角色。这个角色必须拥有对目标S3桶的写入权限:

  • 打开AWS IAM控制台,找到这个Lambda函数对应的执行角色
  • 确认角色的权限策略里包含s3:PutObject(如果是上传操作),并且资源范围正确指向你的S3桶,比如:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

2. 确保Serverless框架配置了正确的权限

如果你用Serverless.yml管理部署,一定要在函数配置里添加iamRoleStatements,不然部署时不会自动给Lambda角色加上S3权限。示例配置:

functions:
  khanh:
    handler: handler.yourHandler
    iamRoleStatements:
      - Effect: Allow
        Action:
          - s3:PutObject
        Resource: "arn:aws:s3:::your-bucket-name/*"

修改后重新执行serverless deploy,让框架更新Lambda的角色权限。

3. 排查S3桶的Bucket Policy

有时候S3桶本身的策略会拒绝外部角色的访问,检查桶的Bucket Policy:

  • 打开S3控制台,找到目标桶的「权限」标签
  • 确认没有拒绝Lambda执行角色ARN的语句,必要时添加允许规则:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::your-account-id:role/your-lambda-execution-role"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

4. 验证桶名和区域配置是否一致

本地测试时可能用了正确的桶名和区域,但部署后Lambda的环境变量或代码里的配置可能出错,比如区域不匹配导致请求到错误的S3端点,也会触发权限类错误。确保代码里的S3客户端配置了正确的区域:

const s3 = new AWS.S3({ region: 'us-east-1' }); // 替换为你的桶所在区域

先从Lambda执行角色的权限开始排查,这是最常见的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:01:41