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

Localstack使用EndpointResolverWithOptions报AWS凭证验证失败问题

问题根因

该报错是AWS SDK for Go v2新旧版本端点解析器的默认行为差异导致的:

  • 旧版已废弃的EndpointResolverFunc处理用户返回的自定义端点时,会默认将域名标记为不可变,生成请求签名时直接使用自定义端点的域名计算签名,签名内容和LocalStack实际收到的请求域名匹配,可正常通过校验。
  • 新版EndpointResolverWithOptionsFunc返回的aws.Endpoint结构体默认HostnameImmutable字段值为false,SDK会自动将签名计算逻辑中使用的域名替换为AWS官方对应服务的默认域名,最终生成的签名携带的域名和实际请求的LocalStack域名不匹配。LocalStack收到请求后校验签名发现域名不匹配,就会返回AuthFailure凭证校验失败的报错。
    部分SDK版本中,未显式指定SigningName字段导致签名使用了错误的服务标识,也会触发同类报错。
解决方法

修改自定义端点解析逻辑返回的aws.Endpoint结构体,补全两个缺失的配置项:

  1. 将HostnameImmutable设为true,禁止SDK自动替换自定义端点域名
  2. 显式指定SigningName为对应服务的签名标识,EC2服务对应值为ec2

修改后的端点解析代码如下:

rf := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
    return aws.Endpoint{
        PartitionID:       "aws",
        URL:               l.EndpointV2(s),
        SigningRegion:     endpoints.UsEast1RegionID,
        SigningName:       "ec2",
        HostnameImmutable: true,
    }, nil
})

如果是对接其他LocalStack服务,只需将SigningName替换为对应服务的签名标识即可,例如S3服务对应s3、SQS服务对应sqs。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:42:58