Segurança e auditoria no Kubepier
A auditoria do Kubepier registra quem alterou o quê, em que cluster e quando, e o Kubepier Web conecta nos seus clusters e serviços sempre a partir de IPs de saída fixos. Libere só esses IPs na API do Kubernetes, no MongoDB Atlas, no Azure Service Bus, no RabbitMQ e no Redis, e esses endpoints continuam fechados para o resto da internet. Abaixo, o que isso garante, o que não garante e o resto do que protege o acesso.
IPs de saída do Kubepier Web
A lista de IPs aparece aqui e no app, no menu Rede e segurança.
Os mesmos IPs valem para todos os clientes do Kubepier Web. Libere todos os da lista.
Onde liberar os IPs
Cada serviço tem a própria lista de IPs autorizados. Inclua os IPs do Kubepier junto com os das suas redes (escritório, VPN, CI) que já estão lá.
| Serviço | Onde liberar |
|---|---|
| AKS | Authorized IP ranges da API server: no portal, na rede do cluster, ou com az aks update --api-server-authorized-ip-ranges. |
| EKS | Public access CIDRs do endpoint público: no console, na rede do cluster, ou com aws eks update-cluster-config. |
| GKE | Master authorized networks (redes autorizadas do plano de controle): no console ou com gcloud container clusters update. |
| Outros clusters e on-premises | Firewall ou security group na frente da API do Kubernetes (em geral a porta 6443 ou 443). |
| MongoDB Atlas | No portal: Network Access → IP Access List → Add IP Address. |
| Azure Service Bus | No portal: o namespace → Networking → Selected networks, e adicione os IPs no firewall. Confira se a camada do namespace aceita regras de IP. |
| RabbitMQ | Firewall ou security group do servidor, para a porta da API de gerenciamento (a URL cadastrada no cliente). Em RabbitMQ gerenciado, na lista de IPs do provedor, no portal. |
| Redis | Firewall ou security group do servidor, ou a lista de IPs do serviço gerenciado, no portal (Azure Cache for Redis: Firewall; ElastiCache: security group). |
| SQL e Kafka | Hoje o Kubepier Web não conecta neles: o painel Dependências é do desktop e só lê as variáveis do pod e os ConfigMaps que elas referenciam. Se a web passar a consultar esses serviços, a conexão sai dos mesmos IPs. |
Comandos para AKS, EKS e GKE
Troque <ip-1>, <ip-2> pelos IPs da lista acima e <ips-ja-liberados> pelos que o cluster já aceita:
# AKS
az aks update -g <resource-group> -n <cluster> \
--api-server-authorized-ip-ranges <ip-1>/32,<ip-2>/32,<ips-ja-liberados>
# EKS
aws eks update-cluster-config --name <cluster> \
--resources-vpc-config endpointPublicAccess=true,publicAccessCidrs="<ip-1>/32,<ip-2>/32,<ips-ja-liberados>"
# GKE
gcloud container clusters update <cluster> --enable-master-authorized-networks \
--master-authorized-networks <ip-1>/32,<ip-2>/32,<ips-ja-liberados> Esses comandos substituem a lista atual. Inclua também os IPs que já estão liberados, ou você corta o acesso de quem já usa o cluster.
O que o IP fixo garante, e o que não garante
- A API do cluster e os serviços deixam de responder para a internet inteira: só para as suas redes e para o Kubepier.
- Os IPs são compartilhados por todos os clientes do Kubepier Web. A lista de IPs é uma camada de rede somada às credenciais, nunca no lugar delas: quem chega pelos IPs do Kubepier ainda precisa do token, do certificado ou da senha.
- Use credenciais com o mínimo de permissão. Cada página da documentação diz qual permissão cada função precisa.
- Endpoints totalmente privados (sem endpoint público, só na VPC ou atrás de VPN) não são alcançáveis pela rota Direta. Para eles, use a rota Pelo cluster (um relay restrito num cluster do cliente, sem abrir nada para a internet) ou o Kubepier Desktop pela sua VPN.
Credenciais cifradas
- Na web, tokens e certificados dos clusters, segredos das contas Azure e AWS e o acesso inteiro de cada serviço do cliente (RabbitMQ, Service Bus, MongoDB e Redis) são cifrados com AES-256-GCM antes de ir para o banco. A chave de cifra fica fora do banco.
- Depois de salvas, as credenciais não voltam para a tela nem para o navegador: quem consulta os serviços é o servidor.
- No desktop, os acessos aos serviços dos clientes ficam cifrados pelo chaveiro do sistema (Keychain, DPAPI ou libsecret). Sem chaveiro, nada é gravado em disco e os acessos valem até fechar o app.
- Na web, um Secret aparece só com as chaves e o tamanho de cada valor, nunca os valores, e por isso não é editável pela web.
- O banco fica no Microsoft Azure, na região Brazil South, e a comunicação usa TLS.
Login com GitHub, sem senha nova
- O Kubepier Web não tem senha própria: você entra com a conta do GitHub, e a sessão fica num cookie.
- O desktop entra com a mesma conta: o app mostra um código, você aprova no navegador e ele recebe um token só dele, cifrado pelo chaveiro do sistema. Sem chaveiro, o token não é gravado em disco e a barra de status avisa: "sem cofre do sistema: o login vale até fechar o app".
- Você vê e desconecta cada dispositivo em app.kubepier.com.br/desktop.
Papéis e acesso por cliente
- Cada pessoa da organização é admin ou membro.
- O admin vê todos os clientes, cadastra clusters e credenciais, convida a equipe e, no plano pago, edita, escala, reinicia, apaga, abre shell no pod e no nó, purga filas e edita chaves do Redis.
- O membro vê só os clientes liberados para ele, em modo leitura. No plano pago, também vê logs ao vivo, espia mensagens, abre o painel do MongoDB e navega nas chaves do Redis. O que não está liberado responde como se não existisse.
- Na auditoria, o admin vê a organização inteira e o membro vê os próprios registros, nos clientes liberados para ele; os dois exportam CSV no plano pago. No Free, cada pessoa vê uma prévia dos próprios registros dos últimos 7 dias, sem CSV.
- Convites valem por 7 dias. Quem sai da equipe perde o acesso na hora.
Free é só leitura
No plano Free, na web e no desktop, dá para conectar o cluster de produção e explorar sem risco de mudar nada: editar, escalar, reiniciar, apagar, logs ao vivo, shell, espiar mensagens, ações nos serviços dos clientes e diagnóstico com IA ficam nos planos pagos. O desktop só abre depois de você entrar com a conta, e o plano da organização vale nele também.
Auditoria: quem alterou o quê, e confirmação nas ações destrutivas
- Reiniciar e apagar pedem confirmação. Cada tentativa de editar, escalar, reiniciar ou apagar pela web fica na auditoria, com quem fez, quando, em que cluster e recurso e se deu certo.
- Purgar uma fila ou a DLQ pede que você digite o nome da fila. Apagar uma chave do Redis pede confirmação, e apagar várias pede que você digite a quantidade. Há limite de frequência (5 purgas a cada 10 minutos, 20 chaves apagadas por minuto) e, na web, isso é só de admin.
- Purgas e edições nos serviços ficam na auditoria do banco, na web, e no arquivo local kubepier-audit.log, no desktop: quem, quando, qual cliente e quais nomes. Nunca o conteúdo.
- Cada sessão de shell vai para a auditoria (web) ou para o kubepier-audit.log (desktop), com o alvo. No desktop, também as ações no cluster: aplicar, editar, escalar, reiniciar, apagar, cordon, uncordon e drain. O shell pela web é só de admin, dura no máximo 2 horas e cada pessoa abre até 3 ao mesmo tempo. O shell no nó pela web pede que o admin digite o nome do nó para confirmar, e o pod temporário dele é apagado ao fechar o terminal.
- O shell confere a origem da conexão: outro site não consegue abrir um shell com a sua sessão.
- Na web, a tela Auditoria filtra por período, usuário, cliente, cluster, ação e resultado e exporta CSV. No desktop, o mesmo fica em Preferências › TR › Auditoria, lido do kubepier-audit.log.
O que nunca é guardado
- O conteúdo dos recursos, dos logs e do shell: passa pela tela enquanto ela está aberta e não é gravado.
- O corpo das mensagens das filas e os valores das chaves do Redis: aparecem na tela quando você abre e nunca são gravados, guardados em cache nem escritos nos registros do servidor.
- Nas operações lentas do MongoDB e no SLOWLOG do Redis, os valores dos filtros e dos comandos são trocados por "?" ou viram uma contagem.
- A auditoria guarda quem fez o quê e onde, nunca o conteúdo.
Diagnóstico com IA: o que sai e para onde vai
O diagnóstico com IA manda ao provedor o contexto do pod, sempre depois de remover chaves privadas, tokens, chaves de nuvem, senhas, credenciais em URLs, e-mails, endereços IP e sequências longas que pareçam segredos. Vão o status do pod e de cada container e os nomes das variáveis de ambiente, nunca os valores; Secrets e o kubeconfig nunca vão. Eventos e logs somam até 16 KB.
| Situação | Provedor e chave | Caminho | Eventos e logs |
|---|---|---|---|
| Teste de 7 dias, na web (cada usuário de organização Pro ou Team, inclusive nos 14 dias grátis) | OpenAI (gpt-4o-mini), com a chave da TR | Navegador → servidor do Kubepier → OpenAI | Só depois da prévia (com a opção de enviar sem eles), redigidos |
| Teste de 7 dias, no desktop 2.7.0 (logado numa organização Pro ou Team, sem chave própria) | OpenAI (gpt-4o-mini), com a chave da TR | Desktop → API do Kubepier → OpenAI (redigido no app e de novo no servidor) | Só depois da prévia (com a opção de enviar sem eles), redigidos |
| Pro e Team na web, depois do teste | Anthropic ou OpenAI, com a chave da organização, cifrada | Navegador → servidor do Kubepier → provedor | Só com o consentimento da organização, depois da prévia |
| Pro e Team no desktop, depois do teste | Anthropic ou OpenAI, com a sua chave, no chaveiro do sistema | Sua máquina → provedor, sem passar pelo Kubepier | Só com o seu consentimento, depois da prévia |
O Kubepier não guarda nem escreve em log o texto enviado nem a resposta. A auditoria registra só quem pediu, quando, em que cluster e pod, e no teste marca a chave de teste e a origem (web ou desktop). No teste, cada usuário faz até 30 diagnósticos por dia (fuso de São Paulo, web e desktop somados), há uma cota mensal para todos os usuários, e organização Pro ou Team com chave própria usa a própria, sem consumir o teste. O Free não tem diagnóstico com IA. O histórico da tela Análises com IA fica só no navegador ou no computador de quem pediu.
O Kubepier Desktop conecta da sua máquina
- O desktop usa o seu kubeconfig e fala direto com a API dos clusters e com os serviços dos clientes, pela sua rede ou VPN, inclusive com plugins exec como kubelogin, aws e gke-gcloud-auth-plugin. Esse tráfego não passa pelos servidores do Kubepier.
- A conta serve para aplicar o plano: o app confere a licença com o servidor. Sem internet, uma licença Pro ou Team já confirmada continua valendo até a data que o servidor definiu (7 dias desde a última confirmação), para todas as funções pagas.
- O registro de uso do desktop leva só abertura do app, minutos de uso, login, versão e sistema operacional. O formato aceito pelo servidor não tem campo para nome de cluster, namespace, kubeconfig ou conteúdo.
- O diagnóstico com IA, com a sua chave, vai direto da sua máquina ao provedor. No teste de 7 dias, passa pela API do Kubepier até a OpenAI. O fluxo completo está na seção Diagnóstico com IA, acima.
Nada instalado no cluster
O Kubepier fala com a API do Kubernetes e não instala agente. As exceções são pedidas por você: o Lens Metrics (desktop), para ver o consumo: em Configurações do cluster › Metrics, o botão Instalar / Atualizar aplica o Prometheus, o kube-state-metrics e o node-exporter no namespace lens-metrics, e Remover apaga esse namespace depois de confirmar, e pods temporários que somem quando a função termina.
- Shell no nó (web e desktop): um pod privilegiado no kube-system, fixo no nó escolhido, apagado ao fechar o terminal. Na web, o pod kubepier-shell-no-* usa imagem fixada por digest, não tem token de service account e é apagado também em erro, queda, 120 s sem subir ou 2 horas. Se o cluster bloqueia pod privilegiado (Pod Security, Azure Policy, Gatekeeper, Kyverno), o shell no nó não abre.
- Túnel seguro (desktop): para um host da rede do cluster, um pod de repasse sem privilégio, apagado com o último túnel, em 2 horas ou quando o app fecha.
- Bastion (web): um pod sem privilégio no namespace escolhido, apagado ao fechar ou em 2 horas.
- Rota pelo cluster (web): um relay sem privilégio no cluster e no namespace da rota, apagado depois de 10 minutos sem uso ou em 2 horas.
Bastion e Túnel seguro, sem privilégios
- Bastion (web): um pod temporário no namespace do cliente, com o perfil PodSecurity "restricted" (usuário 1000, sem capabilities, raiz só leitura, HOME e /tmp em memória, sem token de ServiceAccount), imagem fixada por digest. Dura no máximo 2 horas e é apagado ao fechar. A chave SSH opcional fica só na memória do pod.
- Túnel seguro (desktop): a conexão parte da sua máquina. Para um Service, é port-forward direto, sem pod. Para um host da rede do cluster, um pod de repasse restrito (só socat, sem acesso interativo) é criado e apagado com o último túnel, em 2 horas ou quando o app fecha. A porta local só escuta em 127.0.0.1.
- Abertura, fechamento e túneis vão para a auditoria; o conteúdo, nunca.
Privacidade e LGPD
O tratamento de dados pessoais segue a LGPD e está descrito na política de privacidade: o que coletamos, por quê, com quem compartilhamos e por quanto tempo guardamos.
Os IPs de saída são exclusivos da minha empresa?
Não. Os mesmos IPs valem para todos os clientes do Kubepier Web. Eles fecham o endpoint para o resto da internet, mas quem chega por eles ainda precisa da credencial do cluster ou do serviço.
Meu cluster é totalmente privado. Dá para usar o Kubepier?
Pela web, não: o Kubepier Web só alcança a API de clusters com endpoint público que aceite os IPs de saída. O Kubepier Desktop conecta da sua máquina, pela sua VPN, e alcança qualquer cluster que o kubectl alcance. Já os serviços dos clientes (RabbitMQ, Service Bus, MongoDB e Redis) em rede privada a web alcança pela rota Pelo cluster, se algum cluster do cliente chega neles.
O Kubepier guarda os logs, o que eu digito no shell ou as mensagens das filas?
Não. Logs, shell, mensagens e valores do Redis aparecem na tela enquanto ela está aberta e não são gravados. A auditoria registra a ação (quem, onde, quando), nunca o conteúdo.
Quem da equipe pode abrir shell ou alterar recursos?
Na web, só quem é admin da organização, e só nos planos Pro e Team. O shell no nó pede ainda que o admin digite o nome do nó. O membro vê os clientes liberados para ele em modo leitura.
O que o diagnóstico com IA manda para fora?
O status do pod e dos containers, os nomes das variáveis de ambiente (sem os valores) e, se aceitos na prévia (no teste e com a sua chave), eventos e logs até 16 KB, sempre depois da redação de segredos e dados pessoais. No teste, vai à OpenAI pela chave da TR, passando pelo Kubepier; depois, ao provedor que você escolher, com a sua chave. O Kubepier não guarda o texto nem a resposta.
O Kubepier vê os valores dos Secrets?
A web mostra só as chaves e o tamanho de cada valor; os valores nunca chegam ao navegador. O desktop lê o cluster com o seu próprio kubeconfig, como o kubectl.