Claude Code enforceAvailableModels 补上了 Managed Settings 中 Default 模型的治理漏洞

Claude Code v2.1.175 新增 enforceAvailableModels 托管配置项:启用后,availableModels 白名单同样约束 Default 模型的解析结果,且项目或用户级配置无法扩展白名单。对于通过审批模型列表进行路由的企业团队,这关闭了一个长期存在的隐性绕过路径。

TheRouter Newsroom来源 Anthropic
一张简洁的架构示意图,展示 managed settings 层通过模型白名单门控 Claude Code Default 模型解析路径

本周发布的 Claude Code v2.1.175 新增了一个托管配置项 enforceAvailableModels,解决了团队在使用 availableModels 白名单时一直绕着走的一个真实治理漏洞。

发生了什么

在此版本之前,Claude Code 的 availableModels 托管配置允许运营方定义一组批准的模型 ID。但这套配置存在两条逃逸通道,大多数团队并未意识到:

  1. Default 模型别名不受白名单约束。 如果组织的 Default 模型解析到 Opus 4.8,而该模型不在 availableModels 白名单中,会话仍会使用 Opus 4.8——白名单只拦截通过 /model 选择器显式选择的模型,不影响 Default 解析路径。
  2. 项目和用户级配置可以扩展白名单。 开发者可以在 .claude/settings.json~/.claude/settings.json 中添加托管白名单有意排除的模型,Claude Code 会接受这一配置。

enforceAvailableModels: true 写入托管配置层后,两条逃逸通道均被关闭。Default 模型若解析到白名单之外的目标,现在会自动回退到白名单中的第一个允许模型。项目或用户级配置也无法再扩展托管的 availableModels 列表——托管层现在是上限,而不是下限。

为何对 AI 工程团队重要

企业团队强制执行 availableModels 主要出于两个原因:成本控制(防止访问更高费用的模型级别)和合规要求(确保所有 LLM 流量流经经过批准、审计的模型,通常由数据处理协议或内部 AI 治理政策要求)。

v2.1.175 之前的漏洞意味着:一份只包含 ["claude-sonnet-4-6", "claude-haiku-4-5"] 的托管白名单,仍然可能让会话通过 Default 路径落到 Opus 或 Fable 5——这通常是企业按量付费账户中成本最高的模型级别。审计会发现支出异常,但不一定能追溯到根因。

更关键的是:依赖 availableModels 限制哪些模型处理敏感数据的合规团队,现在获得了更强的保证。Default 回退路径历来是风险最高的豁免通道,因为它对大多数开发者是不可见的——他们从未显式选择过模型,因此从未注意到自己已经绕过了白名单。

Router/operator 视角分析

对于通过 AI gateway 路由 Claude Code 会话的团队——无论是将 ANTHROPIC_BASE_URL 指向代理,还是使用 Bedrock/Vertex/Foundry 原生部署——enforceAvailableModels 与 gateway 接收模型 ID 的方式存在重要交互。

启用该配置后,Default 解析到白名单第一个模型时,上游收到的模型 ID 是确定性的,不再随账户类型变化(Enterprise 账户下 Default 解析为 Opus,Pro/Team 下解析为 Sonnet)。这意味着:

  • 路由表变得可预期。 你无需再为 Default 因账户类型不同而解析到不同模型 ID 的情况做特殊处理。Gateway 始终会收到托管白名单的第一个条目。
  • 支出归因更清晰。 启用 enforceAvailableModels 后,若有白名单之外的模型产生 token 用量,必定是配置错误,而非策略绕过——审计更容易定位。
  • 白名单与 fallbackModel 存在交互。 如果托管配置同时定义了 availableModelsfallbackModel,请确认 fallbackModel 也在白名单中。白名单之外的 fallback 模型现在会被 enforceAvailableModels 拦截,可能导致会话失败而非降级处理。在生产环境部署前,务必在 staging 环境测试该组合配置。

运营方需要了解的一个细节:enforceAvailableModels 只能在托管配置层设置,不能在项目或用户作用域配置——这是设计上的约束。如果可以在项目层级禁用它,就会从根本上破坏其存在的意义。

启用前的检查步骤

准备启用 enforceAvailableModels 的团队,建议先完成以下预检:

  1. 核查当前 Default 模型解析结果。 在典型会话中运行 claude /status 查看 Default 目前解析到哪个模型。如果不在 availableModels 白名单中,启用该配置后会话将静默切换到白名单第一个模型。
  2. 按意图排列白名单顺序。 enforceAvailableModels 为 true 且 Default 原本会被拦截时,白名单的第一个条目成为实际生效的 Default。将列表顺序视为一项策略决策。
  3. 检查 fallback 链。 用户或项目配置的 fallbackModel 必须同样在托管白名单内,否则会被拦截。
  4. 与 gateway 路由表对齐。 如果 AI gateway 根据模型 ID 进行路由,确保预期的模型 ID(白名单第一个允许的模型)已映射到正确的上游 provider/部署。

TheRouter 用户的建议

通过 TheRouter 路由 Claude Code 会话并使用 managed settings 进行模型治理的团队,应在 availableModels 旁边一并添加 enforceAvailableModels: true。这一组合关闭了 Default 模型的绕过路径,让模型 ID 在 gateway 层可见且确定——对于使用 TheRouter 路由规则按成本或 provider 区分 Sonnet 级和 Opus 级流量的团队,这是一次实质性的治理升级。

该配置从 Claude Code v2.1.175 起可用。运行 claude update 升级。

客服支持