# Handoff completo - Monetarie HML AWS / OpenVPN / RSFN / HSM

Data: 2026-06-22 18:18 BRT  
Workspace: `/Users/luizpenha/monetarie`  
AWS profile: `vulcimonetarie`  
AWS region: `sa-east-1`  
AWS account: `990933657879`

## Regras para continuação

- Nao expor tokens, senhas, sessoes HSM, conteudo de `.ovpn`, chaves privadas ou payloads sensiveis.
- O arquivo `/Users/luizpenha/Desktop/HSM - HML.txt` contem credenciais reais e deve ser tratado como segredo. Ele pode ser lido para testes locais, mas os valores nunca devem ser impressos.
- `60042` e o **ID do vHSM**, nao uma porta TCP.
- A API correta do HSM HML e `https://cloudhsm-hml.priv.rtmcloud.net.br:6443`.
- `RTM_HSM_ENABLED` deve continuar `false` ate obter sessao HSM real, UIDs das chaves e validar `sign-rsa`/`verify` ou operacao equivalente.
- O worktree esta sujo por mudancas desta frente. Nao reverter alteracoes que nao foram feitas explicitamente nesta retomada.

## Resumo executivo

O ambiente HML foi migrado para a VPC `monetarie-rtm-hml` (`vpc-03e25a932e9fd22a8`, CIDR `10.45.0.0/16`). A VPC antiga `10.40.0.0/16` foi removida. OpenVPN esta ativo com IP elastico fixo e perfis gerados. Resolver RSFN e rotas VPC/TGW foram configurados para DX.

O HSM HML esta com rede OK ate `cloudhsm-hml.priv.rtmcloud.net.br:6443`, mas a chamada KMIP ainda nao autentica: a porta responde como Kubernetes API/gateway e `get-session-credential` no vHSM `60042` retorna `system:anonymous`/`Unauthorized`.

A rota para o endpoint de teste `http://200.160.162.200:63351/index.html` foi criada no TGW via Direct Connect, mas o destino ainda retorna timeout a partir do Mac/VPN e da EC2 OpenVPN. Do nosso lado, VPC route table, TGW route table, OpenVPN NAT e security group estao configurados para permitir esse caminho; a pendencia atual esta no lado remoto/DX/RTM ou no estado da VPN local usada para o teste.

## Estado AWS aplicado

### VPC e subnets

- VPC ativa: `vpc-03e25a932e9fd22a8`
- Nome: `monetarie-rtm-hml`
- CIDR: `10.45.0.0/16`
- Subnets de app:
  - `subnet-01194da7817adf43a`
  - `subnet-06aac3d8df4e5f6d5`
  - `subnet-012bfe64ab5455fdc`
- Route table app: `rtb-0b1f289a9d513cd03`
- VPC antiga: `vpc-0db1cc5e57331fe0d` / `10.40.0.0/16`, removida.

Rotas relevantes em `rtb-0b1f289a9d513cd03`:

| Destino | Target | Estado |
|---|---|---|
| `0.0.0.0/0` | `igw-0a02961fd35cea9bf` | active |
| `10.0.17.2/32` | `tgw-051f1a3c159dfb25b` | active |
| `10.0.33.2/32` | `tgw-051f1a3c159dfb25b` | active |
| `10.173.1.247/32` | `tgw-051f1a3c159dfb25b` | active |
| `172.31.1.0/24` | `tgw-051f1a3c159dfb25b` | active |
| `172.31.2.0/24` | `tgw-051f1a3c159dfb25b` | active |
| `172.31.3.0/24` | `tgw-051f1a3c159dfb25b` | active |
| `200.160.160.0/22` | `tgw-051f1a3c159dfb25b` | active |
| `200.218.64.0/18` | `tgw-051f1a3c159dfb25b` | active |

### Transit Gateway / Direct Connect

- TGW: `tgw-051f1a3c159dfb25b`
- TGW route table: `tgw-rtb-00c87955e8b181f3f`
- Direct Connect Gateway attachment: `tgw-attach-0b451500fe3362561`
- Rota criada e ativa: `200.160.160.0/22 -> tgw-attach-0b451500fe3362561`
- `200.160.162.200` pertence a `200.160.160.0/22`.

Arquivo Terraform novo para isso:

- `infra/aws/greenfield/tgw-routes.tf`

### OpenVPN

- Instance: `i-0fe1fe9ede134cef1`
- Estado: `running`
- VPC: `vpc-03e25a932e9fd22a8`
- Subnet: `subnet-01194da7817adf43a`
- Private IP: `10.45.1.30`
- Elastic IP: `54.94.247.111`
- Porta: UDP `1194`
- Security group: `sg-053bc2df18b75c35b`
- Client CIDR: `10.250.0.0/22`

Perfis disponiveis no Desktop:

- `/Users/luizpenha/Desktop/Monetarie-HML-OpenVPN-Profiles/Monetarie-HML-OpenVPN-Admin.ovpn`
- `/Users/luizpenha/Desktop/Monetarie-HML-OpenVPN-Profiles/Monetarie-HML-OpenVPN-Gabriel-Cardoso.ovpn`
- `/Users/luizpenha/Desktop/Monetarie-HML-OpenVPN-Profiles/Monetarie-HML-OpenVPN-Wagner-Vieira.ovpn`
- `/Users/luizpenha/Desktop/Monetarie-HML-OpenVPN-Profiles/Monetarie-HML-OpenVPN-Herbeth-Santana.ovpn`

Rotas/NAT empurrados ou gerenciados pelo OpenVPN:

- `10.45.0.0/16`
- `10.173.1.247/32`
- `200.218.64.0/18`
- `200.160.160.0/22`
- dominio `rsfn.net.br`

Observacao importante: depois dos testes, o snapshot local do Mac mostrou rotas por interfaces/gateways diferentes das usadas logo apos o apply. Antes de repetir qualquer teste do `200.160.162.200`, reconectar explicitamente o profile Monetarie HML OpenVPN correto e validar:

```bash
route -n get 200.160.162.200
route -n get 10.173.1.247
```

O esperado para esses testes via OpenVPN Monetarie e que passem pelo tunel Monetarie, nao por outra VPN corporativa.

### Route 53 Resolver RSFN

- Outbound resolver endpoint: `rslvr-out-203e924c6d7849e38`
- Status: `OPERATIONAL`
- IPs:
  - `10.45.1.53`
  - `10.45.2.53`
- Resolver rule: `rslvr-rr-545067c07bde42b9b`
- Dominio: `rsfn.net.br.`
- Status: `COMPLETE`
- Forwarders:
  - `200.218.64.6`
  - `200.218.64.134`
  - `200.218.64.38`
  - `200.218.64.166`
  - `200.218.64.70`
  - `200.218.64.198`

### ECS

Cluster: `monetarie-greenfield-homolog`

Snapshot final em 2026-06-22 18:18 BRT:

| Service | Desired | Running | Pending | Task revision | Rollout |
|---|---:|---:|---:|---:|---|
| `backoffice` | 1 | 1 | 0 | 6 | COMPLETED |
| `clst-api` | 1 | 1 | 0 | 7 | COMPLETED |
| `core-admin-ui` | 1 | 1 | 0 | 6 | COMPLETED |
| `core-api` | 1 | 1 | 0 | 12 | COMPLETED |
| `core-banking-ui` | 1 | 1 | 0 | 6 | COMPLETED |
| `core-merchant-ui` | 1 | 1 | 0 | 6 | COMPLETED |
| `docs-portal` | 1 | 1 | 0 | 6 | COMPLETED |
| `npc-admin-ui` | 1 | 1 | 0 | 6 | COMPLETED |
| `npc-api` | 1 | 1 | 0 | 7 | COMPLETED |
| `pix-admin-ui` | 1 | 1 | 0 | 6 | COMPLETED |
| `pix-api` | 1 | 1 | 0 | 16 | COMPLETED |
| `spb-admin-ui` | 1 | 1 | 0 | 6 | COMPLETED |
| `spb-api` | 1 | 1 | 0 | 12 | COMPLETED |
| `sta-admin-ui` | 1 | 1 | 0 | 6 | COMPLETED |
| `sta-api` | 1 | 1 | 0 | 7 | COMPLETED |

HSM runtime em `pix-api` e `spb-api`:

- `RTM_HSM_BASE_URL=https://cloudhsm-hml.priv.rtmcloud.net.br:6443`
- `RTM_HSM_VHSM=60042`
- `RTM_HSM_ENABLED=false`
- `RTM_HSM_TIMEOUT_MS=8000`
- `RTM_HSM_KEY_SIZE_BITS=2048`

## HSM HML

Endpoint correto:

- Host: `cloudhsm-hml.priv.rtmcloud.net.br`
- IP esperado: `10.173.1.247`
- API: `https://cloudhsm-hml.priv.rtmcloud.net.br:6443`
- vHSM ID: `60042`

Credenciais:

- Arquivo local: `/Users/luizpenha/Desktop/HSM - HML.txt`
- Modo do arquivo validado anteriormente: `600`
- O arquivo contem credencial de aplicacao, token e credencial VCO.
- Os valores do arquivo batem com AWS Secrets Manager para PIX e SPB:
  - `monetarie/homolog/hsm/pix/hml/crypto_user`
  - `monetarie/homolog/hsm/pix/hml/token`
  - `monetarie/homolog/hsm/spb/hml/crypto_user`
  - `monetarie/homolog/hsm/spb/hml/token`

Resultados ja validados:

- DNS interno resolve `cloudhsm-hml.priv.rtmcloud.net.br -> 10.173.1.247`.
- TCP `10.173.1.247:6443` abriu.
- `GET /version` em `:6443`: HTTP `200`, Kubernetes API Server `v1.31.12`.
- `GET /readyz`: HTTP `200`.
- `GET /livez`: HTTP `200`.
- `GET /`: HTTP `403`.
- `POST /v1/kmip/60042/get-session-credential`:
  - sem auth HTTP: HTTP `403`, usuario `system:anonymous`
  - Basic Auth com usuario/token HSM: HTTP `403`, usuario `system:anonymous`
  - Bearer token HSM: HTTP `401 Unauthorized`
  - VCO em body/basic/bearer tambem sem retorno de sessao
- Nenhum `returnValue` de sessao foi obtido.
- TLS em `:6443` usa cadeia self-signed para o trust store local; `curl` sem `-k` falha validacao.

Conclusao HSM:

- Rede ate `:6443` esta funcional.
- A porta `:6443` esta protegida por Kubernetes/gateway antes do KMIP.
- Falta credencial HTTP/Kubernetes/gateway, path correto de ingress, ou ajuste do lado RTM para a API KMIP real.
- Nao ativar `RTM_HSM_ENABLED=true` ate isso ser resolvido e os UIDs das chaves serem confirmados.

Documento detalhado:

- `docs/handoff/2026-06-22-hsm-hml-6443-validation.md`

## Endpoint de teste RTM/RSFN `200.160.162.200:63351`

URL solicitada:

- `http://200.160.162.200:63351/index.html`

O que foi feito:

- VPC route table ja tinha `200.160.160.0/22 -> tgw-051f1a3c159dfb25b`.
- TGW route table nao tinha esse prefixo.
- Criada rota TGW estatica `200.160.160.0/22 -> tgw-attach-0b451500fe3362561` via Direct Connect Gateway.
- Terraform aplicou com sucesso e o plano final ficou `No changes`.
- OpenVPN NAT contem `POSTROUTING -s 10.250.0.0/22 -d 200.160.160.0/22 -j MASQUERADE`.
- OpenVPN FORWARD permite `10.250.0.0/22 -> 200.160.160.0/22`.
- Security group do OpenVPN tem egress `0.0.0.0/0`.

Resultado do teste logo apos apply:

- Mac pela VPN: rota entrou no tunel OpenVPN Monetarie, mas `nc`/`curl` para `200.160.162.200:63351` deram timeout.
- EC2 OpenVPN via SSM:
  - `ip route get 200.160.162.200` saiu via `10.45.1.1 dev ens5 src 10.45.1.30`
  - `nc -vz -w 10 200.160.162.200 63351`: timeout
  - `curl http://200.160.162.200:63351/index.html`: timeout
  - `tracepath` nao recebeu replies apos o primeiro hop AWS.

Conclusao:

- A rota do nosso lado agora existe na VPC e no TGW.
- Se o acesso ainda falhar, pedir para RTM/DX validar retorno, firewall remoto ou propagacao BGP/ACL para `200.160.160.0/22` e porta `63351`.

## Terraform

Diretorio:

```bash
cd /Users/luizpenha/monetarie/infra/aws/greenfield
```

Ultimo apply executado:

```bash
terraform apply -auto-approve tfplan-hsm-url-rsfn-dx
```

Recursos principais aplicados nesse ultimo apply:

- Criado `aws_ec2_transit_gateway_route.rsfn_hsm_test_dx`
- Atualizado `pix-api` para `RTM_HSM_BASE_URL=https://cloudhsm-hml.priv.rtmcloud.net.br:6443`
- Atualizado `spb-api` para `RTM_HSM_BASE_URL=https://cloudhsm-hml.priv.rtmcloud.net.br:6443`

Validacao final:

```bash
terraform plan -detailed-exitcode -out=tfplan-post-hsm-rsfn-check
```

Resultado final: `No changes`.

Arquivos `tfplan-*` temporarios foram removidos.

Arquivos Terraform relevantes desta frente:

- `infra/aws/greenfield/locals.tf`
- `infra/aws/greenfield/ecs.tf`
- `infra/aws/greenfield/variables.tf`
- `infra/aws/greenfield/tgw-routes.tf`
- `infra/aws/greenfield/openvpn.tf`
- `infra/aws/greenfield/rsfn-resolver.tf`
- `infra/aws/greenfield/vpc-endpoints.tf`
- `infra/aws/greenfield/scripts/openvpn-user-data.sh.tftpl`

## Git/worktree

Status resumido no momento deste handoff:

- Modificados:
  - `CLAUDE.md`
  - `docs/architecture/diagrams/aws-homolog-topology.mmd`
  - `docs/handoff/CURRENT.md`
  - varios arquivos em `infra/aws/greenfield/*.tf`
- Removidos:
  - `infra/aws/greenfield/rsfn-egress.tf`
  - `infra/aws/greenfield/rsfn-static-dns.tf`
  - `infra/aws/greenfield/scripts/rsfn-egress-user-data.sh.tftpl`
- Novos nao rastreados:
  - `docs/architecture/2026-06-22-monetarie-hml-vpc-10-45-openvpn.md`
  - `docs/handoff/2026-06-22-hsm-hml-6443-validation.md`
  - `docs/handoff/2026-06-22-monetarie-hml-complete-handoff-claude.md`
  - `docs/plans/2026-06-22-dx-vif-alternatives-study.md`
  - `infra/aws/greenfield/openvpn.tf`
  - `infra/aws/greenfield/rsfn-resolver.tf`
  - `infra/aws/greenfield/tgw-routes.tf`
  - `infra/aws/greenfield/vpc-endpoints.tf`
  - `infra/aws/greenfield/scripts/openvpn-user-data.sh.tftpl`

Nao foi feito commit.

## Documentos importantes

- Handoff atual: `docs/handoff/CURRENT.md`
- Este handoff completo: `docs/handoff/2026-06-22-monetarie-hml-complete-handoff-claude.md`
- HSM 6443: `docs/handoff/2026-06-22-hsm-hml-6443-validation.md`
- Arquitetura VPC/OpenVPN: `docs/architecture/2026-06-22-monetarie-hml-vpc-10-45-openvpn.md`
- Diagrama Mermaid: `docs/architecture/diagrams/aws-homolog-topology.mmd`
- Guia original do Luiz para RSFN/DNS: `/Users/luizpenha/cecresa/docs/runbooks/rsfn-dx-routing-client-guide.md`

Documentos historicos de 21/06 podem citar `:60042` como porta. Essa premissa foi superada. Para operacao atual, usar:

- API HSM: `https://cloudhsm-hml.priv.rtmcloud.net.br:6443`
- vHSM ID: `60042`

## Comandos uteis de retomada

Configurar ambiente AWS:

```bash
export AWS_PROFILE=vulcimonetarie
export AWS_REGION=sa-east-1
cd /Users/luizpenha/monetarie
```

Ver Terraform:

```bash
cd infra/aws/greenfield
terraform validate
terraform plan -detailed-exitcode
```

Ver ECS:

```bash
aws ecs describe-services \
  --cluster monetarie-greenfield-homolog \
  --services pix-api spb-api \
  --query 'services[].{service:serviceName,desired:desiredCount,running:runningCount,pending:pendingCount,taskDefinition:taskDefinition,rollout:deployments[0].rolloutState}' \
  --output table
```

Ver HSM env sem segredos:

```bash
for svc in pix-api spb-api; do
  td=$(aws ecs describe-services --cluster monetarie-greenfield-homolog --services "$svc" --query 'services[0].taskDefinition' --output text)
  aws ecs describe-task-definition --task-definition "$td" \
    --query "taskDefinition.containerDefinitions[0].environment[?starts_with(name, 'RTM_HSM_')].[name,value]" \
    --output table
done
```

Ver rota TGW do endpoint de teste:

```bash
aws ec2 search-transit-gateway-routes \
  --transit-gateway-route-table-id tgw-rtb-00c87955e8b181f3f \
  --filters Name=route-search.exact-match,Values=200.160.160.0/22 \
  --output json
```

Testar pela maquina local apos reconectar OpenVPN Monetarie:

```bash
route -n get 10.173.1.247
route -n get 200.160.162.200
nc -G 8 -vz 200.160.162.200 63351
curl -sS --connect-timeout 8 --max-time 15 -o /tmp/rsfn-index.html -w 'http=%{http_code}\n' http://200.160.162.200:63351/index.html
```

Testar HSM health sem credenciais:

```bash
curl --resolve cloudhsm-hml.priv.rtmcloud.net.br:6443:10.173.1.247 \
  -k -sS --connect-timeout 5 --max-time 12 \
  https://cloudhsm-hml.priv.rtmcloud.net.br:6443/version
```

## Proximos passos recomendados

1. Reconectar o profile OpenVPN Monetarie HML e retestar `200.160.162.200:63351`.
2. Se ainda der timeout, acionar RTM/DX com evidencia: rota VPC OK, rota TGW `200.160.160.0/22 -> DX` OK, NAT OpenVPN OK, SG egress OK, timeout tambem da EC2 OpenVPN.
3. Pedir para RTM confirmar a autenticacao/ingress correto para KMIP em `https://cloudhsm-hml.priv.rtmcloud.net.br:6443/v1/kmip/60042/...`.
4. Pedir UIDs das chaves HML da Monetarie no vHSM `60042`.
5. So depois validar `get-session-credential`, `sign-rsa` e `signature-verify-rsa` com saida sanitizada.
6. Manter `RTM_HSM_ENABLED=false` ate os testes reais passarem.
