14-16 Mar 2026

Infraestrutura e DevOps

50 achados

Achados de infraestrutura e frontend identificados na auditoria: CI/CD, Kubernetes, Nginx, Docker, Angular, Capacitor e Ionic.

Infraestrutura

5

Critical

Risco imediato

11

High

Alta prioridade

10

Medium

Monitorar

6

Low

Baixo risco

Frontend

0

Critical

Risco imediato

6

High

Alta prioridade

8

Medium

Monitorar

4

Low

Baixo risco

Critical5 achados
High11 achados
Medium10 achados
Low6 achados
High6 achados
Medium8 achados
Low4 achados

10. Riscos Operacionais e de Producao

10.1 Deploy e rollback

  • Sem approval gate: O pipeline Production.yaml e acionado automaticamente por push em master. Um commit acidental em master dispara deploy de producao imediato.
  • Estrategia Recreate: Todos os componentes usam type: Recreate, garantindo downtime a cada deploy. Para o AuthServer, isso significa logout de todos os usuarios ativos.
  • Sem rollback automatico: O pipeline nao implementa health check pos-deploy nem rollback automatico em caso de falha. O rollback manual requer acesso ao cluster e conhecimento do SHA anterior.
  • DbMigrator como Job Kubernetes: O migrador de banco roda como Job Kubernetes a cada deploy (dbmigrator.yml). Migrations mal testadas sao aplicadas diretamente em producao.
  • Pipeline sem separacao de responsabilidades: Build, push, e deploy sao etapas do mesmo job, rodando no runner gemini (provavelmente o mesmo k3s de desenvolvimento — hipotese, nao confirmado).

10.2 Observabilidade

  • Logging: Serilog configurado, mas sem confirmacao de destino centralizado (CloudWatch, Elasticsearch, Datadog). Nao encontrado Serilog.Sinks.* alem do AspNetCore sink nos manifests.
  • Metricas: Sem evidencia de integracao com Prometheus/Grafana ou CloudWatch Metrics.
  • Tracing distribuido: Sem evidencia de OpenTelemetry ou AWS X-Ray.
  • Alertas: Sem evidencia de alertas configurados para falha de workers, erros de autenticacao Galileu, ou uso de Redis.
  • Health checks: Implementados (CargaAdicionalApiHealthCheck, cargo_fleetDatabaseCheck), mas o endpoint /health-ui esta potencialmente exposto sem autenticacao.

10.3 Incident response

  • Workers silenciosos: ProcessarOfertasWorker e AtualizarOfertasWorker capturam todas as excecoes com try/catch generico e apenas logam. Uma falha sistemica (ex: Redis indisponivel) resulta em loop silencioso de erros sem alarme.
  • ApiStatus como proxy de saude: O sistema usa ApiStatusManager.CreateAsync para registrar status Online/Offline da API Galileu, o que e uma forma manual de health check que nao se integra com alertas Kubernetes.
  • Nao ha runbook identificado: Nenhum arquivo de procedimentos operacionais encontrado no repositorio.

10.4 Seguranca operacional

  • Secrets no ConfigMap: O configmap.yaml de producao nao contem secrets diretamente, mas o mecanismo de injecao de secrets (secretRef: cargofleet-secrets) depende de Kubernetes Secrets configurados manualmente fora do repositorio. Nao ha evidencia de rotacao automatica.
  • ECR com imagens latest: Imagens tagueadas com latest permitem que kubectl rollout restart puxe uma versao diferente da que foi validada, se uma nova imagem latest foi pushada entre o build e o restart.
  • Runner gemini: O pipeline de producao usa runs-on: gemini (runner auto-hospedado). Se este runner e o mesmo k3s de desenvolvimento, ha risco de contaminacao entre ambientes.

11. Prioridades Recomendadas

Agora (urgente — 1 a 2 semanas)

Estas acoes devem ser tratadas como incidente de seguranca ativo. A confirmacao de que a senha admin 1q2w3E* esta em uso em producao eleva a prioridade #3 para acao imediata (hoje).

  1. HOJE: Alterar senha admin de producao. A senha 1q2w3E* esta confirmada em uso em producao e exposta no repositorio. Qualquer desenvolvedor com acesso ao repo pode logar como admin. Alterar imediatamente e auditar logins recentes. (CRIT-03 — confirmado pelo usuario)
  2. Revogar o token Meta/WhatsApp no console Meta for Developers. Gerar novo token e armazenar em Kubernetes Secret. (CRIT-01)
  3. Rotacionar a senha do PostgreSQL. Criar usuario com permissoes minimas. Remover appsettings.json com credenciais do historico Git. (CRIT-02)
  4. Rotacionar as credenciais CargaAdicional (ClientSecret, Password). Auditar quais outros sistemas usam 1q2w3E* — confirmado que nao ha rotacao de secrets. (CRIT-03)
  5. Corrigir CORS para WithOrigins("https://acesso.cargofleet.app.br") em producao. (CRIT-04)
  6. Verificar Firebase Security Rules para garantir que as chaves Web expostas nao permitam acesso nao autorizado. Adicionar google-services.json e GoogleService-Info.plist ao .gitignore. (CRIT-05)
  7. Adicionar App__DisablePII: "true" ao configmap.yaml de producao para parar de logar PII imediatamente. (HIGH-04)
  8. Aumentar maxmemory do Redis de 2MB para pelo menos 256MB. (SCALE-C1)
  9. Corrigir RequireHttpsMetadata: "false" em producao. (HIGH-03)

Proximo ciclo (importante — 1 a 3 meses)

  1. Adicionar [Authorize] ao DeviceTokenController e associar tokens ao CurrentUser.Id. (HIGH-01)
  2. Gerar nova passphrase criptograficamente segura para credenciais Galileu, armazenar em Kubernetes Secret, recriptografar dados existentes. (HIGH-02)
  3. Adicionar dotnet test e gate de qualidade ao pipeline CI/CD antes do build Docker. Implementar approval manual para producao. (HIGH-07)
  4. Migrar Redis para volume persistente (PVC) ou AWS ElastiCache. (HIGH-08)
  5. Remover ServiceConfigurationContext como dependencia de runtime em CargaAdicionalService. (Arquitetura)
  6. Mover FirebaseAdmin do Domain para Application ou HttpApi.Host. Remover referencia do Application.Contracts para Domain. (Arquitetura)
  7. Criar indices em AppOfertas para CogProgColeta, Status, CodigoB100, Data, TryAceite. (SCALE-H2)
  8. Implementar cache do access token OAuth2 em CargaAdicionalService. (SCALE-H4)
  9. Investigar e corrigir a subquery correlacionada em EfCoreOfertaRepository.GetListAsync. (SCALE-H1)
  10. Desabilitar Swagger UI em producao ou proteger com autenticacao. (MED-03)
  11. Mover appsettings.secrets.json para Kubernetes Secrets e adicionar ao .gitignore. (MED-02)
  12. Corrigir o vazamento de arquivo temporario em PrintingAppService. (SCALE-H3)

Depois (melhoria — 3 a 6 meses)

  1. Implementar HPA para cargo-fleet-api baseado em CPU/memoria. Adicionar segunda replica com estrategia RollingUpdate.
  2. Migrar PostgreSQL para instancia gerenciada (AWS RDS) com backup automatico e replicas de leitura.
  3. Implementar observabilidade centralizada: logs (CloudWatch Logs ou ELK), metricas (Prometheus/Grafana ou CloudWatch Metrics), tracing (AWS X-Ray ou OpenTelemetry).
  4. Resolver o version mismatch ABP 9.0.0 (backend) vs 8.3.3 (frontend) — atualizar frontend para ABP 9.x de forma coordenada.
  5. Implementar limite de concorrencia (SemaphoreSlim) no ProcessarOfertasWorker — com 22 tenants e toleravel, mas com meta de 150 se torna critico. (SCALE-C2)
  6. Reativar ValidarOrigemDestino() ou documentar formalmente por que foi desativada. (Divida tecnica)
  7. Remover codigo do ScraperOrchestrator e RegistrarOfertasWorker — confirmado pelo usuario que o scraper foi desativado permanentemente. Codigo morto deve ser excluido para evitar reativacao acidental. (Divida tecnica)
  8. Mover URL Galileu nestle-br.g2.galileulog.com.br de hardcoded para configuracao — confirmado que e URL de producao, todos os tenants usam. (Operacional)
  9. Adicionar headers de seguranca ao Nginx (X-Frame-Options, CSP, HSTS). (LOW-03)
  10. Implementar AbpGdprModule no host para suportar solicitacoes de exclusao de dados (LGPD Art. 18). (LGPD)
  11. Implementar Network Policies Kubernetes para isolar Redis e banco de dados. (LOW-05)