Pular para o conteúdo principal

Auditoria e Rastreabilidade

Para quem é esta página

Engenheiros, compliance e auditores. Para contexto LGPD, veja LGPD.

Audit Log de Banco

Um trigger PL/pgSQL captura automaticamente toda operação de escrita em tabelas críticas:

CREATE OR REPLACE FUNCTION fn_audit_log() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO audit_logs (tabela_nome, registro_id, operacao, dados_antes, dados_depois)
VALUES (
TG_TABLE_NAME,
CASE TG_OP WHEN 'DELETE' THEN OLD.id ELSE NEW.id END,
TG_OP::operacao_audit_enum,
CASE TG_OP WHEN 'INSERT' THEN NULL ELSE to_jsonb(OLD) END,
CASE TG_OP WHEN 'DELETE' THEN NULL ELSE to_jsonb(NEW) END
);
RETURN COALESCE(NEW, OLD);
END;
$$ LANGUAGE plpgsql;

Características:

  • Particionado por mês (performance em queries históricas)
  • Imutável — política de banco: sem UPDATE/DELETE em audit_logs
  • Retenção: 5 anos (requisito legal do CAR)

Histórico Imutável do Processo

Cada mudança de status do processo gera um registro em historico_processos:

CampoDescrição
status_anteriorStatus antes da mudança
status_novoStatus após a mudança
motivoJustificativa do analista (obrigatória em rejeição)
ator_idUUID do usuário humano responsável
ator_sistemaNome do serviço se ação automática
created_atTimestamp imutável

Eventos de Segurança Auditados

EventoCampos registrados
Login bem-sucedidouser_id, ip, user_agent, timestamp
Falha de loginip, cpf_hash (sem CPF), motivo, timestamp
Logoutuser_id, session_id, timestamp
Acesso negadouser_id, recurso tentado, timestamp
Download de dossiêuser_id, processo_id, timestamp
Aprovação de processoanalista_id, processo_id, observações
Rejeição de processoanalista_id, processo_id, motivo, código
Mudança de roleadmin_id, user_id, role_anterior, role_nova
Tentativa OAuth2 fraudulentaip, state_tentado, timestamp
CPF não aparece nos logs

Logs de segurança usam cpf_hash (SHA-256), nunca o CPF em claro. Isso garante rastreabilidade sem expor dados pessoais em arquivos de log.

Pipeline de Segurança CI/CD

# Executado em cada PR
bandit -r src/ -ll -i # SAST Python
safety check --json # CVEs em dependências
gitleaks detect --source . # Segredos no código
trivy image carla-backend:latest # Vulnerabilidades na imagem

Quality gate: zero findings HIGH/CRITICAL para merge na branch main.