1. Claude Code 走 Bedrock 时到底卡在哪Claude Code 是 Anthropic 出的命令行编码助手能读你本地仓库、改文件、跑命令适合习惯在终端里干活的人。它默认连的是 Anthropic 官方接口但很多团队因为合规、账单归属或者已有 AWS 企业账号希望把它切到 AWS Bedrock 后端。问题就出在这个切上Claude Code 原生支持多后端可它判断走哪个后端靠的是模型 ID 的形态加上一组 AWS 环境变量而不是一个显式的开关。你只要有一项没配对它就会安静地回落到直连或者直接抛凭证错误。我见过最多的三种翻车现场一是模型名还写着claude-3-5-sonnet-latest这名字一看就是直连用的Claude Code 根本不会往 Bedrock 走二是模型 ID 改对了但 AWS 凭证没配启动就报Unable to locate credentials三是凭证和模型都对可AWS_REGION没设或者设成了模型没上线的区域请求发出去 4xx。这三种现象背后其实是同一件事Bedrock 后端的判定条件是一个组合缺一不可。这篇就围绕settings.json配置骨架和报错排查展开把ANTHROPIC_MODEL、AWS_REGION、AWS 凭证这三样该填在哪、怎么验证、报错怎么定位讲清楚。如果你手头没有现成的 AWS 凭证或者不想折腾 IAM 和区域可用性我也会给一条用 TaoToken 统一 Key 走兼容通道的替代路径配置量小很多适合先把 Claude Code 跑起来再说。2. 先搞清楚 Bedrock 后端的判定逻辑Claude Code 启动时会做一次后端选择逻辑大致是这样如果ANTHROPIC_MODEL的值形如anthropic.开头、带日期版本、带:0或:1后缀并且 AWS 凭证链能解析出身份、AWS_REGION有值它就切到 Bedrock 的 Messages 兼容调用路径否则一律走 Anthropic 直连。注意这里没有我设了 Bedrock 就一定是 Bedrock这回事判定是隐式的。所以 Bedrock 的模型 ID 和直连模型名完全是两套东西。直连写claude-3-5-sonnet-latestBedrock 得写anthropic.claude-3-5-sonnet-20241022-v2:0这种带前缀、带版本、带后缀的完整 ID。这个 ID 要去 Bedrock 控制台的模型目录里抄不能凭记忆拼。另外 Bedrock 的模型有区域可用性差异同一个模型 ID 在 us-east-1 有、在别的区域可能就没上线这也是后面 4xx 的常见来源。凭证方面Claude Code 走的是标准 AWS 凭证链优先级大致是环境变量AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY、然后是AWS_PROFILE指向的 profile、再是实例角色。你只要保证其中一条链能解析出有效身份就行。企业环境里更推荐用AWS_PROFILE避免把明文密钥写进 shell 历史。注意Bedrock 后端和直连后端在扩展思考等能力上可能有细微行为差异切换后建议用非交互命令先验证一轮确认业务侧没有依赖直连特有的行为。3. TaoToken 前置没有 AWS 凭证时的替代通道如果你只是想先让 Claude Code 跑起来手头又没有 AWS 账号或者不想配 IAM可以走 TaoToken 的统一 Key 通道。它提供一个兼容 Anthropic 接口的入口你拿一个 Key 就能调 Claude 系列模型不用管 Bedrock 的模型 ID 形态和区域可用性。官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。接入前先去控制台建 Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 建完在 API Keys 页面复制页面在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。具体字段和参数以接入文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先确认模型通不通可以用模型对话页面发一条测试消息https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。这条通道和 Bedrock 是两条独立路径你可以先用 TaoToken 把 Claude Code 跑通、确认工作流没问题再决定要不要切到企业 AWS 后端。两者不冲突配置上互不干扰。4. 可复制的 settings.json 骨架Claude Code 的配置可以放在项目级或用户级。项目级一般在仓库根目录的.claude/settings.json用户级在~/.claude/settings.json。下面这份骨架把 Bedrock 后端需要的字段都列出来了你按自己环境替换占位值即可。{ env: { ANTHROPIC_MODEL: anthropic.claude-3-5-sonnet-20241022-v2:0, AWS_REGION: us-east-1, AWS_PROFILE: my-bedrock-profile, CLAUDE_CODE_USE_BEDROCK: 1 } }几个字段的填写位置和含义字段填什么常见错误ANTHROPIC_MODELBedrock 控制台抄的完整模型 IDanthropic.前缀 日期版本 :0/:1填成直连名claude-3-5-sonnet-latest不会走 BedrockAWS_REGION模型已上线的区域如us-east-1留空或填了模型未上线的区域报 4xxAWS_PROFILE你~/.aws/credentials里的 profile 名profile 名拼错报Unable to locate credentialsCLAUDE_CODE_USE_BEDROCK显式声明走 Bedrock1表示开启漏填时依赖模型 ID 形态隐式判定容易误判如果你不用 profile 而用环境变量注入密钥把AWS_PROFILE换成AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY两个字段。但更推荐 profile 方式密钥不落配置文件。{ env: { ANTHROPIC_MODEL: anthropic.claude-3-5-sonnet-20241022-v2:0, AWS_REGION: us-east-1, AWS_ACCESS_KEY_ID: AKIAxxxxxxxx, AWS_SECRET_ACCESS_KEY: xxxxxxxx, CLAUDE_CODE_USE_BEDROCK: 1 } }注意settings.json里的env字段是 Claude Code 启动时注入子进程的环境变量优先级高于你 shell 里已有的同名变量。如果你在 shell 里也 export 了ANTHROPIC_MODEL以配置文件为准排查时别被 shell 里的旧值误导。如果你走 TaoToken 通道配置就简单很多不需要 AWS 那一套{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的TaoToken Key, ANTHROPIC_MODEL: claude-3-5-sonnet-latest } }这里模型名用直连形态即可因为走的是兼容接口不需要 Bedrock 的 ID 格式。5. 逐步验证从凭证到请求配好之后别急着在交互模式里试先用非交互命令验证输出干净、好定位。第一步脱离 Claude Code 单独验证 AWS 凭证和 Bedrock 可达性。用 boto3 直接打一次 Bedrock能通说明凭证、区域、模型 ID 三样都对import boto3, json client boto3.client(bedrock-runtime, region_nameus-east-1) resp client.invoke_model( modelIdanthropic.claude-3-5-sonnet-20241022-v2:0, contentTypeapplication/json, acceptapplication/json, bodyjson.dumps({ anthropic_version: bedrock-2023-05-31, max_tokens: 32, messages: [{role: user, content: hi}] }), ) print(json.loads(resp[body].read())[content][0][text])这段能打印出文本说明底层通道没问题问题如果还在就出在 Claude Code 的配置层。第二步用 Claude Code 的非交互模式验证它确实走了 Bedrockclaude --print 用一句话说明你当前的后端如果返回正常文本且没有报凭证或区域错误基本可以确认后端切换成功。想进一步确认没连直连可以在有网络日志的环境里观察请求目标或者临时把AWS_PROFILE改成一个不存在的名字如果报Unable to locate credentials说明它确实在尝试走 Bedrock 而不是直连。第三步验证 TaoToken 通道如果你走的是这条curl https://taotoken.net/api/v1/messages \ -H x-api-key: 你的TaoToken Key \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d {model:claude-3-5-sonnet-latest,max_tokens:32,messages:[{role:user,content:hi}]}返回带content的 JSON 就说明 Key 和通道都正常接着把ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY填进settings.json即可。6. 本篇常见报错排查报Unable to locate credentialsAWS 凭证链没解析出身份。检查AWS_PROFILE指向的 profile 是否存在于~/.aws/credentials或者环境变量密钥是否拼写正确。用aws sts get-caller-identity单独验证一次凭证。请求返回 4xx大概率是区域或模型 ID 问题。先确认AWS_REGION对应的区域里该模型已上线Bedrock 控制台的模型目录能查到再确认模型 ID 是从控制台抄的完整串不是手拼的。明明配了 Bedrock 却还在连直连检查ANTHROPIC_MODEL是不是直连形态。只要模型名不是anthropic.开头带:0/:1后缀Claude Code 就不会切 Bedrock。补上CLAUDE_CODE_USE_BEDROCK1也能减少误判。改了settings.json不生效确认改的是当前生效的那份。项目级.claude/settings.json会覆盖用户级~/.claude/settings.json如果你在项目里改用户级可能被项目级盖掉。改完重启 Claude Code配置在启动时读取。shell 里 export 了变量但没生效settings.json的env优先级更高会覆盖 shell 变量。排查时以配置文件为准别被 shell 里的旧值带偏。TaoToken 通道报鉴权失败确认 Key 是从 API Keys 页面复制的完整串请求头用的是x-api-key而不是Authorization。模型名用直连形态不要填 Bedrock 的 ID。7. 接下来怎么走如果你已经有一套企业 AWS 环境按上面的settings.json骨架把模型 ID、区域、凭证三样配齐用 boto3 先验证底层通道再用claude --print确认后端切换基本就能稳定跑起来。长期在团队里用建议把这份配置纳入版本管理模型 ID 和区域作为可替换变量避免每个人手填出错。如果你还在评估阶段或者团队暂时没有 AWS 账号先用 TaoToken 的统一 Key 把 Claude Code 跑通更省事一个 Key 搞定鉴权不用管 Bedrock 的模型 ID 形态和区域可用性。想长期做编码和 Agent 类任务可以看下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。Claude Code 相关的接入细节在文档里有专门章节https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。