无需SDK调用AWS Bedrock API时签名不匹配问题排查
AWS Bedrock API签名不匹配问题排查(针对makeRequest方法)
常见签名错误点
- 请求时间戳问题:AWS签名要求使用UTC时间,格式必须是
YYYYMMDD'T'HHMMSS'Z',若本地时间偏移或格式不符,会直接导致签名校验失败。需确保makeRequest生成的时间戳完全符合规范,且请求发送时间与时间戳差值不超过15分钟。 - Canonical Request构建错误:
- HTTP方法必须大写(如
POST不能写成post) - Canonical URI需精准匹配Bedrock接口路径,比如
/model/anthropic.claude-v2/invoke,不能多/少斜杠 - 无查询参数时,Canonical Query String必须为空字符串,不可省略
- Headers部分必须包含
host、x-amz-date,若有content-type也需纳入,且所有头字段需转小写后排序拼接 - Signed Headers需与Canonical Headers中的字段完全一致,按逗号分隔排序
- Hashed Payload必须是请求体的SHA-256哈希值,空请求体需固定使用
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- HTTP方法必须大写(如
- String to Sign构建错误:
- 格式必须为
AWS4-HMAC-SHA256\n{timestamp}\n{date}/{region}/bedrock/aws4_request\n{hashed_canonical_request},注意服务名bedrock不可写错 - Date部分是时间戳的前8位(YYYYMMDD),需与timestamp严格对应
- 格式必须为
- 签名密钥生成错误:
- 生成步骤必须严格遵循:
kSecret = "AWS4" + secretAccessKey→kDate = HMAC-SHA256(kSecret, date)→kRegion = HMAC-SHA256(kDate, region)→kService = HMAC-SHA256(kRegion, "bedrock")→kSigning = HMAC-SHA256(kService, "aws4_request"),每一步的参数都不能出错
- 生成步骤必须严格遵循:
- Authorization头格式错误:
- 格式需为
AWS4-HMAC-SHA256 Credential={accessKeyId}/{date}/{region}/bedrock/aws4_request, SignedHeaders={signedHeaders}, Signature={signature},注意各部分分隔符,Credential路径、SignedHeaders需与之前的构建内容完全一致
- 格式需为
- 请求体处理问题:POST请求需保证发送的请求体与计算哈希时的内容完全一致,比如不能有多余空格、换行,JSON序列化需使用无缩进格式
调试建议
- 打印Canonical Request和String to Sign,与AWS官方文档示例逐条比对格式和内容
- 验证时间戳是否为当前UTC时间,格式是否符合要求
- 核对region是否为Bedrock支持的区域(如
us-east-1、us-west-2等),不可填错 - 检查accessKeyId和secretAccessKey是否存在拼写错误或多余空格
内容的提问来源于stack exchange,提问作者EnriMR
相关产品推荐
相关产品推荐

