400 {"error":{"type":"<nil>","message":"InvokeModel: operation error Bedrock Run...
错误信息
⎿ API Error: 400 {"error":{"type":"<nil>","message":"InvokeModel: operation error Bedrock Runtime: InvokeModel, https response error StatusCode: 400, RequestID:
29b7b534-7c5a-4083-9228-b45230dd5413, ValidationException: ***.***.***.***.***.signature: Field required (request id: 20260114102555221878717gXog7GXd)"},"type":"error"}
AI 解决方案
代码糕手 - 专业报错分析助理
分析流程
1. 错误翻译
原文:ValidationException: ***.***.***.***.***.signature: Field required
译文:验证异常:***.***.***.***.***.signature:字段必填
2. 原因分析
这是一个AWS Bedrock API调用错误,具体为签名验证失败。错误代码400表示客户端请求无效。
根本原因:
signature字段错误位置:
InvokeModel操作3. 解决方案
修复步骤:
- 检查请求头:确保包含了正确的签名信息
- 验证AWS凭证:确认使用的是有效的AWS访问密钥
// 示例:使用AWS SDK v3的正确调用方式
import { BedrockRuntimeClient, InvokeModelCommand } from "@aws-sdk/client-bedrock-runtime";
// 确保AWS凭证已正确配置
const client = new BedrockRuntimeClient({
region: "us-east-1", // 根据实际区域修改
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
sessionToken: process.env.AWS_SESSION_TOKEN // 如果需要
}
});
// 构造请求时确保包含所有必需字段
const params = {
modelId: "anthropic.claude-3-sonnet-20240229-v1:0", // 示例模型ID
contentType: "application/json",
accept: "application/json",
body: JSON.stringify({
// 你的请求体内容
prompt: "Hello, how are you?",
max_tokens: 100
})
};
try {
const command = new InvokeModelCommand(params);
const response = await client.send(command);
console.log("Success:", response);
} catch (error) {
console.error("Error:", error);
}
4.️ 预防措施
- 使用AWS SDK:始终使用官方AWS SDK进行API调用,它会自动处理签名生成
- 环境变量管理:
- AWS CloudTrail:监控API调用日志
- AWS CloudWatch:设置错误告警
- Postman + AWS SigV4插件:测试API调用
- 将AWS凭证存储在环境变量中,不要硬编码在代码里
- 使用AWS CLI配置凭证:
aws configure推荐工具:
注意: 请确保您的AWS IAM用户/角色有调用Bedrock服务的权限,并且已在该区域启用Bedrock服务。