跳转到主要内容
Claude 应用网关部署由一个 YAML 文件配置,按惯例命名为 gateway.yaml。该文件定义网关所做的一切:它在哪里监听、开发者如何登录、推理去往何处,以及应用哪些策略和遥测。本页是该文件中每个选项的参考。 要编写你的第一个配置,请从快速入门开始,它构建一个最小的工作配置并运行它。一旦你有了满意的配置,部署指南涵盖了在 Kubernetes、Cloud Run 或你自己的平台上容器化和托管它。 网关在启动时使用 claude gateway --config /path/to/gateway.yaml 读取该文件一次。每个选项都在启动时根据模式进行验证,因此格式错误的配置在启动时失败并显示字段级错误,而不是在首次使用时失败。 本页末尾的完整示例演示了每个部分。

文件结构

五个部分是必需的。所有其他部分都是可选的,省略的部分采用其默认值。未知的键会导致启动失败,因此拼写错误会显示为命名错误,而不是被静默忽略的设置。 必需部分:
  • listen:绑定地址、公共 URL、TLS 终止
  • oidc:你的身份提供者 (IdP),包括发行者、客户端、声明映射和谁可以登录
  • session:网关铸造的持有者令牌,包括密钥和生命周期
  • store:PostgreSQL,用于设备授权和速率限制计数器
  • upstreams:推理去往何处,无论是 Anthropic、Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 还是 Microsoft Foundry
可选部分:
  • admin:Admin API 身份验证和支出限制的保留
  • enforcement:支出限制故障开放或故障关闭行为
  • modelsauto_include_builtin_models:管理员策划的模型列表和每个上游的 ID
  • managed:按 IdP 组的托管设置策略
  • telemetry:OTLP 转发到你的可观测性堆栈
  • access_controllimitstimeoutsrate_limits:IP 允许/拒绝、请求大小上限、上游首字节时间和每 IP 登录限制

密钥扩展

不要直接在 gateway.yaml 中写入密钥,如 client_secretjwt_secretpostgres_url。使用下面的一种形式引用它们,网关在启动时从环境变量或文件解析该值:

必需部分

listen

listen 块控制网关服务的位置:绑定地址和端口、外部可见的源和可选的 TLS 终止。

oidc

oidc 块将网关连接到你的身份提供者,并决定谁可以登录。它命名发行者和 OAuth 客户端,映射携带电子邮件和组的声明,并按电子邮件域或组限制登录。 OpenID Connect (OIDC) 是网关与你的身份提供者一起使用的 SSO 协议;有关在 IdP 端注册的内容,请参阅身份提供者设置

session

session 块塑造网关在登录后铸造的持有者令牌:签署它们的密钥和它们的生命周期。

store

store 块指向网关的 PostgreSQL 数据库,该数据库保存设备授权和速率限制计数器。 对于本地开发,将 postgres_url 指向一个一次性 Postgres 容器,例如 docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres

upstreams

upstreams 是一个有序列表。网关将推理转发到解析请求的模型的第一个上游。在 5xx429401403404 或超时时,它故障转移到下一个;其他 4xx 不会,因为这些错误归因于请求而不是上游。401403 意味着网关自己的凭证对该上游失败,404 意味着该上游不服务请求的模型,因此列表中的后续上游仍然可以。 404 上故障转移需要网关 v2.1.198 或更高版本。早期版本即使列表中的后续上游服务该模型,也会将第一个 404 返回给客户端。 Amazon Bedrock、Claude Platform on AWS、Google Cloud 的 Agent Platform 和 Microsoft Foundry 客户端在启动时构建一次,它们的 SDK 在内部刷新凭证,因此轮换云凭证不需要重启。静态 Anthropic API 密钥和持有者在启动时读取;请参阅 Anthropic API

Anthropic API

最小的 Anthropic 上游是来自 Claude 控制台 的 API 密钥:
两种凭证形式在它们发送的头中有所不同:
  • api_key:发送 x-api-key。在 Claude 控制台中轮换它并更新环境变量。
  • oauth_token:发送 Authorization: Bearer。当你的组织发出短期令牌而不是长期 API 密钥时使用持有者形式。持有者在启动时读取一次,因此通过重新挂载密钥和重启来刷新。
代替静态密钥或持有者,你可以使用工作负载身份联合。按照工作负载身份联合指南创建联合规则,然后将你的工作负载的 OIDC JWT 挂载为文件,如 Kubernetes 投影服务帐户令牌或 CI 平台的 id-token。网关将 JWT 交换为短期持有者并自动刷新它。令牌文件在每次交换时重新读取,因此轮换的投影令牌被拾取而无需重启。

Amazon Bedrock

对于网关替换或前置的客户端 Bedrock 部署,请参阅 Amazon Bedrock 上的 Claude Code。网关端上游:
空的 auth 块使用 AWS SDK 的默认凭证链:环境变量、~/.aws/credentials、ECS 任务角色、EC2 实例元数据或 EKS 上的 IRSA。在生产中,给网关 pod 一个 IAM 角色,而不是在容器镜像中嵌入静态密钥。 显式凭证必须完整:当 aws_access_key_idaws_secret_access_key 未一起设置时,或当 aws_session_token 在没有它们的情况下设置时,网关在启动时失败。在 v2.1.207 之前,部分 auth: 块通过验证。

Claude Platform on AWS

Claude Platform on AWS 在 aws-external-anthropic.<region>.api.aws 上的 AWS 基础设施上服务第一方 Anthropic API。它使用第一方模型 ID,按发送方式尊重 anthropic-beta 头,并服务 count_tokens,因此 Bedrock 特定的翻译都不适用。anthropicAws 提供者需要 Claude Code v2.1.198 或更高版本;早期网关版本在启动时拒绝它。 对于同一平台的客户端部署,请参阅 Claude Platform on AWS 上的 Claude Code。网关端上游:
该平台在与 Amazon Bedrock 不同的 AWS 账户中运行,并为其自己的服务名称 aws-external-anthropic 签署 SigV4 请求,因此 Bedrock 范围的 IAM 角色不授权它。auth.api_key 中的 API 密钥在同时设置 SigV4 凭证时优先。空的 auth 块使用 AWS SDK 的默认凭证链,与 Amazon Bedrock 上游使用的链相同。 因为平台解析第一方模型 ID,内置目录路由到它,无需 models: 块。当你策划 models: 列表时,使用第一方 ID 键入 anthropicAws: 条目。

Google Cloud Agent Platform

对于等效的客户端设置,请参阅 Google Cloud 上的 Claude Code。网关端上游:
空的 auth 块使用应用默认凭证:GOOGLE_APPLICATION_CREDENTIALS、GCE 元数据或 GKE 工作负载身份。支持服务帐户 JSON 密钥文件但不推荐;使用工作负载身份或将服务帐户附加到 GCE 或 Cloud Run 实例。 设置 region: global 以使用 Agent Platform 的全局端点而不是区域端点。Google 然后将每个请求路由到可用地区,因此你不跟踪每地区模型可用性。设置特定地区会将每个请求固定到它。

Microsoft Foundry

对于客户端 Foundry 部署,请参阅 Microsoft Foundry 上的 Claude Code。网关端上游:
use_azure_ad: true 通过 DefaultAzureCredential 解析:AKS、ACI 或 App Service 上的托管身份;Azure CLI;或环境凭证。API 密钥有效但是项目范围的,不会自动轮换。Foundry 的端点从 resource: 派生;设置可选的 base_url 以为主权云(如 Azure Government)覆盖它。

多个上游

同一提供者可以出现多次,具有不同的 name:。这涵盖不同的地区、通过不同凭证链的不同帐户、预配吞吐量与按需以及跨提供者故障转移。 网关按顺序尝试上游。5xx429401403404、超时和缺失端点(501)故障转移;其他 4xx 不会。 429 是每上游容量,因此预配吞吐量 (PT) 耗尽故障转移到按需。404 是每上游模型可用性,因此未启用模型的上游不会阻止服务它的后续上游。无法解析请求的模型的上游被跳过,无需网络往返。 此示例首先路由预配吞吐量 Bedrock 分配,溢出到按需和第二个帐户,最后回退到 Anthropic API:
在云提供者之间或直接 Anthropic API 之间故障转移会改变哪个协议、地理位置和其他条款管理请求。 CLI 对网关应用相同的功能门控,无论哪个上游服务给定请求,因此故障转移不会发送上游会拒绝的正文字段。

可选部分

admin

可选。启用 /v1/organizations/spend_limits,它镜像 Anthropic 的公共 Admin API,以及 /v1/messages 上的每开发者支出强制。有关如何设置和强制执行上限的信息,请参阅支出限制;本部分涵盖打开该功能和调整它的 gateway.yaml 键。

enforcement

enforcement 块控制当存储不可用时支出限制检查的行为。

models

models 块是可选的管理员策划的模型列表,在 /v1/models 提供,用于按上游翻译模型 ID。对于非美国 Amazon Bedrock 地区、Amazon Bedrock 预配吞吐量 ARN 和 Microsoft Foundry 部署名称是必需的。

managed

managed 块定义基于 IdP 组或电子邮件域键入的基于角色的访问策略。策略按顺序评估;第一个匹配被选择,然后合并到下面描述的 match: {} 捕获所有基础。它们按用户在 GET /managed/settings 提供,具有 ETag/304 缓存。
match: {} 捕获所有,按惯例列在最后,被视为基础层。每个其他策略从捕获所有继承它不设置的任何键,因此每角色条目只需列出与组织默认不同的内容。合并规则取决于键类型:
  • 允许列表availableModelspermissions.allow。特定策略的列表完全替换基础的。
  • 拒绝列表和钩子数组permissions.denypermissions.askdisabledMcpjsonServersdeniedMcpServersblockedMarketplaces 和每个 hooks 事件类型数组。这些取基础和策略的并集,因此组织范围的拒绝或审计钩子不能被每角色覆盖意外删除。
  • 记录类型的键envmodelOverridesskillOverrides。这些浅合并,因此每角色 env 块覆盖它设置的键并从基础继承其余的。
availableModels 也在 /v1/messages 服务器端强制执行,因此被拒绝的模型返回 400,无论客户端发送什么。 与任何策略不匹配的已认证用户获得网关的默认值,这意味着目录中的每个模型和没有托管设置。如果你想要保证的默认策略,最后添加 match: {} 捕获所有。
网关保持自己的用户目录。它从用户的 IdP 令牌授权每个请求,从令牌的 groups 声明读取组成员身份,并根据它评估策略。没有要枚举的名册,没有要预创建的帐户,因此没有 SCIM 端点,因为没有东西可供 SCIM 同步到。在真实来源处运行用户和组生命周期管理,这是你的 IdP 的本地 SCIM 配置或专用身份治理平台。那里管理的成员身份和取消配置通过令牌自动流入网关。如果你想要 Claude 帐户本身的 SCIM 配置,这是一个 Claude for Enterprise 功能。两个传播时钟适用:
  • 策略内容:编辑策略并重新部署到连接的客户端在其下一个托管设置轮询,在一小时内
  • 组成员身份:更改用户的组成员身份改变哪个策略匹配他们。这在下一个会话重新铸造时生效,意味着下一个静默刷新,由 session.ttl_hours 限制。

cli 中的内容

每个 cli 值是完整的 Claude Code managed-settings.json 文档,与你通过 MDM 或 /etc/claude-code/managed-settings.json 部署的相同模式,在此表示为 YAML。CLI 在托管层应用交付的文档,在用户和项目设置之上。 网关在启动时根据 CLI 的设置模式验证每个文档,因此无法识别的顶级键或具有格式错误值的识别键在启动时失败,并显示命名每个违规键的错误。模式的故意开放部分仍然接受任意值,因为较新的客户端可能识别网关的模式不识别的条目。这些开放键是 envpluginConfigspermissions 下嵌套的键。 因为验证使用与网关的已安装版本捆绑的模式,将较新 Claude Code 版本引入的顶级设置键放入托管配置需要首先升级网关。在一个客户端上烟雾测试新策略,然后再推出。 完整的键参考在 Claude Code 设置 中。操作员首先到达的最常见的键:
因为这些设置通过网络到达,CLI 在应用任何可以运行 shell 命令或改变流量去往何处的内容之前向每个开发者显示一次性安全批准对话。对话涵盖:
  • hooks
  • env 变量不在 CLI 的内置安全列表上
  • shell 执行设置,如 apiKeyHelperstatusLine
  • 托管 CLAUDE.md 内容
安全列表确定哪些 env 变量在没有批准的情况下应用:
  • 在安全列表上:自动更新和模型名称变量
  • 不在安全列表上:代理变量、基础 URL 变量和 OTEL_EXPORTER_OTLP_ENDPOINT
网关的遥测配置推送 OTEL_EXPORTER_OTLP_ENDPOINT,因此设置 telemetry.forward_to 在每个交互式客户端上触发对话。对话保护开发者的机器免受受损或敌对网关,而不是组织免受开发者。 使用 -p 标志的非交互式运行无法显示对话。它仅为该运行应用推送的设置,不将其记录为已批准,因此开发者的下一个交互式会话仍然显示对话。在 v2.1.207 之前,非交互式运行将设置保存为已批准,之后没有交互式会话为它们显示对话。 如果开发者拒绝,Claude Code 退出而不是应用策略。将新钩子或非安全环境变量推送到广泛策略因此意味着每个匹配开发者下一次启动时的批准提示。 cli 键在早期版本中被命名为 settings。该拼写仍然被接受为别名,但新部署应使用 cli

与其他托管来源的优先级

如果设备也有本地 managed-settings.json 或 MDM 交付的策略,托管来源不合并。最高优先级来源提供所有策略设置,按此顺序排列,最高优先级优先:
  1. 策略助手
  2. 网关交付的设置
  3. MDM,通过 Windows 上的 HKLM 注册表或 macOS 上的 plist
  4. managed-settings.json 文件
  5. HKCU 注册表,仅在 Windows 上
嵌入主机可以通过 SDK managedSettings 选项提供策略。默认情况下它被忽略,仅当托管来源使用 parentSettingsBehavior: "merge" 选择加入时应用,过滤以便它可以收紧策略但不能放松它。 例外是一小组跨来源键,当任何管理来源设置它们时被尊重;用户可写的 HKCU 层被排除:
  • sandbox.network.allowManagedDomainsOnlysandbox.filesystem.allowManagedReadPathsOnly:当锁定时,对应的允许列表跨来源联合
  • allowAllClaudeAiMcps:claude.ai MCP 服务器允许列表的仅允许覆盖
  • sandbox.bwrapPathsandbox.socatPath沙箱助手二进制文件的文件系统路径
  • forceRemoteSettingsRefresh:阻止启动直到远程托管设置被新鲜获取,因此 MDM 或文件策略设置它被尊重,即使缺少该键的缓存远程有效负载是最高优先级来源
每个其他键,包括 allowManagedPermissionRulesOnlydisableBypassPermissionsMode,来自最高优先级来源。请参阅设置优先级了解设置页面上的相同规则。 网关策略适用于机器上的每个 Claude Code 调用,包括非交互式 claude -p 运行和由 Agent SDK 生成的会话。如果网关在启动时无法访问,已登录的会话以错误退出,而不是在没有其策略的情况下运行。
策略的 cli 块内的 mcpServers 在网关启动时被拒绝。不提供每组 MCP 分发;通过文件基础 managed-mcp.json 在每个设备上部署 MCP 服务器或让开发者在本地添加它们。

telemetry

CLI 通过 HTTP 指标、日志和(启用时)跟踪将 OpenTelemetry Protocol (OTLP) 发送到网关,网关逐字中继到每个配置的目标。有关 CLI 发出的指标和事件,请参阅监控使用 CLI 使用从网关发出的 JWT 读取的已认证用户的身份戳记每个导出:user.iduser.emailuser.groups 属性。每开发者成本和使用归因因此在没有开发者端配置的情况下工作。
每个目标独立选择加入 metricslogstraces,默认值仅为指标。信号在敏感性上有所不同:
  • 指标:聚合计数器,如令牌计数、请求计数和延迟
  • 日志和跟踪:可以携带完整的 bash 命令、工具输入和文件路径,涵盖 Claude Code 在开发者机器上所做的任何事情
仅在具有该数据保证的访问控制和保留策略的目标上启用日志和跟踪。
遥测在 CLI 中默认关闭。将 telemetry.forward_tolisten.public_url 一起配置会打开它。网关通过 /managed/settings 推送五个环境变量到每个连接的客户端:
  • CLAUDE_CODE_ENABLE_TELEMETRY=1
  • OTEL_METRICS_EXPORTER=otlp
  • OTEL_LOGS_EXPORTER=otlp
  • OTEL_TRACES_EXPORTER=otlp
  • OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>
推送的端点从公共 URL 构建,因此指标和日志不需要来自开发者或策略的 OTEL 配置。推送的配置在托管层应用,覆盖开发者在本地设置的 OTEL_* 变量。 跟踪另外需要每个客户端上的 CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1。网关不推送该变量,因此通过托管策略的 env 块设置它。它不在 CLI 的安全列表上,因此通过策略交付它由推送的 OTLP 端点已经触发的相同安全批准对话覆盖。 protobuf 和 JSON OTLP 编码都被中继,任何 OpenTelemetry 兼容的后端都可以作为目标。

HTTP 调整

四个可选的顶级块,access_controllimitstimeoutsrate_limits,调整 HTTP 表面。默认值适合大多数部署。

完整示例

此完整参考配置演示了每个核心部分;HTTP 调整块保持其默认值。复制它,删除你不需要的,并填入你的值。快速入门中的配置是此的最小版本。
gateway.yaml

客户端托管设置

上面的所有内容配置网关服务器。将开发者机器指向它是在每个设备上单独配置的,通过 Claude Code 的托管设置。网关无法自己推送这些键,因为它们是告诉客户端网关在哪里的内容。 对于 CLI,在每个 OS managed-settings.json 中设置两个键:
将该文件部署到每个设备,通常通过你的 MDM 平台。文件路径因平台而异: forceLoginGatewayUrlforceLoginMethod"gateway" 值仅从管理员控制的托管层被尊重。开发者在自己的 ~/.claude/settings.json 中设置它们无效。