Quando o Microserviço Briga com a Segurança Dirigida a Eventos

1. Onde o Dev se Queima: O Ciclo da Ilusão de Segurança Distribuída

O problema não é microserviço, nem segurança orientada a evento. O problema é achar que eles escalam juntos sem pagar pedágio. Quando cada serviço publica eventos assíncronos e você tenta construir um rastro confiável para auditoria, compliance e resposta a incidentes… surpresa: **coerência se torna opcional e segurança vira efeito colateral**.

O que mais vejo nas trincheiras:

  • Eventos fora de ordem detonando análises de segurança;
  • Logs distribuídos incapazes de reconstruir “quem fez o quê”;
  • Sistemas que dependem do broker para confiança — um erro conceitual grave;
  • Alertas de segurança baseados em payloads inconsistentes.

Microserviços amam autonomia. Segurança orientada a eventos ama determinismo. **Eles não nasceram para isso, você que tentou juntar na marra.**

2. Como Resolver sem Over‑Engineering: Arquitetura de Rastro Determinístico

A saída pragmática é centralizar a identidade e o rastro, mas descentralizar a lógica de negócio. Segurança se ancora em fatos verificáveis, não em eventos fofos publicados por serviços semponsabilidade de integridade.

O núcleo da solução:

  • Todo evento sensível deve carregar um “Security Context ID” emitido por uma Autoridade de Auditoria;
  • O serviço publica o evento, mas não é ele quem garante a confiabilidade;
  • O pipeline de auditoria reconstrói a linha do tempo baseada no Security Context, não no timestamp local de cada serviço;
  • Logs assinados digitalmente ou com HMAC para evitar adulteração.

Direto, simples e sem gourmetização.

3. Implementação de Sênior: Security Context + Evento Assinado

Aqui vai um trecho prático usando Node.js + Kafka e assinatura com HMAC.

import crypto from 'crypto';
import { Kafka } from 'kafkajs';

const kafka = new Kafka({ brokers: ['kafka:9092'] });
const producer = kafka.producer();

const SECURITY_KEY = process.env.SECURITY_KEY;

function generateSecurityContext(userId) {
  return `ctx-${userId}-${Date.now()}`;
}

function signPayload(payload) {
  const data = JSON.stringify(payload);
  const hmac = crypto.createHmac('sha256', SECURITY_KEY);
  hmac.update(data);
  return {
    payload,
    signature: hmac.digest('hex')
  };
}

async function publishSensitiveEvent(eventType, userId, body) {
  const contextId = generateSecurityContext(userId);
  const event = {
    eventType,
    contextId,
    occurredAt: new Date().toISOString(),
    body
  };

  const signed = signPayload(event);

  await producer.send({
    topic: 'security-events',
    messages: [{ value: JSON.stringify(signed) }]
  });
}

// Exemplo de uso real
await publishSensitiveEvent('ORDER_APPROVED', 'user-123', { orderId: 890 });

Agora o pipeline de auditoria só precisa validar a assinatura e ordenar eventos pelo contextId. Nada de mágica, nada de invencionice.

Direto das Trincheiras

  • Se o evento é sensível, ele precisa ser Assinado. Não confie em serviço publicador, confie na verificação.
  • Evite usar timestamp do serviço como ordenação de auditoria; use IDs determinísticos.
  • Não transforme segurança em requisito emergente. Ela tem que nascer junto com a arquitetura — retrabalho aqui vira dívida técnica eterna.

4. O Custo Real da Escolha: Escalar Segurança Não é Grátis

Quando você centraliza o rastro e descentraliza o processamento, paga três preços:

  • Infra extra para verificação de assinaturas e reconstrução de linha do tempo;
  • Latência maior na análise de eventos críticos;
  • Mais disciplina do time — porque falha de padrão aqui vira buraco de auditoria.

Mas o custo de não fazer isso? Eventos adulteráveis, cadeia de responsabilidade perdida, incidentes sem diagnóstico e auditor abrindo ticket perguntando “quem fez o quê?”. Boa sorte explicando.

Fontes Utilizadas

capítulo 5 – segmentos tecnológicos e aplicações, PLANO DIRETOR DE TECNOLOGIA DA INFORMAÇÃO E …

Obrigado por acompanhar essa reflexão até o fim!

Espero que esses pontos ajudem você a tomar decisões mais lúcidas no seu próximo projeto. Não deixe de conferir outros artigos aqui no blog, onde descasquemos outros ‘hypes’ da nossa área.

Valeu e até a próxima! 😉

Facebook
Twitter
LinkedIn
Arquitetura Limpa

Microservices vs Monolitos: A falsa sensação de simplicidade que custa caro

Muita gente ainda acha que monolito é sinônimo de simplicidade e microservices é hype. A realidade nas trincheiras é bem menos romântica: ambos podem virar um inferno caro se escolhidos fora do contexto de negócio. Neste artigo eu abro o jogo, sem gourmetização, mostrando por que microservices fazem sentido em algumas arquiteturas — e por que o “monolito simples” frequentemente vira uma bola de neve de dívida técnica.

Test Driven Development

REST vs GraphQL sem gourmetização: a escolha que realmente impacta sua escalabilidade

Quando o assunto é escalar uma plataforma, muita gente trava no dilema REST vs GraphQL — e boa parte dessa trava vem de hype, não de necessidade real. Aqui eu, Rei Nascimento, corto o excesso, foco no que importa e mostro como essa escolha pode gerar dívida técnica ou salvar sua arquitetura. Direto das trincheiras, sem poesia arquitetural.

Profissionalismo em Tecnologia

A Obsessão por Microserviços Está Criando Monólitos na Cabeça de Muita Gente

Microserviços viraram religião. E, como toda religião mal interpretada, criou fanático achando que qualquer API com três rotas já merece dez serviços, quatro filas e um diagrama que parece um ninho de marimbondo. Neste artigo, falo direto da trincheira: quando microserviços viram over‑engineering, como isso destrói produtividade e por que a obsessão pelo hype cria monólitos mentais — mesmo quando o código está “distribuído”. Sem firula, só pragmatismo.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *