Claude Code 接入 Amazon Bedrock 完整配置:从 IAM 到跑通的踩坑记录
上周团队里有同事问我:"Claude Code 能不能走公司的 AWS 账号?不想每个人单独订阅。"我一查,发现 Amazon Bedrock 早就支持了——模型调用走内网、计费进 AWS 账单、权限由 IAM 管控,确实适合团队统一管理。折腾了一下午终于跑通,把过程和踩的坑记下来。
为什么要走 Bedrock 而不是直连
先说结论,走 Amazon Bedrock 接入 Claude Code 有三个实际好处:
- 网络收敛到 AWS 内部——对有外网出口限制的企业环境,不用开额外的防火墙规则
- IAM 统一管控——可以按团队/项目分配不同模型的调用权限,新人入职建个 IAM 用户就行
- 审计和成本分摊——每次调用都进 CloudTrail,月底按 tag 分帐
说白了就是:个人用直连没问题,团队用 Bedrock 更省心。
整体链路
架构很简单,一句话说清楚:
本机 Claude Code 进程
→ 环境变量切换到 Bedrock 模式
→ AWS SigV4 签名
→ bedrock-runtime 端点
→ Cross-Region Inference Profile 自动路由
模型 ID 用跨区推理标识(比如 us.anthropic.claude-sonnet-4-6),Bedrock 会自动路由到可用区域。不用操心底层哪个 region 在跑。
第一步:确认模型可用
在配 IAM 之前,先去 Bedrock 控制台确认一下目标模型有没有开通。
- 登录 AWS 控制台,切到目标 region(我用的 us-west-2)
- 进 Amazon Bedrock → Foundation models → Model catalog
- 找到 Claude 模型卡片,点 "Open in Playground"
- 随便发条消息测试,能回复就说明链路通了
坑 1:有些模型在某些 region 还没上线。 如果 Playground 报 ValidationException,换个 region 试试。us-east-1 和 us-west-2 一般是最全的。
坑 2:模型需要申请访问。 第一次用某个模型,在 Model access 页面点 "Request access",通常几分钟就批。但有些模型(比如带 1M context 的)可能需要额外等。
第二步:建 IAM 用户 + 最小权限 Policy
别拿管理员账号的 AK/SK 配到本机。单独建个用户,挂最小权限:
# 建用户
aws iam create-user --user-name claude-code-bedrock
# 生成 AK/SK(Secret 只出现一次,马上记下来)
aws iam create-access-key --user-name claude-code-bedrock
最小权限 Policy 长这样:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "InvokeClaudeModels",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:*::foundation-model/anthropic.*",
"arn:aws:bedrock:*:*:inference-profile/us.anthropic.*",
"arn:aws:bedrock:*:*:inference-profile/eu.anthropic.*"
]
},
{
"Sid": "DiscoverModels",
"Effect": "Allow",
"Action": [
"bedrock:ListFoundationModels",
"bedrock:GetFoundationModel",
"bedrock:ListInferenceProfiles",
"bedrock:GetInferenceProfile"
],
"Resource": "*"
}
]
}
保存为 claude-code-bedrock-policy.json,然后:
# 创建 Policy
aws iam create-policy \
--policy-name ClaudeCodeBedrockAccess \
--policy-document file://claude-code-bedrock-policy.json
# 挂到用户上(换成你的 12 位账号 ID)
aws iam attach-user-policy \
--user-name claude-code-bedrock \
--policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/ClaudeCodeBedrockAccess
坑 3:Resource 里的 inference-profile ARN 容易写错。 格式是 arn:aws:bedrock:*:*:inference-profile/us.anthropic.*,注意有两个通配符——region 和 account-id 都要 *。
第三步:配置本机 credentials
把 AK/SK 写到单独的 profile,别污染默认 profile:
# ~/.aws/credentials
[claude-code]
aws_access_key_id = AKIAxxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# ~/.aws/config
[profile claude-code]
region = us-west-2
output = json
验证一下权限是否生效:
# 列出可用的 Claude 模型
AWS_PROFILE=claude-code aws bedrock list-foundation-models \
--region us-west-2 \
--by-provider anthropic \
--query "modelSummaries[?contains(modelId,'claude')].[modelId,modelLifecycle.status]" \
--output table
# 列出跨区推理 profile
AWS_PROFILE=claude-code aws bedrock list-inference-profiles \
--region us-west-2 \
--query "inferenceProfileSummaries[?contains(inferenceProfileId,'anthropic')].[inferenceProfileId,status]" \
--output table
再打一发真实请求确认能跑:
AWS_PROFILE=claude-code aws bedrock-runtime converse \
--region us-west-2 \
--model-id 'us.anthropic.claude-sonnet-4-6' \
--messages '[{"role":"user","content":[{"text":"用一句话介绍你自己"}]}]' \
--inference-config '{"maxTokens":128}'
能收到正常回复就 OK 了。
第四步:Claude Code 环境变量
Claude Code 通过环境变量识别后端。写个启动脚本 run-claude-bedrock.sh:
#!/bin/bash
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_PROFILE=claude-code
export AWS_REGION=us-west-2
export ANTHROPIC_MODEL='us.anthropic.claude-sonnet-4-6'
exec claude
给执行权限:
chmod +x run-claude-bedrock.sh
./run-claude-bedrock.sh
启动后 Claude Code 会自动检测 Bedrock 连接状态。如果一切正常,你会看到模型名称显示为 Bedrock 模式下的 inference profile ID。
坑 4:CLAUDE_CODE_USE_BEDROCK=1 是关键变量。 没设这个,Claude Code 还是走直连后端。
坑 5:model ID 用 inference profile 前缀。 比如 us.anthropic.claude-sonnet-4-6,不要用裸模型 ID anthropic.claude-sonnet-4-6-v1。后者在某些 region 不支持 on-demand 调用,会报 ValidationException。
第五步:验证和常见错误排查
启动 Claude Code 后,随便问它一个问题。如果正常回复,恭喜配置完成。
如果报错,参考这个排查表:
| 错误信息 | 原因 | 解决 |
|---|---|---|
AccessDeniedException: not authorized to perform bedrock:InvokeModel |
Policy 没覆盖目标模型 ARN | 检查 Resource 里是否包含对应的 inference-profile 前缀 |
ValidationException: Invocation of model ID … isn't supported |
该 region 不支持 on-demand,只支持 inference profile | 换成 us./eu. 前缀的跨区推理 ID |
ThrottlingException |
TPS/TPM 配额不够 | 去 Service Quotas 申请提升 |
You don't have access to the model |
模型没在 Model access 里批准 | 回控制台申请 access |
进阶:团队多人使用
如果团队有 5-10 个开发者都要用,建议:
- 用 IAM Identity Center(SSO)——每人一个 SSO session,不用管理 AK/SK
- 按团队创建不同 Policy——前端只给 Sonnet,后端给 Opus,按需控制
- 设置 Budgets 告警——Bedrock 按 token 计费,月初设个预算上限
配合 CloudTrail,可以精确追踪每个人每天调了多少次、用了多少 token,月底按 Cost Allocation Tag 分帐。
小结
整个配置流程:
- Bedrock 控制台确认模型可用
- 建 IAM 用户 + 最小权限 Policy
- 本机 credentials 配独立 profile
- CLI 验证调用链路
- 设环境变量启动 Claude Code
我实际花了大概 40 分钟跑通(主要卡在 inference profile 的 ARN 格式上)。如果你的团队正在考虑统一管理 AI 编程工具的接入方式,Bedrock 这条路值得试。
参考资料:

浙公网安备 33010602011771号