Amazon Bedrock 兼容 OpenAI 的 API:Base URL、鉴权、模型与代码(2026)
可以。Amazon Bedrock 提供兼容 OpenAI 的 API:把 OpenAI SDK 指向 https://bedrock-runtime.{region}.amazonaws.com/openai/v1,用 Bedrock API Key(或 AWS SigV4)鉴权,再传入 Bedrock 模型 ID(例如 openai.gpt-oss-120b-1:0)即可。 Bedrock 通过这种方式同时提供 Chat Completions 和 Responses API。AWS 建议新应用使用 bedrock-runtime 端点,bedrock-mantle 作为兼容选项保留。需要注意一点:bedrock-runtime 没有实现 GET /models。以下内容均来自官方 Bedrock Chat Completions 文档,核对日期为 2026 年 10 月 20 日。
本文涵盖两个端点、两种 API Key、模型 ID、curl/Python/Node 代码、Guardrails、价格、常见错误,以及什么情况下 Bedrock 比多供应商网关更合适。
速查表
| 项目 | 取值(截至 2026 年 10 月 20 日) |
|---|---|
| 推荐 Base URL | https://bedrock-runtime.{region}.amazonaws.com/openai/v1 |
| 兼容 Base URL | https://bedrock-mantle.{region}.api.aws/v1(部分模型使用 /openai/v1) |
| 支持的 OpenAI API | Chat Completions、Responses(因模型而异),以及 Anthropic Messages API |
| 鉴权 | Bedrock API Key 作为 Authorization: Bearer …,或 AWS SigV4 |
| 模型 ID 示例 | openai.gpt-oss-120b-1:0、openai.gpt-oss-20b-1:0、global.openai.gpt-5.6-sol |
通过 /models 列出模型 |
仅 bedrock-mantle 支持;bedrock-runtime 上请用 ListFoundationModels |
| 区域范围 | Key 与端点均按区域划分 |
来源:Chat Completions API、推理端点、快速入门。
bedrock-runtime 与 bedrock-mantle:该用哪个端点
AWS 表示两个端点"使用同一个底层 Mantle 推理引擎",名称区分的是端点形态,而不是不同的引擎。区别在于功能:
bedrock-runtime(推荐) |
bedrock-mantle(兼容) |
|
|---|---|---|
| Base URL | bedrock-runtime.{region}.amazonaws.com/openai/v1 |
bedrock-mantle.{region}.api.aws/v1 |
| API | InvokeModel、Converse、Chat Completions、Responses、Messages | Chat Completions、Responses、Messages |
GET /models |
未实现(返回 404 UnknownOperationException) |
支持 |
| Guardrails、智能提示路由、跨区域推理 | 支持 | 以模型卡为准 |
| 服务端工具(如网页搜索)、后台推理、Projects、Workspaces | 不支持 | 支持 |
| 配额 | 该端点独立的按模型配额 | 另一套按模型配额 |
AWS 的经验法则:先用 bedrock-runtime;只有当所需模型或功能只在 bedrock-mantle 上提供时才切换。在 bedrock-mantle 上,路径前缀因模型而异,前缀错误会报 "model … isn't supported on this route",请查看模型卡中的 Programmatic Access 表。
鉴权:Bedrock API Key 与 SigV4
Bedrock API Key 让 OpenAI SDK 可以用 Bearer Token 鉴权,而不必用 AWS 凭证签名请求(API Key 文档,2026 年 10 月 20 日):
| Key 类型 | 有效期 | 权限来源 | AWS 建议 |
|---|---|---|---|
| 短期 | 最长 12 小时(或会话时长,取较短者) | 生成它的 IAM 主体的权限 | 生产环境 |
| 长期 | 直到设定的过期时间 | 一个附加了策略的专用 IAM 用户 | 仅用于探索 |
实用提示:
- 在代码中生成短期 Key:Python 用
pip install aws-bedrock-token-generator,Node 用npm install @aws/bedrock-token-generator,每次请求前调用一次;Token 仍有效时会直接返回缓存。 - 长期 Key 只能在创建它的区域使用,跨区域调用会报
Credential should be scoped to a valid region。 - 可通过 IAM 操作
bedrock:CallWithBearerToken和bedrock-mantle:CallWithBearerToken限制 Key 的使用。 - API 调用会记录在 CloudTrail 中,但 Key 本身不会被记录。
- 使用 boto3 时,
AWS_BEARER_TOKEN_BEDROCK变量需要 boto3 1.39.0 或更高版本(快速入门)。
代码:用 OpenAI SDK 调用 Bedrock
curl(API Key)
export OPENAI_API_KEY="<bedrock-api-key>"
curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{"model": "openai.gpt-oss-120b-1:0",
"messages": [{"role": "user", "content": "Hello from Bedrock"}]}'
curl(SigV4,无需 API Key)
curl -X POST "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1/chat/completions" \
-H "Content-Type: application/json" \
--aws-sigv4 "aws:amz:us-east-1:bedrock" \
--user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \
-d '{"model": "openai.gpt-oss-120b-1:0", "messages": [{"role": "user", "content": "Hello"}]}'
Python:自动刷新短期 Key
from aws_bedrock_token_generator import provide_token # pip install aws-bedrock-token-generator openai
from openai import OpenAI
REGION = "us-east-1"
def bedrock_client() -> OpenAI:
# provide_token() returns a cached token or mints a fresh short-term key (<= 12h)
return OpenAI(base_url=f"https://bedrock-runtime.{REGION}.amazonaws.com/openai/v1",
api_key=provide_token())
r = bedrock_client().chat.completions.create(
model="openai.gpt-oss-120b-1:0",
messages=[{"role": "user", "content": "Explain Bedrock API keys in one sentence."}],
)
print(r.choices[0].message.content, r.usage)
Node.js
import OpenAI from "openai";
import { getTokenProvider } from "@aws/bedrock-token-generator";
const provideToken = getTokenProvider();
const client = new OpenAI({
baseURL: "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
apiKey: await provideToken(),
});
const r = await client.chat.completions.create({
model: "openai.gpt-oss-20b-1:0",
messages: [{ role: "user", content: "Name two Bedrock endpoints." }],
});
console.log(r.choices[0].message.content);
列出模型
在 bedrock-runtime 上调用 client.models.list() 会返回 404。可以改用 aws bedrock list-foundation-models --region us-east-1,或把 SDK 指向 bedrock-mantle 来列出模型:
curl -s "https://bedrock-mantle.us-east-1.api.aws/v1/models" -H "Authorization: Bearer $OPENAI_API_KEY"
在 OpenAI 风格的请求中加入 Bedrock Guardrail
Guardrail 通过额外请求头传入,可选的请求体字段用于输入标记:
r = bedrock_client().chat.completions.create(
model="openai.gpt-oss-20b-1:0",
messages=[{"role": "user", "content": "What is the weather like today?"}],
extra_headers={
"X-Amzn-Bedrock-GuardrailIdentifier": "GR12345",
"X-Amzn-Bedrock-GuardrailVersion": "DRAFT",
"X-Amzn-Bedrock-Trace": "ENABLED",
},
extra_body={"amazon-bedrock-guardrailConfig": {"tagSuffix": "xyz"}},
)
请求头名称来自官方 Guardrail 示例。
哪些模型支持兼容 OpenAI 的 API?
API 支持情况同时取决于模型和端点,请逐个查看模型卡(API 兼容性表)。以下为截至 2026 年 10 月 20 日 AWS 文档中的示例:
| 模型 | runtime 上的 Chat Completions | runtime 上的 Responses | 说明 |
|---|---|---|---|
openai.gpt-oss-120b-1:0 / -20b-1:0 |
支持 | 不支持(Responses 仅在 mantle 上) | 开放权重的 GPT OSS |
global.openai.gpt-5.6-sol |
支持 | 支持 | 出现在 AWS 快速入门中,全局推理配置 |
| GPT-6 系列、GPT-5.x | 以模型卡为准 | 以模型卡为准 | 列在兼容性表的 OpenAI 部分 |
| Anthropic Claude | 使用 Messages API(/anthropic) |
不适用 | ANTHROPIC_BASE_URL=https://bedrock-runtime.{region}.amazonaws.com/anthropic |
兼容 OpenAI 调用的 Bedrock 价格
你按该模型正常的 Bedrock 单价付费,兼容 OpenAI 的接口本身不额外加价。以下示例来自 Bedrock 价格页,2026 年 10 月 20 日,每 100 万 token:
| 模型 | 区域 | 输入 | 输出 |
|---|---|---|---|
| gpt-oss-20b | 亚太(悉尼) | $0.0721 | $0.3090 |
| gpt-oss-120b | 亚太(悉尼) | $0.1545 | $0.6180 |
| GPT OSS Safeguard 20B | 美国东部/西部 | $0.07 | $0.20 |
| GPT OSS Safeguard 120B | 美国东部/西部 | $0.15 | $0.60 |
价格因区域而异,Bedrock 还提供 Priority、Flex 和 Batch 等层级。请在价格页使用区域选择器查看你实际要付的价格。
常见错误与修复
| 错误 | 原因 | 修复 |
|---|---|---|
/models 返回 404 UnknownOperationException |
bedrock-runtime 未实现 Models API |
用 ListFoundationModels,或在 bedrock-mantle 上调用 /models |
model … isn't supported on this route |
bedrock-mantle 上路径前缀错误 |
查看模型卡确认是 /v1 还是 /openai/v1 |
Credential should be scoped to a valid region |
在其他区域使用长期 Key | 在目标区域重新生成 Key |
Unable to locate credentials |
低于 1.39.0 的 boto3 会忽略 AWS_BEARER_TOKEN_BEDROCK |
pip install --upgrade boto3 |
| GPT OSS 不支持 Responses API | GPT OSS 仅在 bedrock-mantle 上支持 Responses |
改用 Chat Completions 或切换端点 |
AccessDenied |
未开通模型访问,或 CallWithBearerToken 被拒绝 |
开通模型访问并检查 IAM 策略 |
Bedrock、直连 OpenAI 与多供应商网关对比
| 需求 | Bedrock 兼容 OpenAI 接口 | 直连供应商 API | 多供应商网关(如 Flatkey) |
|---|---|---|---|
| 留在 AWS 账号、IAM 和 CloudTrail 体系内 | 最佳 | 否 | 否 |
| 使用 AWS 抵扣金或企业折扣计划(EDP)承诺 | 可以 | 否 | 否 |
| Guardrails 及 VPC 周边管控 | 有 | 各供应商不同 | 各网关不同 |
| 新模型发布当天即可用 | 因模型而异 | 通常最先 | 因网关而异 |
| 一个 Key 调用 OpenAI、Anthropic、Google、阿里、DeepSeek、月之暗面、智谱 | 仅限 Bedrock 托管的模型 | 否 | 可以 |
| 需要按区域管理 Key | 需要 | 不需要 | 不需要 |
如果你完全基于 AWS,Bedrock 兼容 OpenAI 的 API 是最干净的选择。如果还需要 Bedrock 没有托管的模型,可以保留同一套 OpenAI SDK 代码,只换 Base URL。通过 Flatkey,一个 Key(https://router.flatkey.ai/v1)即可调用 GPT、Claude、Gemini、Qwen、DeepSeek、Kimi 和 GLM:
import os
from openai import OpenAI
ROUTES = {
"bedrock": OpenAI(base_url="https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1",
api_key=os.environ["AWS_BEARER_TOKEN_BEDROCK"]),
"flatkey": OpenAI(base_url="https://router.flatkey.ai/v1",
api_key=os.environ["FLATKEY_API_KEY"]),
}
def ask(route, model, prompt):
r = ROUTES[route].chat.completions.create(model=model, messages=[{"role": "user", "content": prompt}])
return r.choices[0].message.content
print(ask("bedrock", "openai.gpt-oss-120b-1:0", "hi"))
print(ask("flatkey", "qwen3.8-max", "hi")) # same SDK, different provider
print(ask("flatkey", "claude-sonnet-5-5", "hi"))
截至 2026 年 10 月 20 日,Flatkey 上 gpt-6-sol 页面显示每 100 万 token 输入 $1.20、输出 $6.00,这是相对 $2 / $10 标价的促销价。请与你在 Bedrock 上同一模型的价格对比。延伸阅读:兼容 OpenAI 的 API Base URL、直连供应商账号与 AI API 网关对比、企业级 AI API 网关检查清单。
迁移清单:从 OpenAI 应用迁到 Bedrock
- 选定区域,并在 Bedrock 控制台确认已开通模型访问。
- 把
OPENAI_BASE_URL换成https://bedrock-runtime.{region}.amazonaws.com/openai/v1。 - 把 Key 换成短期 Bedrock API Key 生成器,不要把长期 Key 部署到生产环境。
- 把模型名映射为 Bedrock ID,例如
gpt-oss-120b→openai.gpt-oss-120b-1:0。 - 删除
client.models.list()调用,或改到bedrock-mantle上执行。 - 按模型卡逐个测试流式输出、工具调用和结构化输出。
- 在策略要求的地方加上 Guardrail 请求头。
- 检查所选端点的配额(限流处理)。
- 按模型和团队追踪支出(成本归属)。
常见问题
Amazon Bedrock 支持 OpenAI API 吗?
支持。Bedrock 在 https://bedrock-runtime.{region}.amazonaws.com/openai/v1 上实现了 OpenAI Chat Completions 和 Responses API,现有 OpenAI SDK 代码只需更换 Base URL、API Key 和模型 ID 即可运行。
Bedrock 兼容 OpenAI 的 Base URL 是什么?
推荐使用 https://bedrock-runtime.{region}.amazonaws.com/openai/v1,例如 https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1。兼容端点是 https://bedrock-mantle.{region}.api.aws/v1。
如何让 OpenAI SDK 通过 Bedrock 鉴权?
把 Amazon Bedrock API Key 作为 api_key 传入,以 Authorization: Bearer 发送。AWS 建议生产环境使用短期 Key(最长 12 小时)。bedrock-runtime 也支持 SigV4 签名。
为什么在 Bedrock 上 models.list() 会失败?
bedrock-runtime 端点没有实现 OpenAI 的 GET /models 操作,会返回 404 UnknownOperationException。请使用 ListFoundationModels,或在 bedrock-mantle 上调用 /models。
在 Bedrock 上能用 GPT OSS 调用 Responses API 吗?
在 bedrock-runtime 上不行。GPT OSS 在该端点只支持 Chat Completions,其 Responses API 仅在 bedrock-mantle 上提供。
兼容 OpenAI 的端点会额外收费吗?
AWS 没有为该接口列出单独费用。你按所在区域和层级支付该模型的标准 Bedrock token 价格。
总结
要在 AWS 上使用 OpenAI SDK:把 Base URL 设为 bedrock-runtime.{region}.amazonaws.com/openai/v1,使用短期 Bedrock API Key,映射好模型 ID,并去掉 models.list()。如果你的技术栈还需要 Bedrock 之外的模型,同样的 SDK 写法也能通过 Flatkey 路由用一个 Key 实现。
最后更新:2026 年 10 月 20 日 · Flatkey Team。内容引自文中链接的 AWS 官方文档。


