[Bug]: bedrock_mantle xai.grok-4.3 cannot use SigV4/IAM auth — forced onto bearer-only chat bridge

用户在LiteLLM代理中配置了`bedrock_mantle `路由,使用AWS SigV4/IAM认证(通过环境变量、实例角色或Pod IRSA等标准凭证链)调用xai.grok-4.3模型时,无论是使用`/v1/chat/completions`还是`/v1/responses`端点,都返回授

[Bug]: bedrock_mantle xai.grok-4.3 cannot use SigV4/IAM auth — forced onto bearer-only chat bridge

[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中正确传递

解决步骤

  1. (可优先尝试)临时绕过方法:在环境变量或配置中设置`BEDROCK_MANTLE_API_KEY`为有效的Bearer token,强制使用Bearer认证模式。这不是SigV4/IAM的解决方案,但可以让模型调用正常工作。
  2. 代码层面修复——路由修复:修改`litellm/utils.py`中`get_provider_responses_api_config()`函数的逻辑,将支持Responses API的Mantle模型(包括xai.grok-4.3、Anthropic模型等)也纳入`BedrockMantleResponsesAPIConfig`返回路径。判断条件不应仅基于模型名称是否包含`openai.gpt-`。
  3. 代码层面修复——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`)。
  4. 代码层面修复——参数传递修复:确保Chat处理程序将`aws_role_name`等AWS参数从`litellm_params`传递到传递给`sign_request`的`optional_params`字典中(Responses路径已经做了此处理)。
  5. 代码层面修复——签名服务名称修复:修复签名服务名称为`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`两个端点是否都正常工作。

参考来源

BerriAI/litellm #31196

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10894

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注