From 298a7678ac1d23406bb74c9f861804248ba81606 Mon Sep 17 00:00:00 2001 From: deploy Date: Thu, 24 Sep 2026 22:45:15 +0000 Subject: [PATCH] feat(plataforma): saida para o SMTP na 587, so para quem manda e-mail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit O deny-cross-tenant libera 443 para a internet e nada mais. O Keycloak batia em Network is unreachable na 587, e o erro que chegava ao provisionamento era Failed to send execute actions email — que manda procurar no SMTP, nao na rede. --- tenants/plataforma/20-netpol-smtp.yaml | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tenants/plataforma/20-netpol-smtp.yaml diff --git a/tenants/plataforma/20-netpol-smtp.yaml b/tenants/plataforma/20-netpol-smtp.yaml new file mode 100644 index 0000000..88a8760 --- /dev/null +++ b/tenants/plataforma/20-netpol-smtp.yaml @@ -0,0 +1,45 @@ +# ============================================================================= +# Saida para o SMTP — porta 587, e so para quem manda e-mail. +# +# POR QUE ISTO FALTAVA +# +# O `deny-cross-tenant` deste namespace libera egress para: pods daqui, a faixa +# de Services (10.43.0.0/16), DNS, e **443 para a internet**. Nada mais. O +# Keycloak, que e quem manda o e-mail de boas-vindas, batia em +# `Network is unreachable` ao tentar 587 — e o erro que chegava ao +# provisionamento era "Failed to send execute actions email", que manda procurar +# no SMTP e nao na rede. +# +# Medido em 2026-09-24, no primeiro provisionamento que chegou a etapa do +# e-mail. +# +# POR QUE NAO ABRIR A 587 PARA O NAMESPACE INTEIRO +# +# Aqui dentro moram o Postgres, o PgBouncer, o Gitea-cliente e o servico de +# captacao. Saida para porta de e-mail e caminho de exfiltracao: um processo +# comprometido que nao manda e-mail nao tem por que alcancar um servidor de +# e-mail. So os dois que mandam. +# +# As politicas se SOMAM: esta nao afrouxa o `deny-cross-tenant`, acrescenta uma +# permissao a ele. +# ============================================================================= +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: egress-smtp + namespace: plataforma-prod +spec: + podSelector: + matchExpressions: + - key: app + operator: In + values: ["keycloak", "servico-captacao"] + policyTypes: [Egress] + egress: + - ports: + - { protocol: TCP, port: 587 } + to: + # A internet, e nao a rede interna: o provedor de e-mail e de fora. + - ipBlock: + cidr: 0.0.0.0/0 + except: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]