gateway.yaml. O arquivo define tudo o que o gateway faz: onde ele escuta, como os desenvolvedores fazem login, para onde a inferência vai e quais políticas e telemetria se aplicam. Esta página é a referência para cada opção nesse arquivo.
Para escrever o seu primeiro, comece pelo quickstart, que constrói uma configuração mínima funcional e a executa. Uma vez que você tenha uma configuração com a qual esteja satisfeito, o guia de implantação cobre a containerização e hospedagem no Kubernetes, Cloud Run ou sua própria plataforma.
O gateway lê o arquivo uma vez, na inicialização, com claude gateway --config /path/to/gateway.yaml. Cada opção é validada contra um esquema na inicialização, portanto uma configuração malformada falha no início com um erro no nível do campo em vez de no primeiro uso.
O exemplo completo no final desta página exercita cada seção.
Estrutura do arquivo
Cinco seções são obrigatórias. Todas as outras seções são opcionais, e uma seção omitida assume seus padrões. Chaves desconhecidas falham na inicialização, portanto um erro de digitação aparece como um erro nomeado em vez de uma configuração silenciosamente ignorada. Seções obrigatórias:listen: endereço de vinculação, URL pública, terminação TLSoidc: seu provedor de identidade (IdP), incluindo emissor, cliente, mapeamento de declarações e quem pode fazer loginsession: os tokens de portador que o gateway emite, com segredo e tempo de vidastore: PostgreSQL, para concessões de dispositivo e contadores de limite de taxaupstreams: para onde a inferência vai, seja Anthropic, Amazon Bedrock, Claude Platform na AWS, Agent Platform do Google Cloud ou Microsoft Foundry
admin: autenticação da API de administração e retenção para limites de gastosenforcement: comportamento de falha aberta ou fechada do limite de gastospricing: taxas contratadas e um multiplicador para o medidor de gastos e para os valores de custo que os desenvolvedores veemmodelseauto_include_builtin_models: lista de modelos curada pelo administrador e IDs por upstreammanaged: políticas de configurações gerenciadas por grupo IdPtelemetry: encaminhamento OTLP para sua pilha de observabilidadeaccess_control,limits,timeouts,rate_limits: permitir/negar IP, limites de tamanho de solicitação, tempo até o primeiro byte upstream e limites de login por IPload_test_mode: teste de carga do gateway sem chamar um provedor de modelo
Expansão de segredos
Não escreva segredos comoclient_secret, jwt_secret ou postgres_url diretamente em gateway.yaml. Faça referência a eles com um dos formulários abaixo, e o gateway resolve o valor na inicialização a partir de uma variável de ambiente ou um arquivo:
Seções obrigatórias
listen
O bloco listen controla onde o gateway serve: o endereço de vinculação e porta, a origem visível externamente e terminação TLS opcional.
oidc
O bloco oidc conecta o gateway ao seu provedor de identidade e decide quem pode fazer login. Ele nomeia o emissor e cliente OAuth, mapeia as declarações que carregam email e grupos e restringe o login por domínio de email ou grupo.
OpenID Connect (OIDC) é o protocolo SSO que o gateway usa com seu provedor de identidade; consulte Configuração do provedor de identidade para saber o que registrar no lado do IdP.
Autenticação de cliente por certificado
Se o seu provedor de identidade autentica clientes OAuth com um certificado em vez de um segredo de cliente, como o Microsoft Entra faz com credenciais de certificado, definatoken_endpoint_auth_method: private_key_jwt. Requer Claude Code v2.1.284 ou posterior no servidor gateway.
Com essa configuração, o gateway não envia nenhum segredo. Ele se autentica no endpoint de token do IdP com um JWT de curta duração assinado com a chave privada do certificado quando um desenvolvedor faz login e cada vez que o gateway atualiza a sessão dele. O JWT é assinado com RS256 e identifica o certificado pelos cabeçalhos de thumbprint x5t e x5t#S256 em vez de um kid. Seu IdP deve ser capaz de encontrar o certificado registrado pelo thumbprint.
1
Crie a chave e o certificado
Crie uma chave privada RSA não criptografada de pelo menos 2048 bits, em formato PEM PKCS#8 ou PKCS#1, e um certificado para ela. O gateway se recusa a iniciar com qualquer chave que não atenda a essas condições. Este comando Ele grava
openssl cria uma chave desse tipo com um certificado autoassinado válido por um ano:idp-client.key e idp-client.crt no diretório atual. Copie ou monte ambos os arquivos onde o gateway possa lê-los. O exemplo na etapa 3 usa /etc/gateway/.2
Envie o certificado para o IdP
Envie o certificado, não a chave privada, para o registro de aplicativo do gateway no IdP.
3
Adicione a chave e o certificado ao gateway.yaml
Forneça ao gateway a chave privada e o certificado em um bloco Ambos os valores são o conteúdo PEM, não caminhos de arquivo, portanto carregue arquivos montados com
client_assertion. Omita client_secret, porque o gateway se recusa a iniciar quando ele está definido junto com private_key_jwt. Este bloco oidc autentica o gateway em um tenant do Microsoft Entra com um certificado:${file:/path} como o exemplo faz. O gateway se recusa a iniciar a menos que certificate_pem seja um único certificado PEM, sem o restante de sua cadeia, cuja chave pública corresponda a private_key_pem.4
Reinicie o gateway e verifique o log de inicialização
Reinicie o gateway e encontre esta linha no log de inicialização:Compare o thumbprint SHA-1 com o que o IdP mostra para o certificado que você enviou. Se o certificado tiver expirado ou ainda não for válido, o gateway ainda inicia, mas registra um aviso de que logins e atualizações falharão até que você o substitua. Para confirmar que o IdP aceita o certificado, peça a um desenvolvedor que faça login através do gateway.
Rotacionar o certificado do cliente
O gateway lê a chave e o certificado uma vez na inicialização, portanto um arquivo alterado só tem efeito após uma reinicialização. Faça a rotação nesta ordem para que nenhuma requisição de token apresente um certificado que o IdP não tenha:- Envie o novo certificado para o IdP junto com o antigo.
- Substitua os arquivos de chave e certificado que o
gateway.yamlcarrega e, em seguida, reinicie o gateway. Se você executa várias réplicas, uma reinicialização gradual funciona, porque o IdP tem ambos os certificados até que você remova o antigo. - Depois que todas as réplicas tiverem reiniciado, remova o certificado antigo do IdP.
Solicitações do IdP através de um proxy de encaminhamento
Os upstreams de inferência honramHTTPS_PROXY e HTTP_PROXY em cada versão. As próprias solicitações do gateway para o IdP, descoberta, JWKS, token e userinfo, vão diretas a menos que você defina oidc.use_proxy: true, que requer v2.1.227 ou posterior. Quando uma variável de proxy está definida, use_proxy está indefinido e o emissor não é coberto por NO_PROXY, o gateway mantém essas solicitações diretas e registra um aviso na inicialização pedindo que você escolha; use_proxy: false as mantém diretas e silencia o aviso.
Com use_proxy: true, o pod resolve o nome do host de cada endpoint do IdP e pede ao proxy para CONNECT ao endereço IP resolvido, portanto o proxy deve aceitar CONNECT ao endereço IP de cada host que o documento de descoberta nomeia, não apenas o emissor. Use uma URL de proxy http://. ca_cert_pem e a proteção SSRF se aplicam no caminho proxied também.
Egresso apenas proxy muda ambos: enquanto estiver ativo, solicitações do IdP seguem o proxy a menos que você defina use_proxy: false, e o gateway entrega ao proxy cada nome do host do IdP sem resolvê-lo primeiro.
Egresso apenas proxy
DefinaCLAUDE_GATEWAY_PROXY_IS_EGRESS_BOUNDARY=1 no ambiente do gateway, ao lado de HTTPS_PROXY, quando o pod alcança outros hosts apenas através desse proxy de encaminhamento e não pode resolver nomes DNS públicos por si mesmo, ou quando o proxy recusa CONNECT a um endereço IP. Requer v2.1.277 ou posterior. É uma variável de ambiente em vez de uma chave gateway.yaml para que nada no arquivo de configuração possa relaxar a verificação de endereço do gateway.
network: na inicialização enquanto o egresso apenas proxy está ativo.
Cada linha abaixo é uma classe de solicitação de saída em um gateway com HTTPS_PROXY definido, por padrão e enquanto o egresso apenas proxy está ativo.
O egresso apenas proxy permanece desativado a menos que o ambiente do gateway atenda a todas as três dessas condições:
HTTPS_PROXYouHTTP_PROXYestá definido.NO_PROXYeno_proxyestão vazios. Se sua plataforma injeta um deles em pods, defina ambos para um valor vazio no contêiner do gateway. Listar um coletor de telemetria emNO_PROXYmantém o egresso apenas proxy desativado.CLAUDE_GATEWAY_ALLOW_LOOPBACKnão está ativado. Um coletor ou IdP no próprio loopback do pod não pode ser combinado com egresso apenas proxy, porque um endereço de loopback entregue ao proxy seria o próprio do host proxy, portanto dê a esses serviços um endereço que o proxy possa alcançar em vez disso. Pela mesma razão, o gateway recusa nomes de estilolocalhostcompletamente enquanto o egresso apenas proxy está ativo.
oidc.use_proxy: false.
session
O bloco session molda os tokens de portador que o gateway emite após o login: o segredo que os assina e quanto tempo eles vivem.
store
O bloco store aponta o gateway para seu banco de dados PostgreSQL, que contém concessões de dispositivo e contadores de rate limit.
Para desenvolvimento local, aponte
postgres_url para um contêiner Postgres descartável, por exemplo docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres.
upstreams
upstreams é uma lista ordenada. O gateway encaminha inferência para o primeiro upstream que resolve o modelo solicitado.
Em 5xx, 429, 401, 403, 404 ou timeout, o gateway falha para o próximo upstream; outro 4xx não, porque esses erros são atribuíveis à solicitação em vez do upstream. Um 401 ou 403 significa que o upstream rejeitou a credencial que o gateway usou ou negou acesso a ela, por exemplo, ao modelo solicitado. Um 404 significa que esse upstream não serve o modelo solicitado, portanto um upstream posterior na lista ainda pode.
Se você definir forward_user_identity: true em um upstream, um 429 que ele retorna para uma solicitação que carregava o email do desenvolvedor não falha. Consulte como uma negação de limite por usuário chega ao desenvolvedor.
Failover em 404 requer gateway v2.1.198 ou posterior. Versões anteriores retornavam o primeiro 404 ao cliente mesmo quando um upstream posterior na lista servia o modelo.
Múltiplos upstreams do mesmo provedor devem definir um name: distinto.
Clientes Amazon Bedrock, Claude Platform on AWS, Agent Platform do Google Cloud e Microsoft Foundry são construídos uma vez na inicialização, e seus SDKs atualizam credenciais internamente, portanto girar credenciais de nuvem não requer reinicialização. Chaves de API Anthropic estáticas e portadores são lidos na inicialização; consulte Anthropic API.
Mensagens de erro do upstream
O gateway retorna a resposta de erro de um upstream ou seu próprio502, dependendo de como os upstreams responderam:
- Um upstream retornou um status no qual o gateway não falha: essa resposta do upstream. O gateway não tenta mais upstreams.
- Cada upstream que o gateway tentou falhou de uma forma na qual falha: o último
429. Quando nenhum retornou um429, o gateway prefere, em ordem, o último401ou403, o último404e o último501. Quando nenhum retornou nenhum desses, o próprio502do gateway,all upstreams failed (N attempted), onde N conta cada entrada emupstreams, incluindo entradas que o gateway pulou porque não servem o modelo solicitado.
400ou413no envelope de erro padrão da Anthropic: a mensagem do próprio upstream, comoprompt is too long. Claude Platform on AWS, Agent Platform e Microsoft Foundry retornam esse envelope para rejeições de API de modelo.400ou413na forma própria do provedor: um tokencapability_rejected:. Quando o gateway não pode classificar a rejeição,upstream rejected the requestem um400ourequest too large for this upstreamem um413.- Qualquer outro status: cópia genérica por status, como
upstream rate limit exceededem um429.
Input is too long for requested model. do Amazon Bedrock por capability_rejected: prompt_too_long. Claude Code compacta automaticamente nesse token, como faz em prompt is too long.
Manter a mensagem 400 ou 413 de um upstream de nuvem ou substituí-la por um token capability_rejected: requer gateway v2.1.233 ou posterior.
Anthropic API
O upstream Anthropic mínimo é uma chave de API do Claude Console:api_key: enviax-api-key. Gire-a no Claude Console e atualize a variável env.oauth_token: enviaAuthorization: Bearer. Use a forma de portador quando sua organização emite tokens de curta duração em vez de chaves de API de longa duração. O portador é lido uma vez na inicialização, portanto atualize remontando o segredo e reiniciando.
base_url de um upstream provider: anthropic para um proxy que você executa em vez de para a API Anthropic. Para dizer a esse proxy qual desenvolvedor enviou cada solicitação, defina forward_user_identity: true nesse upstream. O proxy pode então atribuir gastos por desenvolvedor. Requer um gateway executando Claude Code v2.1.233 ou posterior.
Por exemplo, para um proxy em upstream-gateway.internal.example.com:
Quando o token do IdP não carrega email, o gateway envia apenas
x-claude-gateway-user-id e omite os dois cabeçalhos de email. Se seu IdP coloca o email em uma declaração diferente, defina oidc.email_claim para essa declaração.
Quando seu proxy responde 429 para uma solicitação que carregava o email do desenvolvedor, o gateway retorna essa resposta ao desenvolvedor como está em vez de falhar para o próximo upstream, portanto seu orçamento por usuário ou rate limit do proxy se mantém. As outras respostas do proxy seguem as regras de failover ordinárias. Se o token do IdP de um desenvolvedor não carrega email, o gateway encaminha suas solicitações sem os cabeçalhos de email, portanto um 429 para uma dessas solicitações conta como capacidade de upstream e falha. Antes da v2.1.267 no servidor gateway, cada 429 falhava.
Defina forward_user_identity apenas em um upstream cujo base_url é um proxy que você opera. O gateway envia emails de desenvolvedor para qualquer servidor que esse base_url nomeia. Se o base_url for a API Anthropic, que é o padrão, o gateway se recusa a iniciar.
Amazon Bedrock
Para a implantação Amazon Bedrock do lado do cliente que o gateway substitui ou está na frente, consulte Claude Code on Amazon Bedrock. O upstream do lado do gateway:auth vazio usa a cadeia de credencial padrão do AWS SDK: variáveis env, ~/.aws/credentials, função de tarefa ECS, metadados de instância EC2 ou IRSA no EKS. Em produção, dê ao pod do gateway uma função IAM em vez de incorporar chaves estáticas em uma imagem de contêiner.
Credenciais explícitas devem ser completas: o gateway falha na inicialização quando aws_access_key_id e aws_secret_access_key não estão definidos juntos, ou quando aws_session_token está definido sem eles. Antes da v2.1.207, um bloco auth: parcial passou na validação.
Para aplicar um guardrail do Amazon Bedrock a cada requisição de inferência que o gateway envia através de um upstream Bedrock, adicione um bloco
guardrail a esse upstream. Requer Claude Code v2.1.281 ou posterior no servidor gateway.
bedrock:ApplyGuardrail no guardrail ao principal que assina as requisições desse upstream: o principal AWS do gateway ou, com assume_role, a função nomeada em role_arn.
Defina guardrail em todos os upstreams bedrock ou em nenhum. O gateway se recusa a iniciar com uma mistura, porque o failover poderia, de outra forma, enviar uma requisição a um upstream Bedrock que não tem guardrail.
O guardrail cobre apenas upstreams Bedrock. Se você listar outro provedor em upstreams, o gateway envia requisições a esse provedor sem o guardrail, ou se recusa a iniciar se esse provedor for mantle.
Quando uma requisição /v1/messages cujo corpo carrega um campo amazon-bedrock-*, como amazon-bedrock-guardrailConfig, chega a um upstream Bedrock que tem guardrail definido, o gateway responde 400 em vez de encaminhá-la.
Defina assume_role em um upstream Bedrock e o gateway usa sua própria identidade AWS apenas para chamar sts:AssumeRole em uma função que você nomeia, que pode estar em uma conta AWS diferente da do gateway. Cada requisição Bedrock desse upstream é assinada com as credenciais de uma hora que o STS retorna, portanto nenhuma chave de acesso de longa duração cruza contas.
Requer um gateway executando Claude Code v2.1.281 ou posterior. Um gateway anterior se recusa a iniciar quando encontra a chave.
assume_role aceita três chaves:
A política de confiança da função nomeia o próprio principal do gateway, como sua função IRSA ou de tarefa ECS. Esse principal precisa de
sts:AssumeRole na função e de nenhuma permissão Bedrock própria. Remova o Condition se você não definir external_id.
- Se o STS recusar ou estiver inacessível, o gateway não envia a requisição com as credenciais próprias do upstream. Ele registra o erro do STS com o que verificar e então tenta o próximo upstream que você listou. Mensagens de erro do upstream descreve o que o cliente recebe quando nenhum upstream tem sucesso. Um upstream posterior sem
assume_roleserviria a requisição com suas próprias credenciais, portanto liste um apenas se for isso que você deseja. - O gateway chama o endpoint regional do STS
sts.<region>.amazonaws.com, que sua rede deve alcançar. Para o endpoint FIPS, definaAWS_USE_FIPS_ENDPOINT=trueno ambiente do gateway em vez deuse_fips_endpointem um arquivo de configuração AWS. assume_rolese aplica apenas aprovider: bedrocke precisa de credenciais de origem SigV4: o gateway se recusa a iniciar quando ele está definido junto comaws_bearer_token.- Cada desenvolvedor que o gateway admite pode usar esse upstream;
managedgoverna quais desenvolvedores podem usar quais modelos. Para impedir que um modelo servido através da função também seja servido a partir de outra conta, dê a ele um id personalizado cujo mapaupstream_modeltenha apenas o nome desse upstream. Para esse id, o gateway pula todos os outros upstreams, portanto nem a requisição nem a contagem de tokens de uma requisição abortada podem fazer failover para outra conta. Uma requisição para um nome de modelo integrado ainda pode alcançar esse upstream, e o gateway a assina com a mesma função. Liste esse upstream por último, a menos que sua conta também deva servir esses modelos.
session_name: email a assume_role e o gateway chama sts:AssumeRole uma vez por desenvolvedor por hora, com o nome da sessão definido como o email desse desenvolvedor, e assina as requisições dele com as credenciais retornadas, portanto as requisições de cada desenvolvedor chegam à AWS sob sua própria sessão de função assumida. A função pode estar na própria conta do gateway.
Requer um gateway executando Claude Code v2.1.281 ou posterior. Atribuição de custos na AWS descreve a função IAM e onde o faturamento da AWS mostra as sessões.
session_name seleciona qual declaração verificada se torna o RoleSessionName da AWS: email ou sub. O gateway escreve qualquer caractere diferente de letras ASCII, dígitos e _+,.@- como hex =XX por byte UTF-8, e encurta um resultado com mais de 64 caracteres para um prefixo mais um hash, portanto o nome de sessão de cada desenvolvedor permanece válido e único. Uma requisição de um desenvolvedor cujo token não tem a declaração não é enviada através desse upstream, e o log do operador indica para mudar para sub ou definir oidc.email_claim.
Um desenvolvedor ativo custa uma chamada STS por hora por réplica do gateway, e primeiras requisições concorrentes compartilham uma chamada.
O gateway também faz uma chamada própria nessa função: a contagem de tokens de uma requisição que o cliente abandonou, para que os limites de gastos permaneçam precisos. Essa contagem e sua requisição de fallback de um token são assinadas pela sessão compartilhada claude-apps-gateway, portanto a AWS atribui o fallback a claude-apps-gateway em vez de ao desenvolvedor.
Para uma atribuição estrita por desenvolvedor, defina assume_role com session_name em cada upstream Bedrock que você listar. Um upstream sem ele assina as requisições que serve com suas próprias credenciais.
Endpoint Mantle do Amazon Bedrock
O provedormantle envia inferência para o endpoint Mantle do Amazon Bedrock. Ele requer Claude Code v2.1.283 ou posterior no servidor gateway. Versões anteriores do gateway o rejeitam na inicialização, portanto atualize cada réplica antes de adicioná-lo.
O exemplo abaixo coloca o Mantle primeiro, com um upstream Amazon Bedrock atrás dele para servir cada modelo que o campo models deixa de fora:
mantle.
Conceda à identidade AWS do upstream as ações IAM próprias do Mantle para inferência e contagem de tokens, que Usar o endpoint Mantle lista.
Para um ID de modelo do Mantle que o gateway não conhece, adicione uma entrada ao bloco
models: de nível superior cujo upstream_model mapeie o nome deste upstream para esse ID. Em seguida, coloque o id dessa entrada também no campo models deste upstream.
As configurações guardrail e assume_role de um upstream bedrock não se estendem às requisições que o Mantle serve:
guardrail: o gateway não aplica nenhum guardrail do Bedrock às requisições que envia ao Mantle, portanto ele se recusa a iniciar quando um upstreammantleestá listado enquanto qualquer upstreambedrockdefineguardrail.assume_role: um upstreammantlenão aceitaassume_role. As requisições que o Mantle serve são enviadas com as credenciaisauthpróprias do upstreammantlee não são atribuídas por desenvolvedor.
Claude Platform on AWS
Claude Platform on AWS serve a API Anthropic de primeira parte em infraestrutura AWS emaws-external-anthropic.<region>.api.aws. Usa IDs de modelo de primeira parte, honra cabeçalhos anthropic-beta conforme enviados e serve count_tokens, portanto nenhuma tradução específica do Bedrock se aplica. O provedor anthropicAws requer Claude Code v2.1.198 ou posterior; versões anteriores do gateway o rejeitam na inicialização.
Para a implantação do lado do cliente da mesma plataforma, consulte Claude Code on Claude Platform on AWS. O upstream do lado do gateway:
aws-external-anthropic, portanto uma função IAM com escopo Bedrock não a autoriza. Uma chave de API em auth.api_key tem precedência quando credenciais SigV4 também estão definidas. Um bloco auth vazio usa a cadeia de credencial padrão do AWS SDK, a mesma cadeia que o upstream Amazon Bedrock usa.
Como a plataforma resolve IDs de modelo de primeira parte, o catálogo integrado roteia para ela sem um bloco
models:. Quando você cura uma lista models:, chave a entrada anthropicAws: com o ID de primeira parte.
Google Cloud Agent Platform
Para a configuração equivalente do lado do cliente, consulte Claude Code on Google Cloud. O upstream do lado do gateway:auth vazio usa Credenciais Padrão de Aplicativo: GOOGLE_APPLICATION_CREDENTIALS, metadados GCE ou Workload Identity do GKE. Arquivos de chave JSON de conta de serviço são suportados mas desencorajados; use Workload Identity ou anexe uma conta de serviço à instância GCE ou Cloud Run.
Defina region: global para usar o endpoint global do Agent Platform do Google Cloud em vez de um regional. O Google então roteia cada solicitação para uma região disponível, portanto você não rastreia disponibilidade de modelo por região. Definir uma região específica fixa cada solicitação a ela.
Microsoft Foundry
Para a implantação Microsoft Foundry do lado do cliente, consulte Claude Code on Microsoft Foundry. O upstream do lado do gateway:use_azure_ad: true resolve através de DefaultAzureCredential: Managed Identity no AKS, ACI ou App Service; a CLI do Azure; ou credenciais de ambiente. Chaves de API funcionam mas são em todo o projeto e não giram automaticamente. O endpoint do Microsoft Foundry é derivado de resource:; defina o base_url opcional para substituí-lo para nuvens soberanas como Azure Government.
Cabeçalhos estáticos em solicitações de upstream
Para adicionar cabeçalhos fixos às solicitações que o gateway envia para um upstream, definaheaders: nesse upstream. Use-o quando um proxy que você executa na frente do provedor roteia ou atribui tráfego por um cabeçalho.
headers: requer Claude Code v2.1.277 ou posterior no servidor gateway. Um gateway anterior se recusa a iniciar quando encontra a chave. Atualize cada réplica antes de adicionar a chave e remova a chave antes de reverter para uma versão anterior.
Os cabeçalhos vão para o servidor que base_url nomeia, ou para o endpoint do próprio provedor quando base_url não está definido. O provedor os recebe também a menos que seu proxy os remova.
Este exemplo alcança um upstream provider: vertex através de um proxy em upstream-proxy.internal.example.com. Ele define o cabeçalho x-source que o proxy lê e envia um token da variável de ambiente PROXY_TOKEN como x-proxy-token:
true ou false para que YAML o leia como texto.
Para manter um segredo fora do arquivo de configuração, use expansão de segredo para carregar o valor de uma variável de ambiente com ${VAR} ou de um arquivo com ${file:/path}. Um ${VAR} que resolve para um valor vazio impede o gateway de iniciar.
headers: funciona em cada provedor, e cada upstream envia apenas o seu.
Nem toda solicitação que o gateway envia para um upstream carrega eles:
Em um upstream Amazon Bedrock ou Claude Platform on AWS que assina solicitações com AWS SigV4, esses cabeçalhos fazem parte da assinatura, portanto seu proxy deve passá-los inalterados.
Se você usar um nome que o gateway reserva, ele se recusa a iniciar, e o erro de inicialização nomeia o cabeçalho. Os nomes reservados incluem:
authorizationex-api-keyhost,content-typeeuser-agent- Qualquer nome começando com
anthropic-,x-goog-,x-amz-oux-amzn-
Múltiplos upstreams
O mesmo provedor pode aparecer mais de uma vez com umname: distinto. Isso cobre diferentes regiões, diferentes contas através de diferentes cadeias de credencial, throughput provisionado versus sob demanda e fallback entre provedores.
O gateway tenta upstreams em ordem. 5xx, 429, 401, 403, 404, timeouts e endpoint ausente (501) falham; outro 4xx não.
429 é capacidade por upstream, portanto esgotamento de throughput provisionado (PT) falha para sob demanda. Se você definir forward_user_identity: true em um upstream, um 429 para uma solicitação que carregava o email do desenvolvedor é uma negação por usuário em vez disso e não falha.
Cada solicitação começa no primeiro upstream. Uma solicitação alcança um upstream posterior apenas quando cada upstream à sua frente falhou ou não serve o modelo solicitado.
O gateway não mantém registro de upstreams falhados, portanto enquanto um upstream está inativo, cada solicitação que o alcança ainda o tenta e aguarda sua falha antes de prosseguir.
Para um upstream da API Anthropic, timeouts.upstream_ttfb_ms limita a espera em um upstream inativo. Essa configuração não se aplica aos outros provedores, onde o gateway aguarda até uma hora para um upstream começar a responder.
404 é disponibilidade de modelo por upstream, portanto um upstream que não habilitou um modelo não bloqueia um upstream posterior que o serve. Um upstream que não pode resolver o modelo solicitado é pulado sem uma viagem de rede.
Este exemplo roteia uma alocação de throughput provisionado Amazon Bedrock primeiro, transborda para sob demanda e uma segunda conta, e recorre à API Anthropic por último:
Falhar entre provedores de nuvem ou para a API Anthropic direta muda qual acordo, geografia e outros termos governam a solicitação.
O CLI aplica o mesmo feature gating a gateways independentemente de qual upstream serve uma determinada solicitação, portanto o failover não envia um campo de corpo que um upstream rejeitaria.
Seções opcionais
admin
Opcional. Ativa /v1/organizations/spend_limits, que espelha a Admin API pública da Anthropic, e aplicação de gastos por desenvolvedor em /v1/messages. Veja Spend limits para saber como os limites são definidos e aplicados; esta seção cobre as chaves gateway.yaml que ativam o recurso e o ajustam.
enforcement
O bloco enforcement controla como as verificações de limite de gastos se comportam quando o armazenamento está indisponível.
pricing
O bloco pricing informa ao medidor de gastos o que cobrar em vez do preço de lista em USD, para que os limites e /effective reflitam suas taxas contratadas. Os valores permanecem em USD e continuam sendo uma estimativa, não uma fatura. Dois pré-requisitos:
- Claude Code v2.1.227 ou posterior no servidor do gateway. Versões anteriores rejeitam a chave desconhecida na inicialização.
- Um bloco
admin:ou, em v2.1.268 ou posterior, um blocomanaged:com pelo menos uma política. O gateway se recusa a iniciar compricingdefinido e nenhum bloco, porque nada o leria.
Como o medidor corresponde a uma linha de substituição:
- Uma linha substitui o preço de lista para requisições que
upstream, umupstreams[].name, serve paramodel. Isto inclui a taxa de modo rápido mais alta, então requisições de modo rápido e padrão medem as mesmas quatro taxas. - Um ID integrado como
claude-sonnet-4-6, correspondido comomodels[].id, cobre cada forma datada, forma regional do Amazon Bedrock, ou forma da Plataforma de Agentes do Google Cloud que o medidor precifica como esse modelo. Qualquer outra string, como um alias ou um ARN de perfil de inferência, corresponde ao ID que o cliente enviou ou à string enviada upstream, sem distinção de maiúsculas e minúsculas. - Onde as linhas se sobrepõem, o medidor escolhe a linha mais específica em vez da primeira linha: uma linha cujo
modelé a string de modelo exata enviada upstream, depois uma linha correspondendo ao ID exato que o cliente enviou, depois uma linha nomeando o modelo integrado. - Um nome de upstream desconhecido falha na inicialização, assim como duas linhas para um upstream que nomeiam o mesmo modelo, incluindo duas grafias de um modelo integrado. O gateway avisa na inicialização sobre uma linha que nenhum modelo solicitável pode usar.
- Requisições de busca na web permanecem no preço de lista de $0,01; o multiplicador ainda se aplica a elas.
Marcar preços para cima
Com v2.1.271 ou posterior no servidor do gateway, você pode definirmultiplier acima de 1, até 10, para medir mais do que o provedor cobra, por exemplo uma taxa de reembolso interno. Este exemplo mede cada requisição em 120% do preço:
admin:, a marcação também se aplica aos limites de gastos. O medidor conta 120% do preço, então desenvolvedores atingem seus limites mais cedo. O gateway registra um aviso na inicialização que diz isto.
O multiplicador não muda o que o provedor upstream cobra pelas requisições.
Se o gateway também envia as taxas para clientes conectados, desenvolvedores precisam de Claude Code v2.1.271 ou posterior para ver a marcação. Clientes anteriores ignoram um multiplier acima de 1 e mostram custos sem ele.
Um servidor de gateway anterior a v2.1.271 se recusa a iniciar se você definir um multiplier acima de 1.
Enviar as taxas para clientes conectados
Com v2.1.268 ou posterior no servidor do gateway, o gateway também coloca as taxas depricing nas políticas managed que serve, como a configuração gerenciada modelPricing. Desenvolvedores correspondidos por uma política então veem as taxas de pricing para o primeiro upstream que serve cada ID de modelo em /usage, a linha de status e OpenTelemetry. Um desenvolvedor que não corresponde a nenhuma política não recebe configurações gerenciadas, então seus valores permanecem no preço de lista. Clientes aplicam a configuração em Claude Code v2.1.242 ou posterior.
- O que o gateway adiciona: a menos que o bloco
clide uma política já definamodelPricing, o gateway adiciona omultipliere, para cada ID de modelo que um cliente pode solicitar, a linha de substituição do primeiro upstream que serve esse ID. Uma taxa que apenas um upstream de failover cobra permanece no gateway. - Excluir uma política: defina
modelPricingcomo{}no blococlidessa política, e seus desenvolvedores permanecem no preço de lista. - Manter as próprias taxas de uma política: uma política cujo bloco
clidefinemodelPricingcom seu própriomultiplierouoverridesmantém essemodelPricinginteiro, e o gateway não adiciona nenhuma taxa de sua própria a ele.
models
O bloco models é uma lista de modelos opcional curada por administrador, servida em /v1/models e usada para traduzir IDs de modelo por upstream. É obrigatório para regiões não-US do Amazon Bedrock, ARNs de throughput provisionado do Amazon Bedrock e nomes de implantação do Microsoft Foundry.
upstream_model deve corresponder ao name de um upstream configurado, que é padrão para o nome do provedor. Uma chave que não corresponde a nenhum upstream falha na inicialização, então omita as linhas para provedores que você não usa.
managed
O bloco managed define políticas de acesso baseadas em funções com chave em grupos do IdP ou domínio de email. As políticas são avaliadas em ordem; a primeira correspondência é selecionada, depois mesclada na base de captura match: {}. Elas são servidas por usuário em GET /managed/settings com cache ETag/304.
match: {}, convencionalmente listada por último, é tratada como uma camada base. Cada outra política herda qualquer chave que não define da captura, então entradas por função só precisam listar o que difere do padrão da organização. As regras de mesclagem dependem do tipo de chave:
- Allowlists:
availableModelsepermissions.allow. A lista de uma política específica substitui completamente a da base. - Listas de negação e arrays de hook:
permissions.deny,permissions.ask,disabledMcpjsonServers,deniedMcpServers,blockedMarketplacese cada array de tipo de eventohooks. Estes tomam a união de base e política, então um hook de negação ou auditoria em toda a organização não pode ser acidentalmente descartado por uma substituição por função. - Chaves de tipo registro:
env,modelOverrideseskillOverrides. Estas mesclam superficialmente, então um blocoenvpor função sobrescreve as chaves que define e herda o resto da base.
availableModels também é aplicado no lado do servidor em /v1/messages, então um modelo negado retorna 400 independentemente do que o cliente envia. Uma lista vazia nega todos os modelos. A verificação também cobre o modelo em que uma sessão começa antes de o desenvolvedor escolher um, então inicie sessões em um modelo que a política permite.
O gateway valida o valor model em si antes de retransmitir uma requisição, então um valor malformado nunca atinge um upstream. Ele rejeita a requisição com um 400 em dois casos:
- Quando o valor está faltando ou vazio, o gateway rejeita a requisição com a mensagem
model is required. Essa verificação requer um gateway executando Claude Code v2.1.228 ou posterior. - Quando o valor está presente mas não é uma string, o gateway rejeita a requisição com a mensagem
model must be a string. Requer um gateway executando Claude Code v2.1.221 ou posterior.
Um usuário autenticado que não corresponde a nenhuma política obtém os padrões do gateway, o que significa cada modelo no catálogo e nenhuma configuração gerenciada. Adicione uma captura
match: {} por último se você quiser uma política padrão garantida.
O gateway não mantém seu próprio diretório de usuários. Ele autoriza cada requisição do token do IdP do usuário, lendo a associação de grupo da declaração
groups do token e avaliando políticas contra ela. Não há lista para enumerar e nenhuma conta para pré-criar, e portanto nenhum endpoint SCIM, porque não há nada para SCIM sincronizar.Execute gerenciamento de ciclo de vida de usuário e grupo na fonte de verdade, que é o provisionamento SCIM nativo do seu IdP ou uma plataforma dedicada de governança de identidade. A associação e desprovisionamento governados lá fluem para o gateway automaticamente através do token. Se você quiser provisionamento SCIM de contas Claude em si, essa é uma capacidade de Claude for Enterprise.Dois relógios de propagação se aplicam:- Conteúdo da política: editar uma política e reimplantar atinge clientes Claude Code conectados em sua próxima pesquisa de configurações gerenciadas, dentro de uma hora, além das mudanças que se aplicam apenas no próximo lançamento
- Associação de grupo: mudar a associação de grupo de um usuário muda qual política o corresponde. Isto entra em vigor na próxima remintagem de sessão, significando o próximo refresh silencioso, limitado por
session.ttl_hours.
Iniciar sessões em um modelo que a política permite
SeavailableModels deixa de fora o modelo padrão do Claude Code, as sessões recebem respostas 400 até que o desenvolvedor escolha um modelo listado, por exemplo com /model. Em sessões do gateway, o padrão é o modelo Opus para o qual o alias opus resolve, e availableModels sozinho não o altera.
Para corrigir isso, defina enforceAvailableModels: true no mesmo bloco cli e, em seguida, verifique que tipo de entrada a lista tem:
- Um alias como
sonnet, ou um ID integrado comoclaude-sonnet-4-6: as sessões começam em um desses modelos, e a opção Default em/modelresolve para ele - Nenhum alias ou ID integrado na lista: as sessões podem continuar começando no padrão integrado, então também defina
modelcomo um dos IDs listados no blococlidessa política
models define e inicia sessões nesse ID:
Valores de matcher que interrompem o gateway na inicialização
Na inicialização, o gateway verifica o blocomatch de cada política e a lista admin_groups. Qualquer um destes valores interrompe o gateway com um erro que nomeia o campo:
- Uma lista
groupsvazia - Uma entrada vazia em
groupsou emadmin_groups - Um
email_domainvazio - Um
email_domainque contém@, espaço em branco ou uma vírgula. O gateway remove espaço em branco do valor e remove um@inicial antes desta verificação. Escreva um domínio simples, comoexample.com.
- Um
email_domainvazio: o gateway pulava a verificação de domínio, então uma política com umemail_domainvazio e nenhuma listagroupscorrespondia a cada usuário autenticado - Uma lista
groupsvazia: a política não correspondia a ninguém - Um
email_domaincontendo@, espaço em branco ou uma vírgula: a política não correspondia a ninguém - Uma entrada vazia em
groupsou emadmin_groups: a entrada correspondia a um usuário apenas quando a declaraçãogroupsdo IdP desse usuário também continha uma entrada vazia. Emadmin_groups, essa correspondência concedia acesso administrativo. Se sua listaadmin_groupsnunca continha uma entrada vazia, ninguém ganhava acesso administrativo desta forma.
Escolher cli ou code
As configurações do Claude Code de uma política, como uma regra que nega a leitura de arquivos .env, ficam em um bloco sob a chave cli ou code. code é a chave recomendada, e cli é a chave legada. Ambas as chaves aceitam o mesmo conteúdo. A chave decide onde as configurações são aplicadas:
cli: o terminal, as extensões do VS Code e do JetBrains e o Agent SDK. Comcli, a aba Code do Claude Desktop recebe as configurações derivadas, então uma regra com escopo comoRead(./.env)não impede um usuário ali.code: os mesmos lugares, e a aba Code do Claude Desktop também pode ser coberta.
cli funciona como antes, e um gateway que encontra cli em uma política com uma chave desktop emite um aviso na inicialização e inicia mesmo assim. Mude para code para que as configurações também possam cobrir a aba Code.
Antes de mudar, leia Aplicar configurações de code na aba Code. A política precisa de uma chave desktop e as máquinas dos usuários precisam de configuração antes que as configurações se apliquem ali, e a pesquisa na web é desativada no Claude Desktop.
Esta política coloca a regra de negação sob code, com uma chave desktop vazia:
serve_to_desktop na mesma edição que renomeia os blocos. Onde uma instrução mencionar o bloco cli, use seu bloco code.
O que vai em cli
Cada valor de code ou cli é um documento managed-settings.json completo do Claude Code, o mesmo esquema que você implantaria via MDM ou /etc/claude-code/managed-settings.json, expresso aqui como YAML. A CLI aplica o documento entregue no nível gerenciado, acima das configurações de usuário e de projeto, no lugar das configurações gerenciadas pelo servidor. Portanto, ela ignora as configurações restritas a fontes de política no nível do SO, como policyHelper e wslInheritsWindowsSettings.
O gateway valida cada documento contra o esquema de configurações do CLI na inicialização, então uma chave de nível superior não reconhecida falha na inicialização com um erro nomeando cada chave ofensiva. Partes deliberadamente abertas do esquema ainda aceitam valores arbitrários, porque clientes mais novos podem reconhecer entradas que o esquema do gateway não. Estas chaves abertas incluem env, pluginConfigs e chaves aninhadas sob permissions.
Como a validação usa o esquema agrupado com a versão instalada do gateway, colocar uma chave de configurações de nível superior introduzida por um lançamento mais novo do Claude Code em configuração gerenciada requer atualizar o gateway primeiro. Teste uma nova política em um cliente antes de implantá-la amplamente.
A referência de chave completa está em Claude Code settings. As chaves que operadores mais procuram primeiro:
Como estas configurações chegam pela rede, o CLI mostra a cada desenvolvedor um diálogo de aprovação de segurança antes de aplicar as configurações listadas abaixo:
hooks- Variáveis
envque requerem aprovação do desenvolvedor, como variáveis de proxy e URL base - configurações de execução de shell como
apiKeyHelperestatusLine - as configurações de binário sandbox
sandbox.bwrapPath,sandbox.socatPathesandbox.ripgrep - Configurações de Sandbox que interceptam tráfego, injetam credenciais ou enfraquecem isolamento, como
sandbox.network.tlsTerminatee as configurações de porta de proxy. Security approval dialogs lista todas elas.
env entregues sem mostrar ao desenvolvedor o diálogo de aprovação, como configurações de seleção de modelo e limites numéricos. Outras variáveis entregues podem exigir aprovação do desenvolvedor antes de entrarem em vigor; um valor de proxy, URL base ou OTEL_EXPORTER_OTLP_ENDPOINT não vazio sempre faz. Quando uma variável entregue precisa de aprovação, o diálogo a nomeia.
Environment variables and the approval dialog tem os detalhes, incluindo quatro toggles de privacidade cujo valor entregue decide se precisam de aprovação. Antes de v2.1.218, Claude Code aplicava menos variáveis sem perguntar ao desenvolvedor, então mais variáveis entregues acionavam o diálogo.
A configuração de telemetry do gateway empurra OTEL_EXPORTER_OTLP_ENDPOINT, então definir telemetry.forward_to aciona o diálogo em cada cliente interativo. O diálogo protege a máquina do desenvolvedor de um gateway comprometido ou hostil, não a organização do desenvolvedor.
Uma execução não interativa, como claude -p, uma sessão do Agent SDK ou uma sessão na aba Code do Claude Desktop, não pode mostrar a caixa de diálogo. Ela aplica as configurações enviadas somente para essa execução e não as registra como aprovadas, então a próxima sessão interativa do desenvolvedor ainda mostra a caixa de diálogo.
Se um desenvolvedor recusa, Claude Code sai dessa sessão em vez de aplicar a política. Quando você empurra um novo hook, ou qualquer variável env que aciona o diálogo, para uma política ampla, cada desenvolvedor correspondido portanto vê o diálogo em suas sessões interativas. Uma sessão interativa em execução o mostra na próxima pesquisa horária e, caso contrário, ele aparece na próxima inicialização interativa do desenvolvedor.
A chave cli se chamava settings em versões anteriores, e o gateway ainda aceita essa grafia como alias. Para novas implantações, use code.
Janela de contexto em sessões de terminal
Sessões de terminal conectadas através de/login usam a janela de contexto de 1M para Opus 4.7 e posterior, Sonnet 5 e posterior, e os modelos Fable. O ID do modelo não precisa de sufixo [1m], e as sessões compactam em cerca de 967K tokens. Antes de Claude Code v2.1.287 na máquina do desenvolvedor, Claude Code tratava os modelos Opus e Fable como tendo uma janela de 200K, a menos que o ID do modelo terminasse em [1m].
Para que as sessões de terminal compactem no limite de 200K em vez disso, defina a janela de compactação automática no env da política:
[1m].
Para desativar o contexto de 1M em vez disso, defina CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" no mesmo bloco env. Claude Code então trata cada modelo como tendo uma janela de 200K. Em sessões interativas, cada desenvolvedor aprova esta variável no diálogo de aprovação antes que ela entre em vigor.
MCP servers in a policy
Para fornecer servidores MCP aos clientes Claude Code que uma política corresponde, definamanagedMcpServers no bloco cli dessa política. Você precisa de Claude Code v2.1.259 ou posterior no servidor do gateway e nos clientes.
O gateway verifica cada entrada na inicialização com as mesmas regras que Claude Code aplica no cliente, e se uma entrada falha uma verificação, o gateway se recusa a iniciar e nomeia a entrada.
Se você escrever uma referência ${VAR} em gateway.yaml, o gateway a resolve de seu ambiente na inicialização através de secret expansion antes de executar as verificações de entrada, então cada cliente correspondido recebe o valor literal e pode lê-lo. A header guidance for provided servers se aplica ao valor expandido.
O gateway rejeita a grafia .mcp.json mcpServers em um bloco cli, e seu erro de inicialização nomeia managedMcpServers como a chave a usar. Antes de v2.1.259, o gateway rejeitava qualquer definição de servidor MCP em um bloco cli.
Claude Desktop overlay
Se sua organização também implanta Claude Desktop, o mesmo gateway serve ambos os clientes. ApontebootstrapUrl, na managed configuration do Claude Desktop, para <listen.public_url>/user/bootstrap. Claude Desktop deriva o emissor OAuth dessa URL, executa o mesmo sign-in de código de dispositivo contra este gateway e busca sua configuração da resposta.
Requer Claude Code v2.1.203 ou posterior no servidor do gateway, e uma opção explícita:
/user/bootstrap retorna 404 a menos que a política correspondendo o usuário carregue uma chave desktop. Um desktop: {} vazio opta uma política, e uma chave desktop na camada base match: {} opta em cada política que a herda. O log de auditoria registra cada requisição como desktop_bootstrap.serve ou desktop_bootstrap.denied.desktop de fora de suas políticas inteiramente; o gateway então retorna 404 de /user/bootstrap para cada usuário.
O gateway deriva grande parte da resposta de bootstrap do bloco cli ou code da política correspondente e da configuração de nível superior do gateway:
-
A lista de modelos, de
availableModels. Contexto estendido no Claude Desktop cobre a opção de contexto de 1M de cada modelo -
Ferramentas desabilitadas, de entradas
permissions.denyde nome de ferramenta simples. Se você definirdisabledBuiltinToolsno blocodesktopda política, o gateway serve a união de seu valor e a lista derivada, então você pode desabilitar mais ferramentas desta forma mas não pode reabilitar uma que você desabilitou através depermissions.deny -
A allowlist de egresso, de
sandbox.network.allowedDomains. Se você definircoworkEgressAllowedHostsno blocodesktopda política, o gateway usa esse valor em vez da lista derivada -
Um endpoint OTLP que aponta para o próprio gateway, e os atributos de identidade do usuário conectado. O gateway retransmite as exportações que recebe nesse endpoint para seus destinos
forward_to. Ele inclui o endpoint e os atributos quando você define tantotelemetry.forward_toquantolisten.public_url. Claude Desktop exporta cada sinal com uma codificação:http/protobuf, ouhttp/jsonquando você defineOTEL_EXPORTER_OTLP_PROTOCOLou uma de suas variantes por sinal parahttp/jsonnoenvda política. Antes de Claude Code v2.1.261 no servidor do gateway, a resposta definiahttp/jsonindependentemente, então um coletor que aceita apenas protobuf rejeitava as exportações do Claude Desktop
disabledBuiltinTools, coworkEgressAllowedHosts ou a configuração managedMcpServers própria do Claude Desktop em um bloco desktop de uma política, você precisa de Claude Code v2.1.232 ou posterior no servidor do gateway. O managedMcpServers do Claude Desktop toma um valor de array em vez de um objeto.
O gateway omite chaves sem equivalente do Claude Desktop, como hooks e regras de permissão com escopo como Bash(npm *), da resposta de bootstrap.
As configurações do Claude Code que uma política contém sob sua chave code se aplicam na aba Code do Claude Desktop quando todas estas condições são atendidas:
- A política também tem uma chave
desktop, e umdesktop: {}vazio conta - O Claude Desktop está na versão 2.9939.2 ou posterior
- As configurações gerenciadas do Claude Code na máquina nomeiam este gateway
- Essa máquina alcança o gateway via HTTPS em uma rede privada
cli para code. Quando as duas primeiras condições são atendidas e qualquer uma das duas últimas falha, um usuário correspondido pela política obtém um destes resultados:
- Via HTTPS, quando o Claude Desktop inclui o Claude Code v2.1.296 ou posterior: a aba Code não inicia, e a resposta ao prompt do usuário explica o motivo
- Via HTTPS, quando o Claude Desktop inclui uma versão anterior: a aba Code inicia sem suas configurações de
code, e nada na sessão indica isso - Via HTTP simples: a aba Code inicia sem suas configurações de
code, qualquer que seja a versão incluída no Claude Desktop
/managed/settings com seu próprio 404, a aba Code também inicia sem suas configurações de code, inclusive em uma máquina que atende às quatro condições.
Em uma política que tem uma chave desktop, um bloco code que contém configurações desativa a ferramenta WebSearch no Cowork, no Chat e na aba Code. Para servidores MCP, consulte Onde managedMcpServers se aplica.
Adicione o bloco desktop opcional ao lado de cli para definir configurações do Claude Desktop diretamente. Escreva configurações da managed configuration reference do Claude Desktop como nomes de chave simples. Deixe de fora chaves que Claude Desktop lê apenas de MDM ou arquivos locais, como bootstrapUrl; o gateway as rejeita na inicialização.
Este exemplo define três chaves do Claude Desktop para o grupo eng-contractors ao lado de suas configurações cli:
desktop na inicialização contra o esquema de configuração que o próprio Claude Desktop usa, então um erro aparece na inicialização do gateway como um erro nomeando a chave em vez de atingir cada desktop conectado. O gateway falha na inicialização quando um bloco contém:
- Uma chave desconhecida
- Uma chave reconhecida cujo valor Claude Desktop rejeitaria ou descartaria silenciosamente, como um valor vazio ou uma sub-chave digitada incorretamente dentro de uma entrada aninhada. Antes de v2.1.260, o gateway descartava silenciosamente um campo digitado incorretamente dentro de um objeto aninhado de uma entrada
managedMcpServersouorgPluginSettingsem vez de falhar na inicialização. - Uma chave que o gateway computa a si mesmo: a conexão de inferência, a lista de modelos e o relé OTLP. Configure aqueles através de
upstreams,modelse a seçãotelemetryforward_to. - Um alias legado de uma chave atual. No erro de inicialização, o gateway nomeia a chave canônica a escrever.
managedMcpServers sem transport, o gateway inicia e registra um aviso nomeando a substituição.
Antes de v2.1.232, o gateway aceitava uma lista fixa de 11 chaves de portão de recurso, como chatTabEnabled e disableAutoUpdates, e rejeitava cada outra chave na inicialização. Antes de v2.1.227, o gateway também rejeitava chatTabEnabled e chatAdvancedFileAnalysisEnabled na inicialização.
O gateway valida um bloco desktop contra o esquema agrupado com sua versão instalada, como faz com o bloco cli. Para entregar uma configuração introduzida por um lançamento mais novo do Claude Desktop, atualize o gateway primeiro. Por exemplo, userPluginMarketplacesEnabled e userPluginUploadsEnabled precisam de Claude Code v2.1.260 ou posterior no servidor do gateway e Claude Desktop 1.37937.0 ou posterior nas máquinas dos membros.
blockReadsOutsideWorkingDirectories, disableBypassPermissionsMode, configRecheckIntervalMinutes e sshClientPath precisam de Claude Code v2.1.281 ou posterior no servidor do gateway. O mesmo vale para o valor required de microsoftAuthBroker e o campo continuousAccessEvaluation de uma entrada managedMcpServers do Microsoft 365. Versões do Claude Desktop anteriores ao valor required o leem como disabled, então defina required somente depois que o Claude Desktop de cada membro o suportar. A managed configuration reference do Claude Desktop lista a versão que primeiro lê cada chave.
Se você definir orgPluginSettings em um bloco desktop de uma política, o gateway o serve na forma de array que Claude Desktop 1.15200.0 e posterior lê. Desktops mais antigos ignoram o array e não aplicam nenhuma política de ferramenta de plugin, então atualize membros para 1.15200.0 ou posterior antes de confiar nisso.
O gateway preenche chaves que um bloco desktop de uma política não define a partir do bloco desktop da captura match: {}, da mesma forma que preenche um bloco cli de uma política a partir da base. Se você definir disabledBuiltinTools ou builtinToolPolicy tanto na base quanto em uma política de função, o gateway mantém a restrição da base:
disabledBuiltinTools: o gateway usa a união da lista da base e da lista da políticabuiltinToolPolicy: se você definir uma ferramenta para um valor diferente deallowna base, o gateway mantém esse valor mesmo se você definirallowpara a mesma ferramenta em uma política de função
banner inteiro, então se você definir banner.text em uma política de função, o gateway descarta o banner.backgroundColor da base.
Depois que você reimplanta o gateway com uma política alterada, Claude Desktop aplica a maioria das configurações apenas na próxima vez que inicia:
- Fechado: Claude Desktop busca a resposta de bootstrap quando inicia, então a mudança se aplica a partir da próxima inicialização
- Aberto: Claude Desktop verifica se há uma resposta alterada a cada 10 minutos por padrão e aplica algumas configurações sem reiniciar. Para as demais, como
skillCreationEnabled, o usuário vê um cartão Relaunch Claude Desktop na barra lateral e mantém a configuração anterior até reiniciar o aplicativo. Após 24 horas por padrão, Claude Desktop mostra um diálogo de reinicialização e reinicia sozinho após 2 minutos de inatividade
relaunchEnforcementHours no bloco desktop da política. Você precisa de Claude Code v2.1.260 ou posterior no servidor do gateway e Claude Desktop 1.40609.0 ou posterior nas máquinas dos membros. Com 0, o diálogo aparece assim que Claude Desktop encontra a mudança.
Contexto estendido no Claude Desktop
Se você serve o Claude Desktop a partir do gateway, seu seletor de modelos oferece uma opção de contexto de 1M para cada modelo listado que pode ser executado com uma janela de contexto de 1M. Estes incluem Claude Opus 4.6 e posterior, Claude Sonnet 4.6 e posterior, e os modelos Fable. A opção é a variante[1m] do modelo, que Extended context descreve. Você precisa de Claude Code v2.1.284 ou posterior no servidor do gateway.
Uma entrada models não recebe nenhuma opção de 1M quando:
- Um upstream que pode servir a entrada a mapeia para um modelo sem suporte a 1M, incluindo um upstream que o gateway alcança apenas em failover
- Nem seu
idnem nenhum de seus valoresupstream_modelnomeia um modelo Claude, como um alias personalizado roteado para um ARN de perfil de inferência de aplicação
- Iniciar usuários na opção de 1M: defina
modelPrefer1mContext: trueno blocodesktopda política. Usuários que ainda não escolheram um modelo começam na opção de 1M quando o primeiro modelo listado tem uma. Usuários que já escolheram um modelo mantêm sua escolha. - Oferecer a opção manualmente: faça isto se seu servidor do gateway executa uma versão anterior a v2.1.284, ou se uma entrada não nomeia nenhum modelo Claude. Liste o modelo duas vezes em
models, uma vez com seu ID simples e uma vez com[1m]anexado, ambas com o mesmo mapaupstream_model. Claude Desktop mostra o par como um modelo com uma opção de 1M. O gateway serve uma entrada[1m]sem verificá-la, então adicione uma apenas para um modelo que seus upstreams servem com 1M.
CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" no bloco env sob a chave cli da política. Se você também listou uma entrada cujo id termina em [1m], o gateway ainda a serve, então exclua essa entrada também.
A variável também alcança as sessões de terminal dos desenvolvedores que a política corresponde. Para saber o que ela muda lá, veja Extended context.
Precedência com outras fontes gerenciadas
Se um dispositivo também tem uma política entregue por MDM ou ummanaged-settings.json local, as configurações entregues pelo gateway classificam primeiro. Precedence within the managed tier na página de configurações gerenciadas diz quando as fontes locais se aplicam, e tem as chaves que Claude Code lê de cada fonte de administrador independentemente de qual fonte selecionou, como as chaves de bloqueio de sandbox, forceRemoteSettingsRefresh e o env por variável mesclado. Um policyHelper configurado em um perfil MDM ou no arquivo de configurações gerenciadas é executado apenas quando o gateway não entrega configurações; a entrada diz o que sua saída substitui.
Hosts de incorporação como Claude Desktop podem fornecer política através da opção SDK managedSettings. Parent settings from embedding hosts diz quando Claude Code a aplica, e Restrict parent settings lista quais configurações de direção de permissão ainda se aplicam sem os bloqueios allowManaged*Only.
As políticas do gateway se aplicam a cada invocação do Claude Code na máquina, incluindo execuções não interativas claude -p e sessões geradas pelo Agent SDK. Se o gateway estiver inacessível na inicialização, sessões conectadas saem com um erro em vez de executar sem sua política.
telemetry
O CLI envia métricas, logs e, quando habilitado, rastreamentos para o gateway, que os retransmite verbatim para cada destino configurado. As exportações usam OpenTelemetry Protocol (OTLP) sobre HTTP. Para pular o relé e ter sessões exportar diretamente para seu coletor, nomeie o coletor em uma política. Veja Monitoring usage para as métricas e eventos que o CLI emite.
Em sessões conectadas por meio de /login, a CLI marca cada exportação com a identidade do usuário autenticado, lida do JWT emitido pelo gateway: os atributos user.id, user.email e user.groups. A atribuição de custo e uso por desenvolvedor, portanto, funciona sem nenhuma configuração do lado do desenvolvedor. Eventos que o Claude Code registra em log antes de o desenvolvedor fazer login não carregam essa identidade. Para ver qual atributo acompanha uma alteração nos grupos de um desenvolvedor, consulte Alterações de grupo durante uma sessão aberta.
Claude Desktop e sessões Cowork conectadas através do gateway carimbam sua telemetria com user.email e user.groups ao lado de enduser.id, então você pode cobrir uso de terminal, Desktop e Cowork com uma consulta em user.email ou user.groups. user.groups é a lista de grupo do IdP separada por vírgula.
Desktop e telemetria Cowork também carregam enduser.sub, a declaração sub que seu provedor de identidade emite para o usuário, que permanece a mesma quando o email de um usuário muda. Sessões de terminal carimbam o mesmo valor sob user.id, então uma consulta que corresponde enduser.sub contra user.id de terminal cobre uso de terminal, Desktop e Cowork de um usuário junto. Em exportações Desktop e Cowork, user.id é um identificador anônimo, não o assunto.
Como todos os dados OpenTelemetry do Claude Code, estes atributos vão apenas para destinos que sua organização configura, nunca para Anthropic.
Se a lista de grupos de um usuário é mais longa que 255 caracteres uma vez codificada em percentual, ou um nome de grupo contém uma vírgula ou sinal de igual, o gateway deixa user.groups de fora da telemetria Desktop e Cowork desse usuário em vez de truncá-la. As sessões de terminal desse usuário ainda carregam a lista completa.
O gateway deixa enduser.sub de fora quando o assunto é mais longo que 255 caracteres uma vez codificado em percentual, ou contém um espaço, um caractere fora de ASCII imprimível, ou um de , ; = \ " %. A telemetria Desktop e Cowork desse usuário mantém seus outros atributos.
Você precisa de Claude Code v2.1.265 ou posterior no servidor do gateway para user.email e user.groups na telemetria Desktop e Cowork, e Claude Desktop 1.24012 ou posterior em cada máquina do desenvolvedor para user.groups.
Você precisa de Claude Code v2.1.274 ou posterior no servidor do gateway para enduser.sub.
forward_to deve usar https://, com uma exceção para um coletor na própria interface de loopback do gateway:
http://localhost:<port>passa validação de configuração, mas a SSRF guard bloqueia cada exportação comECONNREFUSED_SSRFa menos que você definaCLAUDE_GATEWAY_ALLOW_LOOPBACK=1no ambiente do gatewayhttp://127.0.0.1:<port>ouhttp://[::1]:<port>falha na inicialização a menos que essa variável esteja definida
HTTPS_PROXY está definido, o gateway envia exportações através desse proxy.
Para alcançar um coletor interno diretamente, adicione-o a NO_PROXY por nome de host ou por um domínio com um ponto inicial como .internal.example.com, que requer Claude Code v2.1.277 ou posterior no servidor do gateway. Certifique-se de que o gateway pode alcançar o coletor sem o proxy. Uma entrada sem um ponto inicial corresponde apenas a esse nome exato, não a nomes sob ele. Intervalos CIDR não correspondem.
Com proxy-only egress ligado, permita o coletor no proxy em vez disso, já que qualquer entrada NO_PROXY mantém proxy-only egress desligado.
Telemetria está desligada no CLI por padrão. Quando você define tanto telemetry.forward_to quanto listen.public_url, o gateway a liga para clientes conectados empurrando seis variáveis de ambiente através de /managed/settings:
CLAUDE_CODE_ENABLE_TELEMETRY=1OTEL_METRICS_EXPORTER,OTEL_LOGS_EXPORTEReOTEL_TRACES_EXPORTER, cada um definido paraotlpse pelo menos um destinoforward_tohabilita esse sinal e paranonecaso contrárioOTEL_EXPORTER_OTLP_ENDPOINT=<public_url>OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_RESOURCE_ATTRIBUTES.
Antes de Claude Code v2.1.265 no servidor do gateway, o gateway empurrava todos os três seletores de exportador como otlp, incluindo para sinais que nenhum destino optou.
O endpoint empurrado é construído a partir da URL pública, então métricas e logs não precisam de nenhuma configuração OTEL de desenvolvedores ou políticas.
Desenvolvedores conectados através de /login não podem redirecionar exportações com sua própria configuração OTEL:
- Variáveis definidas localmente: Claude Code aplica as variáveis empurradas na camada gerenciada, então cada uma sobrescreve o valor que um desenvolvedor define para ela localmente.
- Endpoints configurados localmente: com exportação OTLP/HTTP habilitada, o CLI ignora qualquer endpoint configurado localmente, independentemente de o gateway ter empurrado as variáveis de telemetria. Suas exportações vão para o gateway a menos que uma política nomeie seu coletor como o endpoint.
forward_to para um sinal, o gateway o aceita e descarta. Se desenvolvedores já exportam telemetria do Claude Code para um de seus coletores, adicione-o como um destino forward_to, com logs ou rastreamentos habilitados se eles exportarem aqueles, então continua recebendo seus dados depois que eles se conectam. Para pular o relé em vez disso, nomeie o coletor em uma política.
Traces também requerem CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 em cada cliente. Defina-o no bloco env de uma política gerenciada, já que o gateway não o empurra. Desenvolvedores o aprovam no mesmo security approval dialog que o endpoint empurrado já aciona.
Defina-o para 1 apenas nas políticas cujos grupos você quer rastreados. Uma política que não o define herda o valor de sua política de captura match: {} se essa política define um, por merge rules. Para impedir que os clientes de um grupo enviem rastreamentos mesmo quando um desenvolvedor define a variável localmente, defina-a para 0 na política desse grupo.
Ambas as codificações OTLP protobuf e JSON são retransmitidas, e qualquer backend compatível com OpenTelemetry funciona como um destino.
Adicionar seus próprios rótulos
Para colocar rótulos fixos comoservice.namespace ou deployment.environment.name na telemetria de sessões conectadas através do gateway, defina telemetry.resource_attributes. Cada rótulo é um atributo de recurso OpenTelemetry, e cada destino recebe os mesmos rótulos.
Sessões obtêm os rótulos apenas quando você também define telemetry.forward_to e listen.public_url. Este exemplo adiciona dois rótulos:
- Nomes usam apenas letras, dígitos,
.,_e- - Nomes não são reservados. Comparados em qualquer caso de letra, os nomes reservados são tudo que começa com
user.,enduser.ouidentity., maisservice.name,service.version,claude.deployment_mode,host.arch,os.type,os.versionewsl.version - Valores são ASCII imprimível não vazio sem espaço e nenhum de
, ; = \ " % - Valores são no máximo 255 caracteres conforme o gateway os conta após codificação em percentual, então
/,:e@cada um contam como três - Valores são texto, então cite um número,
trueoufalse
telemetry.resource_attributes. Um gateway anterior se recusa a iniciar quando encontra a chave. Atualize cada réplica antes de adicionar a chave e remova a chave antes de fazer rollback para uma versão anterior.
Sessões de terminal conectadas através de /login recebem os rótulos como OTEL_RESOURCE_ATTRIBUTES, empurrados com as outras telemetry variables. Se você definir OTEL_RESOURCE_ATTRIBUTES no bloco env de uma política, sessões de terminal que essa política corresponde obtêm esse valor em vez dos rótulos. Claude Desktop recebe os rótulos do gateway ao lado de user.email e dos outros atributos de identidade.
Claude Code também copia cada rótulo em cada ponto de dados de métrica, então você pode filtrar métricas por ele em um backend que não indexa atributos de recurso. Para desligar essa cópia, veja Metrics cardinality control.
Group changes during an open session
Sessões de terminal colocamuser.groups no recurso OTLP e novamente em cada ponto de dados de métrica e evento. Se os grupos de um desenvolvedor mudarem enquanto uma sessão está aberta, os pontos de dados e eventos de uso após a próxima atualização silenciosa carregam os novos grupos. O recurso mantém os grupos antigos até que o desenvolvedor reinicie o Claude Code, então agrupe pelo atributo no ponto de dados ou no evento.
Se você ativar resource_to_telemetry_conversion no exportador Prometheus remote write do OpenTelemetry Collector, o exportador substitui o user.groups de cada ponto de dados pelo do recurso, então todos os pontos de dados mostram os grupos antigos. Para manter o valor do ponto de dados, exclua user.groups do recurso antes desse exportador.
Este processador resource do OpenTelemetry Collector exclui o atributo nos pipelines que o listam:
resource/drop-user-groups aos processors do pipeline de métricas, cada série carrega o rótulo user_groups de seu próprio ponto de dados.
Exportar diretamente para seu coletor
Para ter sessões conectadas através de/login enviar telemetria diretamente para seu coletor em vez de através do relé, defina OTEL_EXPORTER_OTLP_ENDPOINT para a URL base https:// do coletor no bloco env de uma managed policy. Claude Code anexa /v1/metrics, /v1/logs ou /v1/traces à URL que você define, como https://otel-collector.example.com:4318, e exporta cada sinal lá sobre OTLP/HTTP. Requer Claude Code v2.1.265 ou posterior em cada máquina do desenvolvedor. Clientes anteriores exportam através do relé.
Para autenticar para o coletor, defina OTEL_EXPORTER_OTLP_HEADERS no mesmo bloco env. Sessões nunca enviam o token de sessão do gateway do desenvolvedor para um coletor nomeado desta forma.
Quando você adiciona ou muda este endpoint em uma política, Claude Code pede a cada desenvolvedor para aprová-lo no security approval dialog antes de aplicá-lo em uma sessão interativa.
Claude Code verifica o endpoint antes de exportar um sinal diretamente, e mantém esse sinal no relé quando uma verificação falha. As verificações incluem:
- O endpoint vem do próprio gateway. Se você definir a mesma variável em um perfil MDM ou um
managed-settings.jsonlocal, exportações permanecem no relé. - A URL usa
https://, ouhttp://para um endereço de loopback - A URL resolve para um caminho terminando em
/v1/<signal>, sem consulta ou fragmento. Claude Code constrói esse caminho a si mesmo a partir da variável genérica. Ele usa uma variável por sinal comoOTEL_EXPORTER_OTLP_METRICS_ENDPOINTconforme escrito, então inclua o caminho completo lá. - A URL não é o próprio host do gateway. Um endpoint endereçado ao gateway mantém o caminho de relé e seu token de sessão.
- Nem você nem o desenvolvedor configurou
otelHeadersHelperem nenhuma fonte de configurações. Com um helper configurado, cada sinal permanece no relé.
OTEL_*_EXPORTER.
O endpoint sozinho não liga a exportação, então também defina as variáveis que fazem, a menos que o gateway já as empurre:
- Se o gateway já empurra as variáveis de telemetria, elas cobrem habilitação, seletores e protocolo, e seu endpoint explícito sobrescreve o valor
<public_url>empurrado. Defina um seletorOTEL_*_EXPORTERparaotlpvocê mesmo apenas para um sinal que nenhum destinoforward_tohabilita. - Se não, também defina
CLAUDE_CODE_ENABLE_TELEMETRY=1, os seletoresOTEL_*_EXPORTEReOTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf.
Quando um destino falha
O gateway não armazena em buffer, tenta novamente ou armazena telemetria, então descarta uma exportação que não atinge um destino em vez de entregá-la tarde. Cada destino sucede ou falha por conta própria, e o cliente exportador recebe uma resposta de sucesso de qualquer forma, então uma entrega falhada aparece apenas no log do gateway. Após cinco falhas consecutivas de entrega para um destino, o gateway pausa o encaminhamento para ele em trechos de 30 segundos, registrando cada pausa, até que uma entrega suceda. Qualquer resposta de erro, timeout ou erro de conexão conta como uma falha de entrega, exceto400, 413, 415, 422 e 431, que significam que o coletor rejeitou o payload dessa exportação como malformado ou muito grande.
Um payload rejeitado nem avança nem reseta a contagem de falhas: o gateway continua encaminhando para o destino e registra um aviso nomeando-o e o status, na primeira recusa do destino e a cada centésima depois.
HTTP tuning
Quatro blocos opcionais de nível superior,access_control, limits, timeouts e rate_limits, ajustam a superfície HTTP. Os padrões se adequam à maioria das implantações.
Se você deixar ambas as listas
access_control vazias, que é o padrão, o gateway serve qualquer endereço de cliente, então apenas sua rede restringe quem pode alcançá-lo. Isto importa porque um gateway pode empurrar managed settings que executam comandos em máquinas de desenvolvedores.
Enquanto allow_cidrs está vazio, o gateway avisa em dois lugares, sem mudar como responde a qualquer requisição:
- Na inicialização: um aviso no log operacional recomenda permitir apenas os intervalos privados
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,100.64.0.0/10,127.0.0.0/8,::1/128efc00::/7, mais qualquer outro intervalo interno de onde seus desenvolvedores se conectam. Se você vincular o gateway a um endereço de loopback e não definir nemtrusted_proxiesnempublic_url, como em desenvolvimento local, o aviso não aparece. - Em tempo de execução: a primeira vez que uma requisição chega de um endereço fora desses intervalos privados, o gateway registra um aviso e emite um
access.public_clientaudit event carregando o IP do cliente. Ambos disparam uma vez por processo. Endereços link-local,169.254.0.0/16efe80::/10, não contam como públicos. O gateway responde/healthze/readyzantes desta verificação ser executada, então sondas de saúde de intervalos públicos não a acionam.
listen.trusted_proxies, o gateway vê o endereço do relé, que é geralmente privado, então nem o aviso em tempo de execução nem uma allowlist privada o captura.
Atrás de tal front end, defina listen.trusted_proxies primeiro para que o gateway veja endereços de cliente reais, e mantenha o gateway e tudo na frente dele inacessível da internet pública independentemente.
load_test_mode
O bloco load_test_mode permite que você teste a carga de um gateway sem chamar um provedor de modelo. Enquanto está ligado, o gateway constrói e assina cada requisição de provedor como de costume, descarta-a em vez de enviá-la e transmite uma resposta enlatada de volta através de seu caminho de resposta normal. A resposta é texto de preenchimento que começa com uma frase dizendo que é enlatada.
Requer Claude Code v2.1.282 ou posterior no servidor do gateway. Um gateway anterior se recusa a iniciar quando encontra a chave. Atualize cada réplica antes de adicionar o bloco e remova o bloco antes de fazer rollback.
O exemplo abaixo liga o modo com os padrões, uma resposta de aproximadamente 750 tokens de texto transmitida em cerca de 10 segundos:
Um teste de carga neste modo cobre o gateway, seu Postgres e tudo na frente do gateway. Não cobre os limites, velocidade ou caminho de rede do provedor.
Nenhuma requisição de modelo é enviada ao provedor, então a CPU de uma réplica por requisição é uma estimativa e lê mais baixo que a produção, que também criptografa seu tráfego para o provedor. Confirme uma contagem de réplica com um pequeno piloto contra o provedor real. Antes de v2.1.283, a estimativa lê muito mais baixo.
Enquanto o modo está ligado, uma requisição pode carregar um cabeçalho
x-load-test-user contendo um número inteiro de até sete dígitos. O gateway conta cada número como um desenvolvedor separado, com o email e grupos do desenvolvedor cujo token veio com a requisição.
Dê à implantação de teste de carga seu próprio banco de dados vazio, porque o gateway se recusa a iniciar com o modo ligado contra um banco de dados no qual qualquer desenvolvedor já gastou algo.
Exemplo completo
Esta configuração de referência completa exercita cada seção principal; os blocos de ajuste HTTP mantêm seus padrões. Copie-a, delete o que você não precisa e preencha seus valores. A configuração no Quickstart é uma versão mínima desta.gateway.yaml
Configurações gerenciadas no lado do cliente
Tudo acima configura o servidor gateway. Você aponta máquinas de desenvolvedores para o gateway separadamente, em cada dispositivo, através das configurações gerenciadas do Claude Code. O gateway não pode enviar as chaves de login por si só, porque são elas que dizem ao cliente onde o gateway está. Para a CLI, defina essas chaves nomanaged-settings.json por SO. As duas chaves de login encaminham cada /login do desenvolvedor para seu gateway:
parentSettingsBehavior: "merge" mantém a entrega da allowlist de saída do Claude Desktop para suas sessões incorporadas do Claude Code funcionando; Deliver policy to Claude Desktop sessions explica o mecanismo e onde a aceitação deve estar.
Para impedir que os desenvolvedores contornem o gateway com uma variável de provedor de nuvem ou um ANTHROPIC_BASE_URL próprio, adicione "allowedProviders": ["gateway"] ao mesmo arquivo. O Claude Code então recusa toda sessão na máquina que não esteja configurada para um Cloud gateway, e admite um gateway apenas quando ele é aquele que forceLoginGatewayUrl nomeia ou um cuja URL o bloco env do arquivo define como ANTHROPIC_BASE_URL. claude gateway se recusa a ser executado em uma máquina que define a lista, portanto mantenha a chave fora do host do gateway. Veja a entrada allowedProviders na referência de configurações. Requer Claude Code v2.1.285 ou posterior.
Implante o arquivo managed-settings.json em cada dispositivo, normalmente através de sua plataforma MDM. O caminho do arquivo difere por plataforma. Veja onde cada mecanismo armazena a política.
Por padrão, uma política de registro no Windows ou um plist de preferências gerenciadas no macOS substitui o arquivo managed-settings.json em vez de mesclar com ele, exceto pelas chaves de exceção e verificações entre fontes acima. Todas as três chaves neste trecho seguem a regra de fonte de prioridade mais alta, portanto frotas que entregam política através de Group Policy ou perfis de configuração devem colocar todas as três nesse mecanismo.
Para Claude Desktop, defina a chave bootstrapUrl na própria configuração gerenciada do Claude Desktop como <listen.public_url>/user/bootstrap. O fluxo de entrada e a política por grupo correspondem aos da CLI uma vez que uma política aceita no servidor com uma chave desktop; sem a aceitação, /user/bootstrap retorna 404. Veja Claude Desktop overlay para a metade do servidor.
Claude Code honra forceLoginGatewayUrl, gatewayInternalNetworks e o valor "gateway" de forceLoginMethod de uma fonte gerenciada na máquina: managed-settings.json, o plist do macOS ou registro HKLM do Windows, ou um auxiliar de política. Defini-los no payload do gateway não configura o login no gateway. Para o próprio ~/.claude/settings.json de um desenvolvedor, veja Definir a URL do gateway nas configurações do usuário.
Deixe forceLoginMethod e forceLoginOrgUUID fora do payload. O Claude Code ainda lê ambas as chaves do payload para sua verificação de credenciais na inicialização, portanto um desenvolvedor que mantém uma credencial emitida pela Anthropic na máquina recebe a saída na inicialização descrita em Administrator policy requires a Cloud gateway sign-in mesmo depois de fazer login.
Relacionado
- Visão geral do gateway de aplicativos Claude: quickstart e conexão de desenvolvedor
- Guia de implantação: configuração de IdP, imagem de contêiner, Kubernetes e Cloud Run e operações
- Limites de gastos: limites por desenvolvedor e a API de Administração