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

使用Lambda上传文件至AWS S3时遭遇Access Denied(403)权限错误

Lambda上传AWS S3报403 Access Denied问题排查

我在通过Lambda函数上传文件到AWS S3时,持续遇到"access denied"(403)权限拒绝错误。该Lambda函数已配置读写目标存储桶的权限策略,但将应用镜像部署到另一个完全不同的环境后,上传流程可正常运行。

Lambda权限策略

{
    "Version": "2012-10-17",
    // ...
    {
        "Action": [
            "s3:Abort*",
            "s3:DeleteObject*",
            "s3:GetBucket*",
            "s3:GetObject*",
            "s3:List*",
            "s3:PutObject",
            "s3:PutObjectLegalHold",
            "s3:PutObjectRetention",
            "s3:PutObjectTagging",
            "s3:PutObjectVersionTagging"
        ],
        "Resource": [
            "arn:aws:s3:::celta-ui-data",
            "arn:aws:s3:::celta-ui-data/*"
        ],
        "Effect": "Allow"
    }
]
}

日志错误内容

{
    "errorType": "AccessDenied",
    "errorMessage": "Access Denied",
    "name": "AccessDenied",
    "$fault": "client",
    "$metadata": {
        "httpStatusCode": 403,
        "requestId": "S0D2PKHKJFKPQWPS",
        "extendedRequestId": "+CdFU95c5bkdfh0U99ujUNpewoZ1CA/xPtsctvDagwFQGEw0QLrq9wlbSwqy4e6fLw7K1OCvKG4=",
        "attempts": 1,
        "totalRetryDelay": 0
    },
    "Code": "AccessDenied",
    "RequestId": "S0D2PKHKJFKPQWPS",
    "HostId": "+CdFU95c5bkdfh0U99ujUNpewoZ1CA/xPtsctvDagwFQGEw0QLrq9wlbSwqy4e6fLw7K1OCvKG4=",
    "message": "Access Denied",
    "stack": [
        "AccessDenied: Access Denied",
        "    at throwDefaultError (/var/runtime/node_modules/@aws-sdk/node_modules/@smithy/smithy-client/dist-cjs/index.js:840:20)",
        "    at /var/runtime/node_modules/@aws-sdk/node_modules/@smithy/smithy-client/dist-cjs/index.js:849:5",
        "    at de_CommandError (/var/runtime/node_modules/@aws-sdk/client-s3/dist-cjs/index.js:4749:14)",
        "    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)",
        "    at async /var/runtime/node_modules/@aws-sdk/node_modules/@smithy/middleware-serde/dist-cjs/index.js:35:20",
        "    at async /var/runtime/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js:482:18",
        "    at async /var/runtime/node_modules/@aws-sdk/node_modules/@smithy/middleware-retry/dist-cjs/index.js:320:38",
        "    at async /var/runtime/node_modules/@aws-sdk/middleware-flexible-checksums/dist-cjs/index.js:174:18",
        "    at async /var/runtime/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js:110:22",
        "    at async /var/runtime/node_modules/@aws-sdk/middleware-sdk-s3/dist-cjs/index.js:138:14"
    ]
}

已尝试的操作

  • 给S3存储桶添加允许Lambda执行S3命令的策略,无效果
  • 添加s3:PutObjectAcl权限,问题未解决
  • 不允许将存储桶设为公开访问

排查建议

  1. 检查S3桶策略的拒绝规则:S3桶策略中Deny规则优先级高于IAM允许权限,哪怕Lambda角色有允许权限,只要桶策略存在匹配的Deny条目就会触发拒绝。仔细核对桶策略是否有针对Lambda角色、特定IP或请求条件的拒绝配置。
  2. 验证Lambda执行角色的信任关系:确认Lambda执行角色的信任策略是否允许lambda.amazonaws.com服务扮演该角色,避免因信任关系配置错误导致无法获取有效访问凭证。
  3. 检查S3桶加密配置:如果目标桶开启了SSE-KMS加密,Lambda权限策略还需添加kms:GenerateDataKey和kms:Decrypt权限(对应KMS密钥的ARN),否则上传加密桶会触发403错误。
  4. 确认代码中的目标路径:检查Lambda代码里指定的S3对象键(文件路径)是否正确,桶名是否准确为celta-ui-data,避免因路径拼写错误导致访问错误资源。
  5. 排查VPC端点配置(若Lambda在VPC内):如果Lambda部署在VPC中,需确认已配置S3的VPC端点,且端点策略允许该Lambda角色访问S3,同时路由表正确指向端点,否则会因网络问题导致权限校验失败。
  6. 检查临时凭证有效性:可在Lambda日志中打印STS获取的临时凭证信息(注意脱敏),确认凭证的权限范围是否包含所需的S3操作。
  7. 核对对象锁/版本控制限制:若桶开启了对象锁或版本控制,确认Lambda权限中的s3:PutObjectRetention等权限配置正确,且代码未设置违反桶规则的保留参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:08:10