![[Bug]: bedrock_mantle xai.grok-4.3 cannot use SigV4/IAM auth — forced onto bearer-only chat bridge](https://www.chat-gpts.plus/wp-content/uploads/2026/07/31196-c38104e0.jpg)
[Bug]: bedrock_mantle xai.grok-4.3 cannot use SigV4/IAM auth — forced onto bearer-only chat bridge
快速结论:该Bug发生在使用LiteLLM代理调用Amazon Bedrock Mantle平台上的xai.grok-4.3(及部分其他模型)时,导致已配置的AWS SigV4/IAM凭证认证失败,要求强制使用Bearer token。优先排查模型是否被路由到了签名路径,以及`litellm/utils.py`中`get_provider_responses_api_config()`函数对模型类型的判定逻辑。
问题场景
用户在LiteLLM代理中配置了`bedrock_mantle`路由,使用AWS SigV4/IAM认证(通过环境变量、实例角色或Pod IRSA等标准凭证链)调用xai.grok-4.3模型时,无论是使用`/v1/chat/completions`还是`/v1/responses`端点,都返回授权错误。相比之下,配置相同的`openai.gpt-5.5`等OpenAI GPT模型可以正常通过SigV4/IAM认证。该问题在litellm 1.89.3版本、botocore 1.43.6、boto3 1.43.1环境中被确认。
报错原文
litellm.APIConnectionError: Bedrock_mantleException - {"error":{"code":"invalid_api_key","message":"Missing 'authorization' or 'x-api-key' header","param":null,"type":"permission_denied_error"}}. Received Model Group=grok-4.3 Available Model Group Fallbacks=None
或从API直接返回:
{"error":{"code":"invalid_api_key","message":"Missing 'authorization' or 'x-api-key' header","type":"permission_denied_error"}}
当使用跨账户IAM角色(`aws_role_name`)时,调试输出为:
aws_role_name=None # 传递的ARN被丢弃了
原因分析
问题的根本原因在LiteLLM底层代码`litellm/utils.py`中的`get_provider_responses_api_config()`函数。该函数目前仅对`openai.gpt-*`模型返回`BedrockMantleResponsesAPIConfig`(支持SigV4签名),而对其他所有Mantle模型(包括xai.grok-4.3、Anthropic模型等)返回`None`,导致这些模型被路由到只支持Bearer token认证的`BedrockMantleChatConfig`(`OpenAILikeChatConfig`子类),该类没有实现`sign_request`方法,因此无法处理SigV4/IAM认证。
影响范围更广:此问题不仅影响xai.grok-4.3,还影响所有非OpenAI GPT系列的Mantle模型。甚至对于能获得`BedrockMantleResponsesAPIConfig`的OpenAI GPT模型,它们通过`/chat/completions`端点调用时仍然会走Bearer-only路径,并且会丢弃`aws_role_name`参数,导致跨账户角色扮演(assume-role)完全失效。
环境排查
- LiteLLM版本:1.89.3(低版本可能也有同样问题)
- botocore版本:1.43.6
- boto3版本:1.43.1
- 认证方式:实例角色/IRSA/凭证文件/AKSK — 任何标准AWS凭证链方式,未设置`BEDROCK_MANTLE_API_KEY`
- 检查`BEDROCK_MANTLE_API_KEY`是否被设置(会导致回退为Bearer token模式)
- 检查`aws_role_name`配置是否在litellm_params中正确传递
解决步骤
- (可优先尝试)临时绕过方法:在环境变量或配置中设置`BEDROCK_MANTLE_API_KEY`为有效的Bearer token,强制使用Bearer认证模式。这不是SigV4/IAM的解决方案,但可以让模型调用正常工作。
- 代码层面修复——路由修复:修改`litellm/utils.py`中`get_provider_responses_api_config()`函数的逻辑,将支持Responses API的Mantle模型(包括xai.grok-4.3、Anthropic模型等)也纳入`BedrockMantleResponsesAPIConfig`返回路径。判断条件不应仅基于模型名称是否包含`openai.gpt-`。
- 代码层面修复——Chat配置修复:给`BedrockMantleChatConfig`添加真实的`sign_request`实现。建议创建一个共享的mixin,同时用于Chat和Responses配置,逻辑为:优先使用Bearer token(如果`BEDROCK_MANTLE_API_KEY`/`AWS_BEARER_TOKEN_BEDROCK`/`api_key`已设置),否则回退到通过`BaseAWSLLM._sign_request()`进行SigV4签名,转发完整的标准Bedrock凭证参数集(包括`aws_role_name`、`aws_session_name`、`aws_access_key_id`、`aws_secret_access_key`、`aws_session_token`、`aws_profile_name`、`aws_web_identity_token`、`aws_sts_endpoint`、`aws_region_name`)。
- 代码层面修复——参数传递修复:确保Chat处理程序将`aws_role_name`等AWS参数从`litellm_params`传递到传递给`sign_request`的`optional_params`字典中(Responses路径已经做了此处理)。
- 代码层面修复——签名服务名称修复:修复签名服务名称为`bedrock-mantle`(参考#31475),否则即使`aws_role_name`被正确处理,被扮演角色的`bedrock-mantle:*`权限也不会匹配用`bedrock`服务作用域签名的请求。
验证方法
1. 修复后,使用以下配置进行测试:
litellm.completion(
model="bedrock_mantle/xai.grok-4.3",
messages=[{"role": "user", "content": "hi"}],
aws_region_name="us-east-1",
aws_role_name="arn:aws:iam::<OWNER_ACCT>:role/<cross-account-role>",
aws_session_name="litellm-mantle",
)
2. 确认调试输出显示`aws_role_name`未被丢弃,且出现`sts:AssumeRole`调用。
3. 确认无需设置`BEDROCK_MANTLE_API_KEY`也能成功调用xai.grok-4.3。
4. 确认Bearer token认证在`BEDROCK_MANTLE_API_KEY`/`api_key`被设置时仍然优先工作。
5. 同时检查`/v1/chat/completions`和`/v1/responses`两个端点是否都正常工作。



