Amazon Bedrock API Keys:告别繁琐 IAM 配置,一键调用大模型¶
Lab 信息
- 难度: ⭐ 入门
- 预估时间: 15 分钟
- 预估费用: < $0.01(仅模型推理费用)
- Region: us-east-1
- 最后验证: 2026-03-27
背景¶
调用 Amazon Bedrock API 的传统流程需要:创建 IAM 用户/角色 → 配置 IAM Policy → 生成 Access Key → 配置 AWS CLI credentials。对于初次接触 AWS 的开发者,这套流程是不小的门槛。
2025 年 7 月,Amazon Bedrock 推出了 API Keys 功能。开发者可以直接在 Bedrock 控制台或通过 API 生成 API Key,使用标准的 Bearer Token 方式认证,大幅简化上手流程。
前置条件¶
- AWS 账号,IAM 用户需具备以下权限:
iam:CreateUser、iam:AttachUserPolicy、iam:CreateServiceSpecificCredential(创建 Long-term Key)- 或 Bedrock 控制台访问权限(Console 一键生成)
- AWS CLI v2 已安装并配置 Profile
- 已开通目标模型的 Model Access(本文使用 Claude 3.5 Haiku)
核心概念¶
两种 API Key 类型¶
| 特性 | Short-term Key | Long-term Key |
|---|---|---|
| 有效期 | min(12 小时, Session 时长) | 自定义(1 天 ~ 无期限) |
| 权限来源 | 继承当前 IAM Principal 权限 | 自动创建 IAM User + AmazonBedrockLimitedAccess |
| 跨 Region | ❌ 仅限生成 Region | ✅ 可跨 Region 使用 |
| 创建方式 | Console / SDK | Console / CLI / SDK |
| 适用场景 | 生产环境(定期轮换) | 探索和开发(AWS 官方建议仅用于探索) |
API Key 认证 vs 传统 SigV4¶
| 对比项 | API Key (Bearer Token) | 传统 SigV4 |
|---|---|---|
| 配置步骤 | 1 步(生成 Key) | 4+ 步(IAM User → Policy → Access Key → CLI Config) |
| 认证方式 | Authorization: Bearer <key> |
AWS Signature V4 |
| 适用范围 | 仅 Bedrock / Bedrock Runtime | 所有 AWS 服务 |
| CloudTrail | ✅ 记录 API 调用(Key 本身不记录) | ✅ 完整记录 |
不支持的 API¶
API Key 不能用于以下 Bedrock API:
InvokeModelWithBidirectionalStream(双向流)- Agents for Amazon Bedrock(代理)
- Data Automation for Amazon Bedrock(数据自动化)
动手实践¶
Step 1: 创建 IAM 用户¶
# 创建专用 IAM 用户
aws iam create-user \
--user-name bedrock-api-key-test \
--region us-east-1 \
--profile <your-profile>
Step 2: 附加 Bedrock 权限策略¶
# 附加 AmazonBedrockLimitedAccess 托管策略
aws iam attach-user-policy \
--user-name bedrock-api-key-test \
--policy-arn arn:aws:iam::aws:policy/AmazonBedrockLimitedAccess \
--profile <your-profile>
Step 3: 生成 Long-term API Key¶
# 生成有效期 30 天的 Bedrock API Key
aws iam create-service-specific-credential \
--user-name bedrock-api-key-test \
--service-name bedrock.amazonaws.com \
--credential-age-days 30 \
--profile <your-profile>
输出示例:
{
"ServiceSpecificCredential": {
"CreateDate": "2026-03-27T02:34:20+00:00",
"ExpirationDate": "2026-04-26T02:34:20+00:00",
"ServiceName": "bedrock.amazonaws.com",
"ServiceCredentialAlias": "bedrock-api-key-test-at-595842667825",
"ServiceCredentialSecret": "ABSK...(Base64 编码的 API Key)...",
"ServiceSpecificCredentialId": "ACCAYVOX5SUYX5PVDRUM5",
"UserName": "bedrock-api-key-test",
"Status": "Active"
}
}
ServiceCredentialSecret(以 ABSK 开头)就是你的 API Key。
Step 4: 使用 API Key 调用 Bedrock¶
方式一:curl 直接调用¶
# 设置环境变量
export AWS_BEARER_TOKEN_BEDROCK="<your-api-key>"
# 调用 Converse API
curl -X POST \
"https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-haiku-20241022-v1:0/converse" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
-d '{
"messages": [
{
"role": "user",
"content": [{"text": "What is the capital of France? Answer in one word."}]
}
]
}'
方式二:Python (Boto3)¶
import os
import boto3
# 设置 API Key(也可通过环境变量 AWS_BEARER_TOKEN_BEDROCK)
os.environ["AWS_BEARER_TOKEN_BEDROCK"] = "<your-api-key>"
# 创建 Bedrock Runtime 客户端(SDK 自动检测环境变量)
client = boto3.client(
service_name="bedrock-runtime",
region_name="us-east-1"
)
# 调用 Converse API
response = client.converse(
modelId="us.anthropic.claude-3-5-haiku-20241022-v1:0",
messages=[{"role": "user", "content": [{"text": "Hello"}]}],
)
print(response["output"]["message"]["content"][0]["text"])
测试结果¶
认证方式延迟对比¶
使用相同 prompt 对 Claude 3.5 Haiku 发起 5 次请求:
| 认证方式 | Run 1 | Run 2 | Run 3 | Run 4 | Run 5 | 平均延迟 (Server) |
|---|---|---|---|---|---|---|
| API Key (Bearer) | 801ms | 791ms | 1289ms | 848ms | 851ms | 916ms |
| SigV4 (传统) | 635ms | 687ms | 534ms | 578ms | 694ms | 626ms |
API Key 认证的 Server-side 延迟比 SigV4 高约 46%。这可能与 Bearer Token 的额外验证步骤有关。不过对于大部分 AI 应用场景,几百毫秒的差异影响不大。
跨 Region 测试¶
| Key 生成 Region | 调用 Region | 结果 |
|---|---|---|
| us-east-1 | us-east-1 | ✅ 成功 |
| us-east-1 | us-west-2 | ✅ 成功(Long-term Key 可跨 Region) |
不支持的 API 测试¶
| API | 结果 | 错误信息 |
|---|---|---|
| Bedrock Runtime (Converse) | ✅ 成功 | — |
| Agents Runtime | ❌ 403 | Authorization header requires 'Credential' parameter(要求 SigV4) |
| 无效 API Key | ❌ 403 | Invalid API Key format: Base64 decoding failed |
踩坑记录¶
注意事项
1. 必须使用 Inference Profile ID
调用模型时不能使用 base model ID(如 anthropic.claude-3-5-haiku-20241022-v1:0),必须使用 cross-region inference profile ID(如 us.anthropic.claude-3-5-haiku-20241022-v1:0),否则返回 400 错误。实测发现,官方文档示例中使用了正确的 ID 但未明确说明此限制。
2. ServiceCredentialSecret = API Key
文档中提到 ServiceApiKeyValue 是 API Key,但 CLI 返回字段名为 ServiceCredentialSecret。两者是同一值,以 ABSK 前缀开头。
3. Long-term Key 的安全建议
AWS 官方强烈建议仅将 Long-term Key 用于探索目的。生产环境应使用 Short-term Key 或传统 IAM 临时凭证。已查文档确认。
费用明细¶
| 资源 | 单价 | 用量 | 费用 |
|---|---|---|---|
| IAM User / API Key | 免费 | — | $0 |
| Claude 3.5 Haiku 推理 | $0.80/1M input, $4.00/1M output | ~200 input + ~150 output tokens | < $0.01 |
| 合计 | < $0.01 |
清理资源¶
# 1. 删除 Service-Specific Credential(API Key)
aws iam delete-service-specific-credential \
--user-name bedrock-api-key-test \
--service-specific-credential-id <credential-id> \
--profile <your-profile>
# 2. 卸载策略
aws iam detach-user-policy \
--user-name bedrock-api-key-test \
--policy-arn arn:aws:iam::aws:policy/AmazonBedrockLimitedAccess \
--profile <your-profile>
# 3. 删除 IAM 用户
aws iam delete-user \
--user-name bedrock-api-key-test \
--profile <your-profile>
务必清理
Lab 完成后请执行清理步骤。虽然 API Key 本身不产生费用,但 Long-term Key 关联的 IAM User 如果被滥用可能导致意外的模型调用费用。
结论与建议¶
Amazon Bedrock API Keys 大幅降低了调用大模型 API 的入门门槛。开发者可以跳过复杂的 IAM 配置,几分钟内就能开始调用模型。
适用场景¶
| 场景 | 推荐方式 |
|---|---|
| 快速原型 / Demo | ✅ Long-term Key(设置合理过期时间) |
| 开发测试 | ✅ Short-term Key |
| 生产环境 | ⚠️ Short-term Key(需实现自动刷新)或传统 IAM Role |
| 第三方框架集成(OpenAI SDK 等) | ✅ API Key(天然兼容 Bearer Token) |
| 企业安全合规 | 使用 SCP + Condition Key 控制 Key 的生成和使用 |
企业安全控制¶
管理员可通过以下方式控制 API Key:
bedrock:CallWithBearerToken— 控制 API Key 的使用bedrock:bearerTokenType— 区分控制 Short-term / Long-term Keyiam:CreateServiceSpecificCredential— 控制 Long-term Key 的生成iam:ServiceSpecificCredentialAgeDays— 限制 Key 最大有效期