Saltar a contenido

Validacion Multi-Tenant Sandbox

Estado: VALIDADO EN VPS

Objetivo

Validar que el sandbox PostgreSQL respete separacion de lectura entre alpuntodeventa y ladirecta, y que la base no quede expuesta publicamente.

Comandos de validacion

1. Validar compose

bash cd /opt/stacks/openclaw/infra/data-foundation/postgres-sandbox docker compose config docker compose ps

2. Levantar sandbox

bash docker compose up -d

3. Listar tenants

bash docker exec -i openclaw-postgres-sandbox \ psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" \ -c "select tenant_id, tenant_name from sandbox_mt.tenants order by tenant_id;"

Resultado esperado:

  • alpuntodeventa
  • ladirecta

4. Consultar ventas como alpuntodeventa

bash docker exec -i openclaw-postgres-sandbox \ psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" \ -c "set role app_alpuntodeventa_reader; select tenant_id, sale_reference from sandbox_mt.ventas order by id; reset role;"

Resultado esperado:

  • solo fila alpuntodeventa
  • referencia Venta Demo APV

5. Consultar ventas como ladirecta

bash docker exec -i openclaw-postgres-sandbox \ psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" \ -c "set role app_ladirecta_reader; select tenant_id, sale_reference from sandbox_mt.ventas order by id; reset role;"

Resultado esperado:

  • solo fila ladirecta
  • referencia Venta Demo La Directa

6. Intentar acceso cruzado

bash docker exec -i openclaw-postgres-sandbox \ psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" \ -c "set role app_alpuntodeventa_reader; select tenant_id, sale_reference from sandbox_mt.ventas where tenant_id = 'ladirecta'; reset role;"

Resultado esperado:

  • 0 rows

7. Confirmar lectura global autorizada

bash docker exec -i openclaw-postgres-sandbox \ psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" \ -c "set role app_global_reader; select tenant_id, sale_reference from sandbox_mt.ventas order by tenant_id, id; reset role;"

Resultado esperado:

  • una fila de alpuntodeventa
  • una fila de ladirecta

8. Confirmar no exposicion publica

bash docker ps --filter name=openclaw-postgres-sandbox docker inspect openclaw-postgres-sandbox --format '{{json .HostConfig.PortBindings}}' ss -ltnp | grep 5432

Resultado esperado:

  • sin PortBindings publicados
  • sin 0.0.0.0:5432
  • sin 127.0.0.1:5432 salvo que se configure explicitamente para pruebas

Evidencia minima a registrar

  • salida de docker compose ps
  • salida de consultas por rol
  • confirmacion de 0 rows en acceso cruzado
  • confirmacion de ausencia de publicacion del puerto 5432