Infraestrutura e DevOps
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.yamle acionado automaticamente por push emmaster. Um commit acidental emmasterdispara 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-uiesta potencialmente exposto sem autenticacao.
10.3 Incident response
- Workers silenciosos:
ProcessarOfertasWorkereAtualizarOfertasWorkercapturam todas as excecoes comtry/catchgenerico 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.CreateAsyncpara 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.yamlde 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 comlatestpermitem quekubectl rollout restartpuxe uma versao diferente da que foi validada, se uma nova imagemlatestfoi pushada entre o build e o restart. - Runner
gemini: O pipeline de producao usaruns-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).
- 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) - Revogar o token Meta/WhatsApp no console Meta for Developers. Gerar novo token e armazenar em Kubernetes Secret. (CRIT-01)
- Rotacionar a senha do PostgreSQL. Criar usuario com permissoes minimas. Remover
appsettings.jsoncom credenciais do historico Git. (CRIT-02) - Rotacionar as credenciais CargaAdicional (
ClientSecret,Password). Auditar quais outros sistemas usam1q2w3E*— confirmado que nao ha rotacao de secrets. (CRIT-03) - Corrigir CORS para
WithOrigins("https://acesso.cargofleet.app.br")em producao. (CRIT-04) - Verificar Firebase Security Rules para garantir que as chaves Web expostas nao permitam acesso nao autorizado. Adicionar
google-services.jsoneGoogleService-Info.plistao.gitignore. (CRIT-05) - Adicionar
App__DisablePII: "true"aoconfigmap.yamlde producao para parar de logar PII imediatamente. (HIGH-04) - Aumentar
maxmemorydo Redis de 2MB para pelo menos 256MB. (SCALE-C1) - Corrigir
RequireHttpsMetadata: "false"em producao. (HIGH-03)
Proximo ciclo (importante — 1 a 3 meses)
- Adicionar
[Authorize]aoDeviceTokenControllere associar tokens aoCurrentUser.Id. (HIGH-01) - Gerar nova passphrase criptograficamente segura para credenciais Galileu, armazenar em Kubernetes Secret, recriptografar dados existentes. (HIGH-02)
- Adicionar
dotnet teste gate de qualidade ao pipeline CI/CD antes do build Docker. Implementar approval manual para producao. (HIGH-07) - Migrar Redis para volume persistente (
PVC) ou AWS ElastiCache. (HIGH-08) - Remover
ServiceConfigurationContextcomo dependencia de runtime emCargaAdicionalService. (Arquitetura) - Mover
FirebaseAdmindoDomainparaApplicationouHttpApi.Host. Remover referencia doApplication.ContractsparaDomain. (Arquitetura) - Criar indices em
AppOfertasparaCogProgColeta,Status,CodigoB100,Data,TryAceite. (SCALE-H2) - Implementar cache do access token OAuth2 em
CargaAdicionalService. (SCALE-H4) - Investigar e corrigir a subquery correlacionada em
EfCoreOfertaRepository.GetListAsync. (SCALE-H1) - Desabilitar Swagger UI em producao ou proteger com autenticacao. (MED-03)
- Mover
appsettings.secrets.jsonpara Kubernetes Secrets e adicionar ao.gitignore. (MED-02) - Corrigir o vazamento de arquivo temporario em
PrintingAppService. (SCALE-H3)
Depois (melhoria — 3 a 6 meses)
- Implementar HPA para
cargo-fleet-apibaseado em CPU/memoria. Adicionar segunda replica com estrategiaRollingUpdate. - Migrar PostgreSQL para instancia gerenciada (AWS RDS) com backup automatico e replicas de leitura.
- Implementar observabilidade centralizada: logs (CloudWatch Logs ou ELK), metricas (Prometheus/Grafana ou CloudWatch Metrics), tracing (AWS X-Ray ou OpenTelemetry).
- Resolver o version mismatch ABP 9.0.0 (backend) vs 8.3.3 (frontend) — atualizar frontend para ABP 9.x de forma coordenada.
- Implementar limite de concorrencia (
SemaphoreSlim) noProcessarOfertasWorker— com 22 tenants e toleravel, mas com meta de 150 se torna critico. (SCALE-C2) - Reativar
ValidarOrigemDestino()ou documentar formalmente por que foi desativada. (Divida tecnica) - 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)
- Mover URL Galileu
nestle-br.g2.galileulog.com.brde hardcoded para configuracao — confirmado que e URL de producao, todos os tenants usam. (Operacional) - Adicionar headers de seguranca ao Nginx (
X-Frame-Options,CSP,HSTS). (LOW-03) - Implementar
AbpGdprModuleno host para suportar solicitacoes de exclusao de dados (LGPD Art. 18). (LGPD) - Implementar Network Policies Kubernetes para isolar Redis e banco de dados. (LOW-05)