Aislamiento multi-tenant
ERPly Pro corre como SaaS multi-tenant con aislamiento estricto por tenantId en todas las capas.
Capas de aislamiento
- Cognito — un User Pool por entorno (sandbox/staging/prod). Cada usuario lleva la claim
tenant_id. - Lambda authorizer — valida JWT, extrae
tenant_id, compara contra el headerX-Tenant-Id. Cualquier disparidad →403. - DynamoDB — todas las tablas usan
PK = tenant#<tenantId>como prefijo, y los clientes (TenantBoundDynamoClient) inyectan el filtro automáticamente. - 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ónerplypro/<env>/tenants/${aws:PrincipalTag/tenantId}/*mediante session tags. - Logs — Powertools
LoggerinyectatenantIdycorrelationIden 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).