# Pré-configuração HSM RTM HML e IBM MQ HML

Data: 2026-06-21

## Escopo

Este documento registra a pré-configuração de homologação para:

- HSM RTM HML usado pelas cabines PIX e SPB.
- IBM MQ HML usado pela cabine SPB.
- Manutenção da regra de arquitetura: o Core nunca assina mensagens BACEN, TED, SPB, PIX, DICT ou ICOM-SPI. O Core integra por NATS e não deve receber credenciais ou parâmetros de HSM operacional.

Os dados de entrada vieram dos arquivos locais informados pelo dono do ambiente:

- `/Users/luizpenha/Desktop/HSM - HML.txt`
- `/Users/luizpenha/Desktop/Keys - Monetarie.zip`

Os valores sensíveis desses arquivos não foram versionados no repositório.

## HSM RTM HML

Endpoint HML configurado para PIX e SPB:

- Host: `cloudhsm-hml.priv.rtmcloud.net.br`
- IP privado esperado na rede RTM: `10.173.1.247`
- Base URL ECS: `http://cloudhsm-hml.priv.rtmcloud.net.br:60042`
- vHSM: `60042`
- Timeout: `8000` ms
- Tamanho de chave padrão: `2048` bits

Secrets Manager, sem valores no Git:

- `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`

Serviços que recebem a configuração:

- `pix-api`
- `spb-api`

Serviço que não recebe a configuração:

- `core-api`

Estado operacional aplicado:

- `RTM_HSM_ENABLED=false`

Motivo: o pacote HML recebido trouxe endpoint, vHSM, usuário criptográfico e token, mas não trouxe os UIDs das chaves privadas e públicas que serão usados nas assinaturas. Além disso, a frente de teste HSM registrou que o console web `:443` do CloudHSM HML abre pela rota privada, mas a API KMIP `:60042` ainda retorna timeout a partir das origens AWS atuais. Sem UIDs e sem liberação da API `:60042`, qualquer declaração de assinatura real seria incorreta.

Validação empírica sem segredo, executada via SSM na EC2 `rsfn-egress` em 2026-06-21 16:12 BRT:

- `cloudhsm-hml.priv.rtmcloud.net.br` resolveu para `10.173.1.247`.
- TCP `cloudhsm-hml.priv.rtmcloud.net.br:443` retornou OK.
- TCP `cloudhsm-hml.priv.rtmcloud.net.br:60042` retornou falha de conexão.

Critério para ativação:

1. Receber os UIDs das chaves HML da Monetarie no HSM RTM.
2. Definir o UID privado da SPB para C15 e decifragem C14.
3. Definir o UID privado do PIX para assinatura XMLDSig SPI, ICOM e DICT.
4. Definir o UID público do PIX quando o fluxo de verificação exigir.
5. Confirmar liberação RTM da API TCP `60042` para a origem AWS definida.
6. Alterar `RTM_HSM_ENABLED=true` somente depois de validar `get-session-credential`, `sign-rsa`, `signature-verify-rsa` e, para SPB, `cipher/rsa/decrypt`.

## IBM MQ HML

Ambiente permitido para esta etapa:

- VM: `097514SP_MQ_HML`
- IP: `172.31.2.50`
- Queue Manager SPB01: `QM.46026562.01`
- Queue Manager MES01: `QM.46026562.02`
- Listener primário: `1514`
- Listener secundário HML: `12522`
- Canal: `APP.SVRCONN`
- Usuário MQ da aplicação: `spb_server`

O acesso de produção e o ambiente de contingência não foram configurados nesta etapa.

Secret criado para a chave SSH HML:

- `monetarie/homolog/mq/spb/hml/ssh_private_key`

A chave SSH fica preparada no Secrets Manager para uso futuro do sidecar IBM MQ. Ela não é injetada no `spb-api`, porque o backend SPB não deve carregar uma chave privada que pertence ao túnel SSH do sidecar.

Variáveis HML configuradas no `spb-api`:

- `RTM_RSFN_HML_MQ_HOSTNAME=097514SP_MQ_HML`
- `RTM_RSFN_HML_MQ_IP=172.31.2.50`
- `IBM_MQ_HOST=172.31.2.50`
- `IBM_MQ_PORT=1514`
- `IBM_MQ_QM=QM.46026562.01`
- `IBM_MQ_CHANNEL=APP.SVRCONN`
- `IBM_MQ_USER=spb_server`
- `IBM_MQ_SPB01_HOST=172.31.2.50`
- `IBM_MQ_SPB01_PORT=1514`
- `IBM_MQ_QM_SPB01=QM.46026562.01`
- `IBM_MQ_SPB01_CHANNEL=APP.SVRCONN`
- `IBM_MQ_MES01_HOST=172.31.2.50`
- `IBM_MQ_MES01_PORT=12522`
- `IBM_MQ_QM_MES01=QM.46026562.02`
- `IBM_MQ_MES01_CHANNEL=APP.SVRCONN`
- `BACEN_RTM_SSH_USER=herberth`
- `BACEN_RTM_SSH_HOST=172.31.2.50`
- `BACEN_RTM_SSH_PORT=22`
- `IBM_MQ_REMOTE_HOST=127.0.0.1`
- `IBM_MQ_REMOTE_PORT=1514`
- `IBM_MQ_TUNNEL_PORT=1514`

Estado operacional aplicado:

- `IBM_MQ_ENABLED=false`
- `IBM_MQ_TRANSPORT=sidecar`
- `IBM_MQ_SIDECAR_URL=http://localhost:9080`

Padrão de domínio aplicado:

- `SPB01` usa final `.01`: `QM.46026562.01`, porta `1514`.
- `MES01` usa final `.02`: `QM.46026562.02`, porta `12522`.

Motivo: o deploy atual ainda não coloca o sidecar IBM MQ dentro da task do `spb-api` e a comunicação RSFN/MQ HML precisa ser validada pela rota correta antes de habilitar envio real. Manter `IBM_MQ_ENABLED=false` evita boot quebrado e evita envio operacional incompleto.

Validação empírica sem segredo, executada via SSM na EC2 `rsfn-egress` em 2026-06-21 16:12 BRT:

- TCP `172.31.2.50:22` retornou falha de conexão.
- TCP `172.31.2.50:1514` retornou falha de conexão.
- TCP `172.31.2.50:12522` retornou falha de conexão.

Critério para ativação:

1. Confirmar rota da VPC Monetarie até `172.31.2.50`.
2. Confirmar SSH para a VM HML usando a chave armazenada no Secrets Manager.
3. Confirmar alcance do listener MQ por túnel ou rota direta.
4. Publicar imagem atualizada do `monetarie/spb-mq-sidecar`.
5. Alterar a task definition do `spb-api` para incluir o container sidecar.
6. Injetar `BACEN_RTM_SSH_KEY` somente no container sidecar.
7. Ativar `IBM_MQ_ENABLED=true` após `/healthz`, `/readyz` e `/statusz` do sidecar retornarem estado consistente.

## Validação segura

Comandos permitidos sem expor segredo:

```bash
aws secretsmanager describe-secret --secret-id monetarie/homolog/hsm/pix/hml/token
aws secretsmanager describe-secret --secret-id monetarie/homolog/hsm/spb/hml/token
aws secretsmanager describe-secret --secret-id monetarie/homolog/mq/spb/hml/ssh_private_key
```

Validar task definition sem imprimir segredos:

```bash
aws ecs describe-task-definition \
  --task-definition monetarie-pix-api-homolog \
  --query 'taskDefinition.containerDefinitions[0].environment'

aws ecs describe-task-definition \
  --task-definition monetarie-spb-api-homolog \
  --query 'taskDefinition.containerDefinitions[0].environment'
```

Validação de rede permitida:

```bash
dig +short cloudhsm-hml.priv.rtmcloud.net.br
nc -vz cloudhsm-hml.priv.rtmcloud.net.br 443
nc -vz cloudhsm-hml.priv.rtmcloud.net.br 60042
nc -vz 172.31.2.50 22
nc -vz 172.31.2.50 1514
nc -vz 172.31.2.50 12522
```

Não executar `get-session-credential` em shell interativo, SSM command ou log de pipeline usando token em linha de comando. Se for necessário validar a credencial, usar arquivo temporário com permissão restrita, apagar o arquivo em seguida e registrar somente código HTTP e presença de `returnValue`, nunca o token de sessão.

## Decisão de arquitetura

PIX e SPB são as únicas cabines que podem usar o HSM para mensagens financeiras e regulatórias. O Core não deve assinar, decifrar nem armazenar chaves de assinatura BACEN.

MQ HML pertence ao domínio SPB. PIX usa HSM para assinatura das mensagens SPI, ICOM e DICT, mas não usa IBM MQ SPB.
