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

Lambda连接DynamoDB时出现请求签名不匹配错误排查

DynamoDB签名不匹配问题排查方案

核心问题定位

本地通过SharedIniFileCredentials可正常访问DynamoDB,但Lambda中硬编码accessKeyId和secretAccessKey时出现The request signature we calculated does not match the signature you provided错误,以下是具体排查与解决步骤:

1. 废弃Lambda硬编码凭证的做法

Lambda运行环境会自动关联执行角色权限,无需手动配置密钥。硬编码密钥极易引发以下问题:

  • 密钥中的特殊字符(如斜杠)未正确处理,导致签名计算错误
  • 密钥过期或权限变更未同步
  • 违反AWS安全最佳实践,存在密钥泄露风险

修改后的代码无需手动配置凭证:

const { DynamoDBClient, ScanCommand } = require("@aws-sdk/client-dynamodb");

// 仅需指定区域,Lambda会自动获取执行角色凭证
const client = new DynamoDBClient({ region: "us-east-1" });

const queryTokens = async () => {
  try {
    const params = {
      TableName: "brc-20",
    };

    const command = new ScanCommand(params);
    const response = await client.send(command);

    return response.Items;
  } catch (error) {
    console.log(error.message, 'for queryTokens');
  }
};

2. 检查Lambda执行角色权限

确保Lambda的执行角色已配置DynamoDB访问权限:

  • 添加dynamodb:Scan权限(对应代码中的ScanCommand操作)
  • 权限资源范围需包含目标表:arn:aws:dynamodb:us-east-1::table/brc-20

3. 验证凭证一致性(若坚持硬编码)

如果必须使用硬编码密钥,执行以下验证:

  • 本地通过命令获取myProfile的密钥:
    aws configure get aws_access_key_id --profile myProfile
    aws configure get aws_secret_access_key --profile myProfile
    
  • 对比Lambda中硬编码的密钥,确保无字符遗漏、拼写错误或转义问题(如secretAccessKey中的斜杠无需额外转义)

4. 确认区域匹配

检查DynamoDB表的实际区域是否为us-east-1,跨区域请求会导致签名计算规则不匹配,引发错误。

5. 核对SDK版本

代码中使用了ScanCommand(AWS SDK v3的API),需确保Lambda部署包中安装的是@aws-sdk/client-dynamodb包,而非v2版本的aws-sdk,版本不兼容会导致签名逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:05:09