7.8 KiB
Configuração TLS/SSL para PostgreSQL e Redis no Langfuse (OCI)
Objetivo
Este documento descreve como configurar comunicação segura via TLS/SSL entre:
- Langfuse
- Langfuse Worker
- PostgreSQL gerenciado na OCI
- Redis gerenciado na OCI
O objetivo é garantir:
- criptografia em trânsito
- proteção contra interceptação de tráfego
- compliance corporativo
- aderência a políticas de segurança enterprise
- suporte a ambientes privados e híbridos
Arquitetura
Langfuse Pod
↓ TLS
OCI PostgreSQL
Langfuse Worker
↓ TLS
OCI Redis
Conceitos Importantes
TLS
TLS (Transport Layer Security) criptografa a comunicação entre cliente e servidor.
Benefícios:
- impede sniffing de rede
- protege senhas
- protege payloads
- protege traces e eventos
- evita MITM (Man In The Middle)
PostgreSQL TLS
O PostgreSQL suporta TLS nativamente.
O cliente pode:
- validar certificado
- validar hostname
- exigir criptografia
Redis TLS
O Redis gerenciado da OCI suporta TLS.
A conexão é realizada normalmente em:
6380
em vez da porta padrão:
6379
Estratégia Recomendada
PostgreSQL
Usar:
sslmode=require
ou idealmente:
sslmode=verify-full
Redis
Usar:
rediss://
em vez de:
redis://
PostgreSQL — Configuração TLS
DATABASE_URL sem TLS
DATABASE_URL=postgresql://langfuse:password@postgres.internal:5432/langfuse
DATABASE_URL com TLS
sslmode=require
DATABASE_URL=postgresql://langfuse:password@postgres.internal:5432/langfuse?sslmode=require
sslmode disponíveis
| Valor | Descrição |
|---|---|
| disable | sem TLS |
| allow | tenta TLS |
| prefer | prefere TLS |
| require | exige TLS |
| verify-ca | valida CA |
| verify-full | valida CA + hostname |
Recomendação Enterprise
Usar:
sslmode=verify-full
Exemplo Enterprise PostgreSQL
DATABASE_URL=postgresql://langfuse:password@postgres.internal:5432/langfuse?sslmode=verify-full
Certificado CA PostgreSQL
Para verify-full normalmente é necessário:
- CA bundle
- certificado raiz
- trust chain
Montando certificado CA no Kubernetes
Secret TLS
apiVersion: v1
kind: Secret
metadata:
name: postgres-ca
namespace: langfuse
type: Opaque
stringData:
ca.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Volume Mount PostgreSQL CA
volumeMounts:
- name: postgres-ca
mountPath: /etc/ssl/postgres
readOnly: true
Volume PostgreSQL CA
volumes:
- name: postgres-ca
secret:
secretName: postgres-ca
DATABASE_URL com CA
DATABASE_URL=postgresql://langfuse:password@postgres.internal:5432/langfuse?sslmode=verify-full&sslrootcert=/etc/ssl/postgres/ca.crt
Redis TLS
REDIS_URL sem TLS
REDIS_URL=redis://:password@redis.internal:6379
REDIS_URL com TLS
REDIS_URL=rediss://:password@redis.internal:6380
Diferença redis:// vs rediss://
| Prefixo | TLS |
|---|---|
| redis:// | Não |
| rediss:// | Sim |
Certificado Redis CA
Secret Redis
apiVersion: v1
kind: Secret
metadata:
name: redis-ca
namespace: langfuse
type: Opaque
stringData:
ca.crt: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Volume Mount Redis
volumeMounts:
- name: redis-ca
mountPath: /etc/ssl/redis
readOnly: true
Volume Redis
volumes:
- name: redis-ca
secret:
secretName: redis-ca
Variáveis Redis TLS
env:
- name: REDIS_URL
value: "rediss://:password@redis.internal:6380"
- name: NODE_EXTRA_CA_CERTS
value: "/etc/ssl/redis/ca.crt"
NODE_EXTRA_CA_CERTS
Objetivo
Permite ao Node.js confiar na CA customizada.
Isso é importante quando:
- Redis usa CA privada
- PostgreSQL usa CA privada
- OCI usa certificados internos
- ambientes corporativos usam PKI própria
Configuração Completa — Langfuse
containers:
- name: langfuse
image: langfuse:latest
env:
- name: DATABASE_URL
value: "postgresql://langfuse:password@postgres.internal:5432/langfuse?sslmode=verify-full&sslrootcert=/etc/ssl/postgres/ca.crt"
- name: REDIS_URL
value: "rediss://:password@redis.internal:6380"
- name: NODE_EXTRA_CA_CERTS
value: "/etc/ssl/redis/ca.crt"
volumeMounts:
- name: postgres-ca
mountPath: /etc/ssl/postgres
readOnly: true
- name: redis-ca
mountPath: /etc/ssl/redis
readOnly: true
volumes:
- name: postgres-ca
secret:
secretName: postgres-ca
- name: redis-ca
secret:
secretName: redis-ca
Configuração Completa — Worker
containers:
- name: worker
env:
- name: DATABASE_URL
value: "postgresql://langfuse:password@postgres.internal:5432/langfuse?sslmode=verify-full&sslrootcert=/etc/ssl/postgres/ca.crt"
- name: REDIS_URL
value: "rediss://:password@redis.internal:6380"
- name: NODE_EXTRA_CA_CERTS
value: "/etc/ssl/redis/ca.crt"
OCI PostgreSQL — Observações
Dependendo do serviço OCI:
- PostgreSQL pode exigir TLS
- pode fornecer CA própria
- pode exigir whitelist de cipher suites
OCI Redis — Observações
OCI Cache with Redis normalmente:
- já expõe TLS
- usa porta 6380
- exige autenticação
- suporta CA pública
Teste PostgreSQL TLS
Dentro do pod
psql "postgresql://langfuse:password@postgres.internal:5432/langfuse?sslmode=require"
Validar SSL PostgreSQL
SHOW ssl;
Resultado esperado:
on
Teste Redis TLS
redis-cli \
-h redis.internal \
-p 6380 \
--tls \
-a password
Validar certificado Redis
openssl s_client -connect redis.internal:6380
Segurança Recomendada
Nunca usar
sslmode=disable
em produção.
Recomendação OCI
Rede privada
Preferencialmente:
- OKE privado
- PostgreSQL privado
- Redis privado
- Service Gateway
- sem IP público
OCI Vault
Idealmente:
- senhas no OCI Vault
- certificados no OCI Vault
- integração via External Secrets Operator
Melhor prática enterprise
mTLS
Em ambientes críticos pode ser usado:
- mutual TLS
- client certificates
- autenticação bilateral
Troubleshooting
PostgreSQL
certificate verify failed
Normalmente:
- CA incorreta
- hostname inválido
- sslrootcert ausente
Redis
self signed certificate
Normalmente:
- NODE_EXTRA_CA_CERTS ausente
- CA não montada
timeout TLS
Verificar:
- NSG
- Security List
- rota privada
- porta 6380 liberada
Benefícios da Configuração TLS
Segurança
Protege:
- traces
- prompts
- tokens
- payloads
- credenciais
Compliance
Ajuda em:
- LGPD
- ISO 27001
- SOC2
- PCI
Arquitetura Recomendada Final
OKE Cluster
├── Langfuse
├── Worker
└── ClickHouse
TLS
↓
OCI PostgreSQL
TLS
↓
OCI Redis
Object Storage
↓
OCI S3 Compatible API
Referências
OCI PostgreSQL:
https://docs.oracle.com/en-us/iaas/Content/postgresql/home.htm
OCI Redis:
https://docs.oracle.com/en-us/iaas/Content/redis/home.htm
PostgreSQL SSL:
https://www.postgresql.org/docs/current/libpq-ssl.html
Redis TLS: