CiudadLab

Blog / segurança

Série Radar · 3 de 3segurançabastidoresradar

O que eu revisei antes de colocar o Radar no ar

Seis decisões de segurança, o custo de cada uma e o erro que o pipeline encontrou antes de mim.

EC

Eduardo Ciudad

9 de novembro de 2026 · 2 min de leitura

radar-api · main
Primeira execução do pipeline
Concluído com 1 alerta
Preparar ambiente
Java 17 · dependências em cache
0:38
Banco de teste
PostgreSQL temporário, só para o pipeline
0:06
Testes de unidade
regras, validações e segurança
0:41
Testes de integração
0 executados
0:00
Imagem da aplicação
build do container
1:12
A primeira execução do pipeline do Radar, simplificada.

EM 30 SEGUNDOS

  1. 1Segurança troca conveniência por controle. Cada decisão aqui vem com o que custou.
  2. 2O pipeline encontrou testes que nunca tinham rodado. Foi o achado mais útil do dia.
  3. 3Publicar o novo me fez fechar portas que os projetos antigos deixavam abertas.

01

O contexto

Por que separar um dia só para revisar

O Radar lê dados de Analytics de clientes. Não são dados de cartão, mas são dados de negócio de outras pessoas, e isso muda o tamanho do cuidado.

Os detalhes de configuração ficam de fora de propósito. Explicar a decisão ajuda quem está construindo; publicar o mapa ajuda quem quer entrar.

02

As decisões

Seis decisões, e o custo de cada uma

Organizei em três frentes: quem acessa, onde ficam os dados e como o servidor roda.

01Acesso

Front e API se reconhecem

O painel roda na Vercel, que não tem IP fixo. Liberar por IP não funcionaria, então a API só responde a quem apresenta uma credencial do próprio painel.

O custo: Mais uma chave para guardar e trocar.
02Acesso

Sair derruba o acesso

Cada login carrega uma versão. Ao sair, ou ao desativar alguém, a versão muda e os acessos antigos param na hora.

O custo: Uma consulta ao banco por requisição.
03Acesso

Limite por conta, não por IP

Todo login passa pelo mesmo servidor intermediário. Limitar por IP travaria todo mundo junto; por conta, trava só quem erra.

O custo: Em memória: reiniciar zera a contagem.
04Dados

Banco sem superpoderes

A aplicação usa um usuário que lê e escreve dados. Criar e apagar estrutura é papel das migrações.

O custo: Dois usuários de banco para manter.
05Servidor

Container sem root

A API roda com usuário próprio, arquivos só de leitura e sem permissões extras.

O custo: Temporários precisam de lugar certo.
06Servidor

Fechado por padrão

Rota nova nasce exigindo administrador. Abrir é uma decisão, não um esquecimento.

O custo: Cada rota pública é liberada à mão.

03

O pipeline

O erro que a integração contínua achou antes de mim

Montei o pipeline achando que ele só ia confirmar o que eu já sabia. Na primeira execução, tudo ficou verde, menos uma linha: os testes que sobem um banco de verdade nunca tinham rodado no build.

Eles passavam quando eu rodava um por um na minha máquina. O build simplesmente não os chamava.

antes
0

testes de integração executados pelo build. Eles existiam, mas o build não os chamava.

depois
Todos

rodam a cada envio, com banco de verdade, antes de qualquer imagem ser gerada.

Um teste que não roda no build é só um arquivo que dá segurança falsa.

04

O que já estava no ar

Revisar os projetos antigos também

Publicar o Radar no mesmo servidor de projetos antigos me fez olhar para eles. Alguns estavam mais expostos do que precisavam. Fechei antes de subir o novo.

É a parte menos bonita do trabalho, e provavelmente a mais útil: o projeto novo herda o cuidado, os antigos ganham de carona.

05

Em números

O Radar hoje

Nenhum desses números garante que nada vai dar errado. Eles garantem que, quando der, eu fico sabendo cedo.

testes automatizados
endpoints, fechados por padrão
migrações versionadas
0
portas do banco abertas para a internet

FIM

O que levar daqui

Segurança não é uma lista de ferramentas. É decidir, item por item, o que você aceita pagar em conveniência para ter controle, e escrever teste para cada decisão.

EC

Eduardo Ciudad

Desenvolvedor backend e fundador da CiudadLab. Escreve sobre o que constrói e coloca no ar.

LEIA TAMBÉM