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

通过Lambda生成S3预签名URL时遇CredentialsProviderError问题排查

问题解决:Lambda生成S3预签名URL时的CredentialsProviderError

问题根源

你代码里用了fromIni()加载凭证,这是从本地~/.aws/credentials文件读取凭证的方式。但Lambda运行环境没有这个文件,它是通过IAM执行角色自动获取临时凭证的,指定fromIni()会导致找不到凭证,抛出错误。

修复步骤

删掉S3RequestPresigner配置里的credentials: fromIni()这一行,让AWS SDK自动使用Lambda的默认凭证提供者即可。

修改后的代码:

const createPresignedUrlWithoutClient = async (key) => {
  const url = parseUrl(`https://${BUCKET_NAME}.s3.${LOCATION}.amazonaws.com/${key}`);
  const presigner = new S3RequestPresigner({
      region: LOCATION,
      sha256: Hash.bind(null, "sha256"),
  });

  const signedUrlObject = await presigner.presign(
      new HttpRequest({ ...url, method: "PUT" }),
  );
  return formatUrl(signedUrlObject);
};

额外确认

  1. 确保Lambda的IAM执行角色包含s3:PutObject权限(对应你生成PUT类型预签名URL的需求),权限策略示例:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::你的存储桶名称/*"
        }
    ]
}
  1. 确认Lambda执行角色的信任关系配置正确,允许lambda.amazonaws.com扮演该角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:22:46