# Borda pública monetarie.com — registro operacional (2026-07-21)

Execução da Fase 1-3 do plano `docs/plans/2026-07-21-exposicao-publica-onboarding-plan.md`. Tudo criado via AWS CLI (profile vulcimonetarie, sa-east-1). Estes recursos NÃO estão no Terraform (mesmo regime de drift aceito dos ALBs do qrcode; regra: nunca apply).

## Certificados ACM (validação DNS via Cloudflare, ver docs/operator/2026-07-21-cloudflare-cnames-monetarie-com.md)
- HML `arn:aws:acm:sa-east-1:990933657879:certificate/297ec696-78ee-4dc3-9b66-86bea285c287` SANs: api-h, docs-h, ib-h, merchant-h .monetarie.com
- PRD `arn:aws:acm:sa-east-1:990933657879:certificate/0fddadc7-f5f3-4fd8-b381-bfc0a282c8b1` SANs: api, docs, ib, merchant .monetarie.com
- Status no fecho desta sessão: PENDING_VALIDATION, aguardando CNAMEs no Cloudflare. Após ISSUED: anexar por SNI ao listener 443 de cada ALB (`elbv2 add-listener-certificates`).

## Target groups (target-type ip, health /health, 200-399)
HML (vpc-03e25a932e9fd22a8):
- mon-extapi-pub-h/0cf4ffe2204d9b18 porta 4000 -> core-api
- mon-ib-pub-h/88d4e4ad1fad76fb porta 8080 -> core-banking-ui
- mon-mer-pub-h/3fa0606f8b055ba2 porta 8080 -> core-merchant-ui
- mon-docs-pub-h/0438f13aafe36fc6 porta 8080 -> docs-portal
PRD (vpc-0da523dbdbac50b5d):
- mon-extapi-pub-p/73b57ade4e554121 porta 4000
- mon-ib-pub-p/9e813e275a82912a porta 8080
- mon-mer-pub-p/1d36820636ce47e8 porta 8080
- mon-docs-pub-p/9716b4162f7bff2f porta 8080

## Listeners e regras (ALBs públicos monetarie-qrcode-homolog e -prod)
- Listener :80 novo nos 2 ALBs: default redirect 301 -> 443.
- Listener 443, regras novas (default 404 e prio 10 do qrcode INTACTOS):
  - prio 20: host api(-h).monetarie.com + paths /api/external/* e /api/webhooks/nextcode/* -> mon-extapi-pub
  - prio 30: host ib(-h) -> mon-ib-pub
  - prio 40: host merchant(-h) -> mon-mer-pub
  - prio 50: host docs(-h) -> mon-docs-pub

## Security groups
- HML: sg-037cd2d0b9f9ae74b (tasks) ganhou ingress 4000 e 8080 a partir de sg-0189c5b5898b78688 (ALB público); ALB SG ganhou :80 v4+v6.
- PRD: sg-068b1630380e1785f ganhou 4000 e 8080 a partir de sg-0f99d10cacf15594a; ALB SG ganhou :80 v4+v6.
- core-api usa o MESMO SG fargate nos 2 ambientes (verificado por describe-services).

## ECS (segundo target group por service)
- HML: core-api, core-banking-ui, core-merchant-ui, docs-portal atualizados com o TG público adicional; services STABLE e os 4 TGs públicos healthy (validado vivo).
- PRD ATIVADO 21/07 (OK do dono, opção "subir a main atual"): banking-ui:8 + merchant-ui:6 (fix NGINX + lote IB B/C+B4-B9) e core-api:80 + docs-portal:9 (TG público). 8/8 TGs healthy, services STABLE. Rollbacks: banking:7, merchant:5, core-api:79.
- VALIDADO VIVO PRD: ib/merchant/docs 200 com TLS ok; /api do IB = 400 em 0,13s (Phoenix de PRD; antes timeout/504 cross-env); api.monetarie.com whitelist -> Phoenix, fora -> 404 fixo do ALB; 301 http->https.
- Certs ISSUED e anexados por SNI nos 2 listeners (HML 297ec696, PRD 0fddadc7). Pendencia regra #11: validacao visual das telas do lote IB, agora acessiveis em ib.monetarie.com.

## Fix NGINX das UIs (defeito provado: PRD apontava para core-api-h de HML)
- Commits `4903714b` (banking) e anterior (merchant): template envsubst `${CORE_API_UPSTREAM}`/`${CORE_API_HOST}`, contrato idêntico ao admin.
- HML deployado: banking-ui:37, merchant-ui:24 (imagem homolog-4903714b-nginxenv-20260721), STABLE + TGs healthy. Rollbacks: banking:36, merchant:23.
- PRD PREPARADO, não deployado: imagens retagueadas prod-4903714b-nginxenv-20260721 (digest MATCH provado: banking sha256:5afe1265..., merchant sha256:28265325...), task-defs registradas banking-ui-prod:8 e merchant-ui-prod:6 com CORE_API_UPSTREAM/HOST de produção. ATENÇÃO DE ESCOPO: essas imagens vêm da main `4903714b`, que inclui o lote IB B/C + B4-B9 segurado para validação visual; decidir com o dono antes do swap.

## WAF (fase COUNT, nada em BLOCK)
- IP sets: monetarie-extapi-clients-h d0ed4502-0c82-42ac-9781-9f38cf3c2310; monetarie-extapi-clients-p 8337294b-412d-481e-bd53-7361acaba4c4 (vazios; serão alimentados pelo sync worker das api_keys).
- WebACLs: monetarie-public-homolog 4e1e8c22-1cbb-4933-92c8-829617f30f4f; monetarie-public-prod 25f2935d-642a-47ea-b2a1-15018b4cb7e9.
- Regras (todas COUNT): managed Common e SQLi com scope-down excluindo /api/external/*; KnownBadInputs; AmazonIpReputationList; AnonymousIpList; rate-based por IP limite 100000/5min. JSON exato em scratchpad da sessão; reproduzível pelo describe da própria ACL.
- Associação às ALBs: em retry no fecho (WAFUnavailableEntityException transitório pós-criação); conferir com `wafv2 get-web-acl-for-resource`.
- Regra de rollout: só virar BLOCK com OK do dono, após observar CountedRequests; piso de projeto do sistema = 120.000 req/60s; quando BLOCK, IP set de clientes de API isento do rate.

## Segredos
- Nextcode ApiKey gravada em monetarie/homolog/kyc/nextcode/api_key e monetarie/prod/kyc/nextcode/api_key (Secrets Manager). Valor NUNCA em repo/docs.
