As estações de trabalho deixam de falar com a Anthropic, a OpenAI ou o Google. Elas falam com um nome interno, e o gateway faz o resto: identidade, orçamento, DLP, trilha e roteamento, sem o desenvolvedor perceber.
Estação do desenvolvedor (Claude Code, Cursor, SDKs, scripts e agentes. Mandam uma chave virtual.) -> llm.empresa.com (Atlasberg Platform. Governança, custos, DLP, trilha, roteamento.) -> Provedores (api.anthropic.com, api.openai.com, generativelanguage. Recebem a chave real.). O firewall bloqueia o caminho pontilhado: as estações não alcançam os provedores diretamente. Só o gateway alcança.
É a credencial que a pessoa, o agente ou o pipeline usa contra o gateway. Sempre começa com o prefixo sk-atlas-. Cada chave carrega os provedores e modelos permitidos (lista vazia nega tudo; o padrão é negar), orçamento em dólar com período de reset, limite de uso em tokens e requisições por janela, expiração opcional, estado ativo ou inativo, e as ferramentas MCP que pode executar.
A hierarquia é cliente > time > chave virtual. Uma chave pertence a um time, e o time pode pertencer a um cliente. Cada nível tem orçamento e limite próprios, e a avaliação segue a ordem chave, cliente, time. Não existe uma entidade "usuário" dona de chave: para dar chave a uma pessoa, você cria uma chave com o nome dela dentro do time dela. A chave passa a ser o identificador da pessoa em custos, trilha, Economômetro e chargeback. O Tutorial 3 mostra como o login único substitui essa chave por pessoa por um token pessoal.
O prefixo é obrigatório nos headers dos SDKs por decisão de projeto: uma chave de provedor nunca é confundida com uma chave virtual.
O cliente pode mandar o modelo sem prefixo, como claude-sonnet-5. O catálogo de modelos resolve o provedor. Com prefixo, como anthropic/claude-sonnet-5, a escolha é explícita. Se o catálogo não conhece o modelo e não há prefixo, o gateway responde 400 pedindo o provedor.
Trabalho da infra, feito uma vez. Ao fim desta parte o gateway está publicado na rede, com as chaves reais dos provedores e um modelo padrão.
Sobre TLS interno: Se o certificado for da CA corporativa e o Claude Code reclamar de certificado, aponte a variável NODE_EXTRA_CA_CERTS para o bundle PEM da CA no arquivo gerenciado. Isso vale para qualquer ferramenta em Node.
Escolha um nome como llm.empresa.com. O certificado pode ser da CA corporativa, desde que essa CA esteja instalada em todas as estações. Claude Code, Cursor e SDKs validam o certificado como qualquer cliente HTTPS. Se preferir, um certificado público resolve sem depender do MDM.
No console, em Modelos > Provedores, adicione a chave da Anthropic, da OpenAI e de quem mais a empresa usa. Prefira credencial por variável de ambiente, que fica fora do arquivo de estado do appliance. Marque os modelos habilitados. Isso alimenta o catálogo que resolve nomes sem prefixo.
No firewall, o gateway pode alcançar api.anthropic.com, api.openai.com, generativelanguage.googleapis.com e os demais. O resto da rede não. Faça essa regra antes de anunciar o gateway, para que ninguém dependa de um caminho que vai fechar.
O gateway sai de fábrica exigindo chave virtual em toda inferência (enforce_auth_on_inference). Mantenha assim. A leitura é fail-closed: valor ausente é tratado como "exigir". Você pode conferir o valor efetivo em GET /api/config, no bloco enforcement.
O flag allow_direct_keys permite que um cliente traga a própria chave de provedor com o header x-atlasberg-direct-key: true e ignore o pool cadastrado. Isso derrota a regra número um. Deixe desligado.
Em Modelos > Regras de roteamento, crie uma regra de escopo global com a expressão CEL true e um alvo com o provedor e o modelo desejados. Toda requisição passa a cair nesse modelo, independentemente do que o cliente pediu. Se quiser algo mais fino, use uma expressão que casa só requisições sem preferência, ou uma regra por time.
O gateway classifica cada prompt em um tier de complexidade. Uma regra que referencia complexity_tier manda tarefa simples para modelo barato e tarefa pesada para modelo forte. Combine com o modelo padrão: a regra por complexidade vem primeiro, o padrão fecha o resto.
curl -s https://llm.empresa.com/api/config | jq .enforcement
# { "enforce_auth_on_inference": true, "allow_direct_keys": false }Aqui nasce a atribuição. Sem ela o gateway ainda governa, mas não sabe dizer quem gastou.
Autoatendimento: Qualquer pessoa pode consultar a própria cota sem acesso administrativo, apresentando só a chave: GET /api/governance/virtual-keys/quota com o header x-atlasberg-vk. Vale para um script de status na barra do terminal.
Em Governança > Clientes, cadastre unidades de negócio, subsidiárias ou contas que precisam de fatura separada. Uma empresa pequena pode pular este passo.
Em Governança > Times, crie um time por área (Engenharia, Produto, Marketing). Dê a cada time um orçamento mensal e, se quiser, um limite de tokens por dia. Os orçamentos dos times são o que a tela de Custos e o Painel executivo somam.
Em Governança > Chaves virtuais, crie a chave com o nome da pessoa (eng-maria), atribua ao time, marque os provedores e os modelos permitidos, defina orçamento e expiração. Copie o valor sk-atlas-...: ele aparece uma vez. Agentes, pipelines de CI e bots recebem chave própria, nunca a chave de uma pessoa. Se a lista de modelos permitidos ficar vazia, a chave nega tudo; marque pelo menos um modelo por provedor.
Em Custos > Orçamentos, defina um orçamento mensal por unidade, time ou pessoa que, ao estourar, degrada para um modelo mais barato em vez de negar a requisição. A precedência é pessoa, depois time, depois unidade. Atenção: o modelo barato precisa estar na lista de permitidos da chave. Se não estiver, o gateway não reescreve, registra o evento budget.degrade_blocked e avisa no painel.
O jeito certo de a chave chegar à máquina é o provisionamento: MDM, script de onboarding ou secret do gerenciador de senhas corporativo. A pessoa não deve colar chave em lugar nenhum. O Tutorial 2 mostra como o Claude Code lê a chave sem que ninguém a veja, e o Tutorial 3 substitui a chave pelo login único.
Quatro chamadas com curl provam a implantação de ponta a ponta. Depois, os erros que mais aparecem e o que cada um significa.
curl -s https://llm.empresa.com/health
# {"status":"ok",...}curl -s https://llm.empresa.com/anthropic/v1/messages \
-H "x-api-key: sk-atlas-..." \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":32,
"messages":[{"role":"user","content":"responda apenas ok"}]}'curl -s https://llm.empresa.com/api/governance/virtual-keys/quota \
-H "x-atlasberg-vk: sk-atlas-..."curl -s --max-time 5 https://api.anthropic.com/v1/models
# curl: (28) Connection timed outSe preferir delegar, cole o prompt abaixo no Claude Code ou em outro agente de IA com acesso ao terminal. Ele foi escrito para perguntar tudo o que precisa antes de mexer em qualquer coisa, mostrar um plano, esperar a sua confirmação e só então executar. Ele nunca pede o valor de uma chave de provedor e nunca grava segredo em arquivo do repositório.
Duas variáveis, um arquivo gerenciado e o script de credencial que mantém a chave invisível.
Configure o SSO e o login por dispositivo para as pessoas entrarem com a identidade corporativa, do terminal.
Você é meu engenheiro de infraestrutura e vai configurar a Atlasberg Platform como o gateway único de IA da empresa, seguindo o tutorial https://atlasberg.com/docs/tutoriais/gateway-da-empresa e a referência da API de gestão em https://atlasberg.com/docs/api/gestao. Trabalhe pela API do gateway com curl. Nunca invente valores: tudo o que não estiver abaixo, pergunte.
Antes de fazer qualquer coisa, me pergunte, uma pergunta por vez, e espere a resposta:
1. A URL do gateway (exemplo: https://llm.empresa.com) e como autenticar na API de gestão (usuário e senha de administrador, ou um token). Nunca repita a senha de volta na conversa nem a grave em arquivo.
2. Quais provedores a empresa usa (Anthropic, OpenAI, Google, outros) e, para cada um, o NOME da variável de ambiente do appliance onde a chave real está. Não me peça o valor da chave. Se eu colar uma chave por engano, avise e peça para eu rotacioná-la.
3. Os modelos que devem ficar habilitados em cada provedor e qual deve ser o modelo padrão da empresa.
4. Se existem unidades de negócio ou clientes que precisam de fatura separada, com nome e orçamento mensal em dólar. Se não existirem, pule.
5. Os times: nome, orçamento mensal em dólar, limite de tokens por hora (opcional) e a que unidade pertencem.
6. As pessoas, agentes e pipelines de cada time que precisam de chave própria, e os modelos permitidos para cada um. Uma chave por pessoa, uma por agente ou pipeline, nunca compartilhada.
7. Se quero corte suave (ao estourar o orçamento, degradar para um modelo mais barato em vez de negar) e qual é o modelo barato. Ele precisa estar na lista de permitidos de cada chave.
8. Se o gateway usa certificado de uma CA corporativa.
Quando tiver tudo, mostre um plano resumido em tabela (provedores, unidades, times, chaves, regra de modelo padrão) e peça a minha confirmação. Só então execute, nesta ordem, conferindo o código de status de cada resposta e parando no primeiro erro:
a) GET /api/config: confira que enforcement.enforce_auth_on_inference é true e allow_direct_keys é false. Se não for, me avise antes de mudar qualquer coisa.
b) Provedores: GET /api/providers para ver o que já existe; POST /api/providers com {"provider":"<nome>"} para os que faltam. Para a chave, leia primeiro a resposta de GET /api/providers/<nome> e a referência da API para saber o formato exato do campo value, e cadastre a chave por referência à variável de ambiente, nunca pelo valor, em POST /api/providers/<nome>/keys, com os modelos habilitados e weight 1.
c) Unidades: POST /api/governance/customers com {"name":"...","budgets":[{"max_limit":<usd>,"reset_duration":"1M"}],"calendar_aligned":true}.
d) Times: POST /api/governance/teams com {"name":"...","customer_id":"<id da unidade>","budgets":[{"max_limit":<usd>,"reset_duration":"1M"}],"calendar_aligned":true} e, se houver limite, "rate_limit":{"token_max_limit":<n>,"token_reset_duration":"1h"}.
e) Chaves virtuais: POST /api/governance/virtual-keys com {"name":"eng-maria","description":"...","team_id":"<id do time>","provider_configs":[{"provider":"anthropic","allowed_models":["claude-sonnet-5"],"key_ids":["*"]}],"is_active":true} e, se houver, "budgets":[...]. Guarde o campo value de cada resposta e me entregue todas as chaves UMA única vez, num bloco separado no fim, avisando que elas não aparecem de novo. Não grave as chaves em arquivo nenhum.
f) Modelo padrão: POST /api/governance/routing-rules com {"name":"Modelo padrão da empresa","description":"Quem não escolhe modelo cai aqui","cel_expression":"true","targets":[{"provider":"<provedor>","model":"<modelo>","weight":1}],"scope":"global","priority":100,"enabled":true,"chain_rule":false}.
g) Corte suave, se eu tiver pedido: configure em Custos > Orçamentos no console, ou pela API correspondente da referência; confirme que o modelo barato está permitido em todas as chaves.
h) Testes: GET /health; POST /anthropic/v1/messages com uma das chaves no header x-api-key e um pedido de 32 tokens; GET /api/governance/virtual-keys/quota com o header x-atlasberg-vk. Mostre as respostas resumidas.
i) Entregue o checklist de implantação do tutorial preenchido, marcando o que ficou pendente fora do gateway: nome interno com TLS, regra de firewall que bloqueia a saída direta das estações para os provedores, distribuição das chaves pelo MDM ou script de onboarding, e a variável NODE_EXTRA_CA_CERTS se a CA for corporativa.
Regras: se um endpoint responder diferente do esperado, mostre a resposta e pergunte antes de contornar. Não crie chave sem time. Não habilite chaves diretas de provedor. Não desligue a exigência de chave virtual.A Atlasberg Platform é a camada de controle entre uma empresa e todos os modelos de IA: cada requisição é autenticada com uma chave virtual, filtrada por política e DLP, roteada para o provedor certo e gravada numa trilha de auditoria encadeada por hash. Expõe uma API compatível com a OpenAI, então as aplicações só trocam a URL base.
O mesmo artefato roda na Atlasberg Cloud, na sua VPC, on-premises ou totalmente air-gapped, e é cobrado por capacidade e módulos, nunca por assento.
Esta página faz parte da documentação oficial. Para falar com o time de engenharia, escreva para [email protected] ou use https://atlasberg.com/pt-br/contato. A resposta vem em até um dia útil.
Agentes: esta página também está disponível em Markdown em /pt-br/docs/tutoriais/gateway-da-empresa.md, ou pedindo esta URL com o cabeçalho Accept: text/markdown. Índice de tudo: /llms.txt.