2025年Bedrock新推出了单一API Key功能,本文介绍如何使用。
一、背景
在过去Bedrock一直使用AWS自己的AKSK(Access Key/Secret Key)做身份鉴权。这要求账号管理员需要事先配置IAM User、IAM Policy,规定可调用服务范围,然后在运行环境上的特定路径保存AKSK、或者安装AWSCLI配置AKSK。然后,在应用调用中,使用Amazon Bedrock的SDK开发包,在不同语言中引用/导入SDK,然后按照Amazon Bedrock的SDK规范编写程序。这样一套流程下来,相比单API Key机制要复杂不少。
在一些嵌入式设备或者特定应用中,因为存储空间/内存空间的关系,或者因为引用使用的语言的版本关系,并不希望引用Amazon Bedrock的SDK,仅希望以HTTP协议Post的方式进行模型调用。此时,使用AWS传统AKSK认证机制还需要SignV4签名等算法,实现完成功能的代码量也较大。如果是原来基于OpenAI开发的代码,为了适配AKSK认证或者引入Bedrock SDK,也有相当的工作量。
以前为解决这些问题,可以部署Bedrock Access Gateway,提供单一API Key接口规范的Proxy。具体操作可参考如下文章:
https://blog.bitipcman.com/bedrock-access-gateway-openai-migrate-to-bedrock-anthropic-claude/
部署Proxy意味着额外的性能开销、管理成本、安全等问题。为了简化以上问题,2025年Bedrock正式推出了单一API Key机制。下面介绍这一功能。
二、获取API Key
Bedrock上创建API Key的方法非常简单,首先进入Bedrock服务,切换到要使用的Region,例如美西2(us-west-2)。
点击左侧菜单中的API keys
,点击右侧默认的Short-term API keys
,点击生成按钮。如下截图。
立刻获得了12个小时有效期的API Key。这里提供两个复制到剪贴板的功能,一个是只复制Key本身,下边那个按钮是把设置环境变量的命令一起复制了。以MacOS和Linux为例,复制下边那个更方便,点击复制按钮。如下截图。
注意:短期Key的有效期仅12小时,适合临时开发、测试等。并且API Key只显示一次,一旦退出了窗口,就不再显示了。(当然可以在创建新的)
如果希望创建长期有效的Key,则切换标签页到Long-term API Key
的页面,然后选择有效期。例如这里选择365 days
有效期一年,点击生成按钮。如下截图。
生成完毕!请注意:API Key只显示一次,一旦退出了窗口,就不再显示了。如果希望长期保存,则可以点击右下角的Download API key
按钮,会将现在生成的API Key通过浏览器下载到本机。如下截图。
至此生成Key完成,可以开始在代码中使用了。
三、在OpenAI兼容代码中使用Bedrock API Key(以Bedrock上的gpt-oss-120b为例)
注意:目前Bedrock支持OpenAI规范的chat completion
方法,参考这里。截止2025年9月,还不兼容openai的sdk的response方法。
2025年起Amazon Bedrock上也提供了OpenAI模型,首批开放的模型包括gpt-oss-120b
和gpt-oss-20b
等。在代码中要设置正确的model_id
参数,可通过如下网址查询,在点击进入后页面搜索框内输入OpenAI,即可看到。
https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
在运行代码的系统上设置环境变量配置密钥。替换${api-key}
为实际密钥。
export OPENAI_API_KEY=${api-key}
如果不希望设置环境变量,那么就需要在密码中hard-code方式写入密钥,替换代码中的$AWS_BEARER_TOKEN_BEDROCK
为实际API。这是不推荐的。
from openai import OpenAI
client = OpenAI(
base_url="https://bedrock-runtime.us-west-2.amazonaws.com/openai/v1",
# api_key="$AWS_BEARER_TOKEN_BEDROCK" # 这里不推荐hard-code方式,最好是设置OS环境变量
)
completion = client.chat.completions.create(
model="openai.gpt-oss-120b-1:0",
messages=[
{
"role": "developer",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
)
print(completion.choices[0].message)
在以上代码中,指定Region的方式通过设置Endpoint入口来实现。例如base_url
指向了us-west-2
区域。如果希望更换其他区域,请提前确认在该区域的模型可用性。另外,2025年Amazon Bedrock上也提供了OpenAI模型,因此model
参数填写为Bedrock上的OpenAI模型的ID即可。
可看到调用成功。
ChatCompletionMessage(content='<reasoning>The user says "Hello!" Just a greeting. Respond politely.</reasoning>Hello! How can I help you today?', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None)
四、构建HTTP请求使用Bedrock API Key访问多种模型
模型ID可通过如下网址查询,在点击进入后页面搜索框内输入想要使用的模型供应商,查看其可用Region和ID。
https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
查询各AWS Region对应的Bedrock Runtime API的Endpoint,可参考如下网址。(查看Amazon Bedrock runtime APIs的地址)
https://docs.aws.amazon.com/general/latest/gr/bedrock.html#bedrock_region
以下两个代码例子,都需要在运行代码的系统上设置环境变量配置密钥,将以下命令中的${api-key}
为实际密钥。如果不设置环境变量,就需要在代码中硬编码API Key,这是不推荐的方式。
export AWS_BEARER_TOKEN_BEDROCK=${api-key}
1、Python语言使用requests库构建http请求(以Bedrock上的Deepseek V3.1为例)
如果运行环境有基础python语言,那么使用Python的requests库发起http请求是轻量级、快速调用、无须引用完整boto3/bedrock库的方法之一。
安装依赖性包:
pip install requests
import requests
import os
url = "https://bedrock-runtime.us-west-2.amazonaws.com/model/deepseek.v3-v1:0/converse"
api_key = os.environ.get('AWS_BEARER_TOKEN_BEDROCK')
payload = {
"messages": [
{
"role": "user",
"content": [{"text": "你是什么模型,你有内置的tool吗"}]
}
]
}
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + api_key
}
response = requests.request("POST", url, json=payload, headers=headers)
print(response.text)
运行后结果如下:
{"metrics":{"latencyMs":4151},"output":{"message":{"content":[{"text":"
我是 **DeepSeek-V3**,由 **深度求索(DeepSeek)** 开发的 **大语言模型**。
我的知识截至 **2024年7月**,具备强大的自然语言理解和生成能力,支持 **128K 上下文**,并且可以 **免费使用**。 \n\n
### 关于我的内置 **tool(工具/功能)**:\n
我本身不具备主动调用外部工具(如 API、搜索引擎等)的能力,但我可以通过 **文本处理** 帮助你完成多种任务,例如: \n
- **代码解释与编写**(支持多种编程语言)\n
- **文学创作、文案润色**\n
- **逻辑推理、数学计算**\n
- **文件解析**(支持 txt、pdf、word、ppt、excel 等)\n
- **知识问答**(历史、科技、文化等)\n\n
如果你需要 **联网搜索** 或使用某些高级功能(比如最新资讯、实时数据等),
你可以 **手动开启联网搜索**,这样我就能借助互联网来提供更实时的信息。 \n\n
有什么我可以帮你的吗?😊
"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":13,"outputTokens":222,"serverToolUsage":{},"totalTokens":235}}
2、Curl等shell工具请求或者其他语言构建HTTP请求的方式(以Bedrock上的Qwen3为例)
curl -X POST "https://bedrock-runtime.us-west-2.amazonaws.com/model/qwen.qwen3-235b-a22b-2507-v1:0/converse" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
-d '{
"messages": [
{
"role": "user",
"content": [{"text": "你是什么模型,你有内置的tool吗"}]
}
]
}'
返回信息如下:
{"metrics":{"latencyMs":3392},"output":{"message":{"content":[{"text":"
我是Qwen3,是阿里云推出的一种超大规模语言模型。
我具备强大的语言理解和生成能力,能够回答问题、创作文字,如写故事、公文、邮件、剧本等,
还能进行逻辑推理、编程,甚至表达观点和玩游戏。\n\n
关于内置工具(tool)方面,虽然我没有传统意义上的“内置工具”,但我可以通过API调用等方式与外部工具或服务集成,
实现更复杂的功能。此外,我本身支持多种功能,例如:\n\n-
**代码解释器**:
可以执行Python代码,帮助你完成数据处理、数学计算等任务。\n-
**多语言支持**:支持包括中文、英文、法语、西班牙语等100多种语言。\n-
**对话理解能力**:经过多轮迭代和优化,我的对话理解能力得到了显著提高,能准确理解与用户交互的对话历史,为用户提供更自然、流畅的对话体验。\n\n
如果你有任何具体需求或问题,欢迎随时告诉我!我会尽力为你提供帮助。
"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":18,"outputTokens":204,"serverToolUsage":{},"totalTokens":222}}
可看到模型调用正常。
五、参考文档
Use an Amazon Bedrock API key
https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys-use.html
Invoke a model with the OpenAI Chat Completions API
https://docs.aws.amazon.com/bedrock/latest/userguide/inference-chat-completions.html
最后修改于 2025-09-24