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

Lambda调用PutObjectCommand报错‘Resolved credential object is not valid’排查

问题分析与解决方案

问题根源

部署到Lambda后触发Resolved credential object is not valid错误,核心原因是代码中凭证配置逻辑存在漏洞:

  • 原代码仅判断process.env.DEVELOPMENT_MODE是否存在,而非明确的真值(比如'true')。如果Lambda环境中该变量被意外设置为空字符串、'false'等非真值但存在的值,会进入凭证配置分支。
  • Lambda环境中不存在AWS_ACCESS_KEY和AWS_SECRET_KEY变量,导致accessKeyId和secretAccessKey被设为undefined,形成无效凭证。

解决方案

1. 修正凭证配置逻辑

将环境变量判断改为严格匹配'true',确保只有本地开发模式才手动配置凭证:

const configuration: S3ClientConfig = {
  region: 'us-west-2',
};

// 仅当DEVELOPMENT_MODE明确为'true'时,才加载本地凭证
if (process.env.DEVELOPMENT_MODE === 'true') {
  configuration.credentials = {
    accessKeyId: process.env.AWS_ACCESS_KEY!,
    secretAccessKey: process.env.AWS_SECRET_KEY!,
  };
}

export const s3 = new S3Client(configuration);

2. 清理Lambda环境变量

确保Lambda的环境变量中未设置DEVELOPMENT_MODE,或设置为'false'等非'true'值,让SDK自动使用Lambda的IAM角色凭证。

3. 验证Lambda角色权限

确认策略中的BUCKET_NAME已替换为实际存储桶名称,否则权限策略不生效:

{
    "Action": [
        "s3:DeleteObject",
        "s3:PutObject"
    ],
    "Resource": [
        "arn:aws:s3:::你的实际桶名/*"
    ],
    "Effect": "Allow"
}

补充说明

AWS SDK v3在Lambda环境中会自动通过Lambda的凭证提供者获取临时IAM角色凭证,无需手动配置credentials。只要Lambda角色拥有对应S3操作权限,SDK就能正常完成请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:01:23