Claude Code 2.1.281:Bedrock 上游获得跨账号 IAM 和 Guardrail 强制执行
2.1.281 新增三个字段,改变 Bedrock 上游的认证与策略执行。assume_role 通过 STS 将凭证转为按开发者隔离的会话令牌;guardrail 强制每个请求通过 Bedrock guardrail。两者均影响多账号 AWS 部署的信任边界。

Claude Code 2.1.281 于 9 月 23 日发布,随附一长串 bug 修复。在这份清单里,Claude apps gateway 配置新增了三个字段,改变了 Bedrock 上游在多账号 AWS 环境中的认证方式和策略执行机制。
这三个字段是 Bedrock 上游的 assume_role、Bedrock 上游的 guardrail: {id, version},以及 gateway 本身的 telemetry.resource_attributes。它们都不在发布说明的标题功能里,但都会对生产环境产生实质影响。
2.1.281 之前的 Bedrock 信任模型
Claude apps gateway 使用长期有效的 IAM 凭证对 Bedrock 进行认证——通常是访问密钥对,或 gateway 执行环境已经承担的 IAM 角色。如果 gateway 和 Bedrock 端点在同一个 AWS 账号中,这套方式没有问题。但在多账号或组织级部署中,它带来了一个问题:gateway 要么需要持有每个运行 Bedrock 端点的账号的凭证,要么每个团队都得单独部署一套 gateway。
assume_role 字段解决了这个问题。在 Bedrock 上游中配置后,gateway 会在每次请求时调用 STS AssumeRole,将其自身凭证换取一个作用域限定在目标账号中目标角色的短期会话令牌。gateway 使用这个会话令牌完成 Bedrock 调用,而非自身的长期凭证。
assume_role 对多账号 AWS 部署的影响
这个改变在运营层面影响显著。此前,gateway 在跨账号为多个团队服务时,要么携带每个账号的静态凭证集,要么每个账号单独运行一个 gateway 实例。前者是密钥管理问题,后者是成本和运维开销问题。
有了 assume_role,gateway 只持有自身的单一身份,通过 AWS IAM 的 STS 机制将各上游账号的访问权限委托出去。凭证面从多份收缩为一份,每个账号的访问控制移到目标角色上的 IAM 信任策略里——这正是它应该存在的位置。
配置格式为:assume_role: { role_arn: "...", external_id: "..." }(external_id 可选,但跨账号场景推荐填写)。如果上游配置了 session_per_developer: true,gateway 会为每个开发者创建一个独立的 STS 会话令牌,而不是共用一个令牌池。这对审计追踪有直接意义:Bedrock 侧的 CloudTrail 事件将携带每个开发者的会话上下文,而不是单一的 gateway 身份。
跨账号角色链接遵循标准 AWS 规则:gateway 执行角色需要对目标角色 ARN 有 sts:AssumeRole 权限,目标角色需要允许 gateway 角色主体的信任策略。没有非标准的配置,但必须在上游生效之前就设置好。
guardrail 执行对 operator 的影响
第二个字段 guardrail: {id, version} 将一个 Amazon Bedrock guardrail 绑定到指定上游发送的每一个请求上。配置后,该上游处理的每个调用在到达模型之前都要通过指定的 guardrail。
发布说明中有一句值得关注的约束:"要么在所有 Bedrock 上游上都设置,要么都不设置。" 原因是一致性——如果部分上游有 guardrail 而其他没有,路由到无保护上游的请求会绕过策略。对于把 Bedrock guardrail 当作合规控制而非尽力过滤的组织来说,执行不一致等于没有执行。
在此字段出现之前,guardrail 执行要么在应用层调用,要么通过 AWS 侧配置实现,gateway 并不参与。现在 gateway 成为策略执行点,Bedrock 账号则是其下游的执行环境。信任边界随之移动。
guardrail 的 id 和 version 在配置时固定,不支持按请求动态指定。如果不同用户群体或请求类型需要不同的 guardrail,需要配置指向不同 guardrail 的独立上游条目。
telemetry.resource_attributes:gateway 遥测的固定标签
第三个字段 telemetry.resource_attributes 给 Claude apps gateway 发出的所有遥测数据添加固定的键值标签,包括经过 gateway 路由的 Claude Desktop 和 /login 会话产生的遥测。
这主要是一个可观测性改动。如果你在把 gateway 遥测数据聚合到 Datadog、Grafana 或 CloudWatch 等平台,resource_attributes 提供了一种稳定的方式来附加环境标签(如 env: production、region: us-east-1、team: platform),而不需要在下游修改遥测 pipeline。这里设置的标签会出现在所有 span 和 metric 上。
实际使用场景是多环境部署:同一个遥测 pipeline 同时接收多个 gateway 实例的流量。没有 resource attributes,区分生产和预发流量需要从 host 名称推断或做注入 header 的操作。有了这个字段,在预发 gateway 配置里设置 env: staging,标签就自动出现在所有地方。
attribution:false 设置
第四个影响较广的改动:settings.json 中的 "attribution": false 可以隐藏工作区范围内所有的 commit 和 PR 归因。发布说明包含了一条兼容性提示:旧版本 Claude Code 会跳过包含这个键的 settings 文件,因此在跨版本共享的文件中,推荐使用对象形式({ "attribution": false })而非裸布尔值。
对于在 CI pipeline 或共享工作区中使用 Claude Code、且 commit 归因涉及合规或策略要求的团队,这是第一个 settings 级别的归因控制。
现有 Bedrock gateway 配置的审计要点
如果你正在运行带 Bedrock 上游的 Claude apps gateway,2.1.281 的改动带来三个需要审计的点:
单账号静态凭证部署:无需变更。assume_role 是纯增量字段。
多账号部署:评估用 assume_role + IAM 信任策略替换各账号静态凭证,是否能减少密钥管理面。上游列表中超过两个 Bedrock 账号时,几乎可以肯定是值得的。
把 Bedrock guardrail 作为合规控制的组织:guardrail 字段让 gateway 层执行变得明确。如果当前依赖应用层 guardrail 调用或 gateway 之外的 AWS 侧配置,考虑将执行移入上游配置。"全部或全不" 约束意味着需要审计每一条上游条目,而不只是你认为会处理敏感流量的那些。
缺乏环境标签的 gateway 遥测:如果遥测 pipeline 里有基于 host 名匹配或正则表达式区分环境的逻辑,telemetry.resource_attributes 提供了更干净的替代方案——改配置,而不是改 pipeline。
2.1.281 还包含大量会话历史和 prompt-cache 修复,修复的是 resume 时静默会话损坏的问题。如果你通过 gateway 运行高并发或长时间运行的 Claude Code 会话,这些修复值得细读,但不需要改配置。
相关阅读
AI 路由新闻与供应商动态 →
Claude Code 2.1.275 让每个网关代理都返回 400。2.1.276 当天就修好了。
2.1.275 引入的一个内部请求 tag 导致所有通过 ANTHROPIC_BASE_URL 代理的调用全部返回 400。2.1.276 数小时后作为定向 hotfix 发布。本文拆解这次故障的机制、受影响配置,以及 2.1.275 中值得审查的三处次要 operator 变更。

Claude Code 2.1.274:MCP 可靠性全面修复、Gateway Postgres 配置项与会话自愈
Claude Code 2.1.274 修复了六个在生产环境中静默失败的 MCP 问题,新增 store.connect_timeout_seconds 和 CLAUDE_CODE_GATEWAY_DRAIN_TIMEOUT_MS 两个 gateway 配置项,并让损坏的会话记录自动修复而非无限循环。

Claude Code 2.1.273:五个新网关提示头和 Bedrock、Vertex、Foundry 上的分类器切换
Claude Code 2.1.273 推出可选开启的网关提示头,向任何 LLM 代理暴露请求类型、agent 类型和上下文压缩状态,同时在 Bedrock、Vertex AI 和 Foundry 上静默切换 auto 模式分类器为本地模式。两个变更一起落地,但只有其中一个有回退路径。