Files
deploy_langfuse_oci/Security.md

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:

https://redis.io/docs/manual/security/encryption/