Saltar al contenido principal

Aislamiento multi-tenant

ERPly Pro corre como SaaS multi-tenant con aislamiento estricto por tenantId en todas las capas.

Capas de aislamiento

  1. Cognito — un User Pool por entorno (sandbox/staging/prod). Cada usuario lleva la claim tenant_id.
  2. Lambda authorizer — valida JWT, extrae tenant_id, compara contra el header X-Tenant-Id. Cualquier disparidad → 403.
  3. DynamoDB — todas las tablas usan PK = tenant#<tenantId> como prefijo, y los clientes (TenantBoundDynamoClient) inyectan el filtro automáticamente.
  4. Secrets Manager — los PFX y passphrases se almacenan bajo erplypro/<env>/tenants/<tenantId>/p12. La política IAM de la Lambda permite sólo el patrón erplypro/<env>/tenants/${aws:PrincipalTag/tenantId}/* mediante session tags.
  5. Logs — Powertools Logger inyecta tenantId y correlationId en cada línea para auditoría.

Bypass controlado

Los componentes administrativos (cron de archivado, métricas globales) usan TenantBypassDeniedError como guard: la única manera de pasar tenant_id=None es vía un flag explícito (reason="archive-sweep") que queda en logs.

Más detalle en US-EP-04 (DynamoDB + Secrets) y US-EP-03 (Cognito + authorizer).