You need to enable JavaScript to run this app. 使用AWS SDK 2.x的SES查询、核验邮箱时遭遇请求签名不匹配报错
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS SDK 2.x的SES查询、核验邮箱时遭遇请求签名不匹配报错

报错原文:The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

核心报错成因
  • 凭证有效性异常:传入的Access Key ID或Secret Access Key存在多余空格、不可见字符,或对应密钥已被IAM控制台禁用、删除,是签名不匹配的最常见诱因。
  • 区域配置错配:SES服务的API端点和权限是严格按区域隔离的,若传入的region参数与实际开通SES、绑定密钥权限的区域不一致,会导致签名计算时的端点信息和AWS服务端校验逻辑不匹配。
  • 本地时间偏差:AWS V4签名算法依赖请求发起的本地时间,若运行代码的服务器/本地设备系统时间与标准UTC时间偏差超过15分钟,会直接触发签名校验失败。
  • 密钥解码异常:如果密钥是从配置文件、环境变量读取时未指定正确编码,会导致Secret Access Key出现乱码,计算出的签名自然和服务端不一致。
对应解决步骤
  • 对传入的AK、SK、region参数做前后空格裁剪,排查是否存在多余的换行、制表符等不可见字符;随后到IAM控制台核对对应密钥的状态,确认是激活状态、关联了SES服务的调用权限。
  • 核对SES服务的实际开通区域,替换为匹配的region参数,不要跨区混用凭证。
  • 对运行环境做网络时间同步,消除系统时间偏差。
  • 从配置源读取密钥时指定UTF-8编码,避免出现解码乱码。
优化后的客户端构建代码
public static SesClient getClientObject(String accessKeyId, String secretAccessKey, String region) {
    String cleanAk = accessKeyId.trim();
    String cleanSk = secretAccessKey.trim();
    String cleanRegion = region.trim();
    AwsBasicCredentials credential = AwsBasicCredentials.create(cleanAk, cleanSk);
    StaticCredentialsProvider credentialProvider = StaticCredentialsProvider.create(credential);
    return SesClient.builder()
            .credentialsProvider(credentialProvider)
            .region(Region.of(cleanRegion))
            .build();
}

额外提示:当前代码中使用的listVerifiedEmailAddresses、verifyEmailAddress属于SES旧版API,后续可逐步迁移到SES V2版本的listEmailIdentities、sendVerificationEmail接口,获得更完善的功能支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 07:15:06