Pular para o conteúdo

apps/security/zero-trust

149 · Segurança & Auditoria · ≈ 6 min de estudo

Zero Trust

Nenhuma rede é confiável, nem a interna: cada chamada entre serviços prova quem é e é autorizada individualmente. Três camadas, nesta ordem — transporte com mTLS (certificado da CA interna nos dois lados), token de serviço de vida curta emitido pelo STS, e política explícita com escopo, negada por padrão — mais o contexto (segmento de rede e taxa de chamadas). Toda decisão fica registrada.

passos
6
arquivos
8
testes
0
tecnologias
6
Infraestrutura realTypeScriptBunElysiaPostgreSQLJOSEDocker
Baixar cartão

Cenário

O serviço de pagamentos consulta o antifraude antes de cada PIX. Só ele tem política para POST /fraud/score, e só com o escopo fraud:score. O serviço de relatórios, mesmo dentro da rede e com certificado válido, recebe 403: não há política para ele. Um token emitido para outro serviço (aud diferente) recebe 401, e uma rajada acima do limite por minuto é barrada como possível movimento lateral. Sem certificado da CA interna, a conexão nem chega ao HTTP.

Planta

Sequência
8/8
handshake mTLS com certificado da CA interna1sem certificado válido: conexão fechadaPOST /fraud/score (Bearer token do STS, aud svc-fraud)2assinatura, iss, aud, exp3política svc-payments → svc-fraud POST /fraud/score?4escopo exigido fraud:score5escopo no token? rede de origem? taxa do chamador?6registra a decisão7200, ou 401/403 com o motivo8svc-paymentssvc-fraudPostgreSQL
8

8 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Nunca confia, sempre verifica.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    pkiCreate emite uma CA interna e um certificado por serviço, com o SPIFFE ID no SAN; o antifraude escuta com requestCert e rejectUnauthorized

  2. 02

    O STS emite tokens ES256 de 5 minutos com sub (quem chama), aud (para quem) e scope

  3. 03

    middlewareZeroTrust verifica o token com a chave pública do STS: sem token, outro emissor ou outro aud → 401

  4. 04

    policyScope busca a política origem + destino + método + recurso no banco; sem linha → 403; escopo ausente no token → 403

  5. 05

    O contexto vem depois da identidadeIP fora do segmento de serviço ou taxa acima do limite → 403 — o IP nunca é identidade

  6. 06

    decisionRecord grava cada decisão, permitida ou negada, com o motivo

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Serviço comprometido não alcança o que não tem política

  • Negado por padrão: serviço novo só recebe tráfego com política explícita

  • Decisões registradas tornam movimento lateral visível

  • Identidade por certificado e token, não por IP

Custos

  • PKI, STS e políticas a operar

  • Onboarding mais lento

  • Uma consulta de política e uma escrita por chamada

  • Certificado expirado sem renovação automática derruba o serviço

apps/security/zero-trust

8 arquivos

src/

  • zero_trust.tsGuard por requisição: token, política, escopo, contexto e registro da decisão
  • sts_token.tsSTS interno: emissão e verificação de token de serviço com aud
  • policy_store.tsPolíticas negadas por padrão e log de decisões no PostgreSQL
  • svc_fraud.tsAntifraude com mTLS obrigatório e rotas atrás do guard
  • pki_dev.tsCA e certificados de serviço de desenvolvimento via openssl
  • config_trust.tsConfiguração validada do ambiente
  • demo.tsdemoChamada sem certificado, token e política em cada caso, rajada e log de decisões

sql/

  • 01_schema.sqlschemaPolíticas e decisões

Executar · com Docker

  1. ./docker.sh up# sobe PostgreSQL
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real

Requer openssl no host para emitir a CA de desenvolvimento.

Requisitos
BunDocker
Sobe junto
PostgreSQL

Por que se relacionam

Teste rápido

Qual é o próximo passo depois de Zero Trust Architecture?

Próximo projeto · Segurança & AuditoriaGerenciamento de Segredos
Esc

↑ ↓ navegarEnter abrir191 resultados