Aislamiento de datos entre entornos

Cada entorno de KeenAuth (development, staging, production en cada uno de sus proyectos) es un tenant independiente. Los usuarios, las organizaciones, las aplicaciones, las sesiones, las claves, los registros y los eventos de un entorno nunca son visibles desde otro entorno, incluido otro entorno de su propia cuenta. Esta página explica cómo se aplica ese límite.

Dos líneas de defensa independientes

Los entornos comparten un esquema de base de datos, y cada fila que pertenece a un entorno incluye el identificador de ese entorno. El aislamiento se aplica dos veces, y ambas comprobaciones deben fallar al mismo tiempo para que los datos crucen el límite:

  1. Ámbito de entorno tipado en la aplicación. Cada solicitud se resuelve a exactamente un entorno a partir de su nombre de host o de su credencial, antes de leer cualquier dato. El código que lee o escribe datos de un entorno no puede abrir una transacción de base de datos sin ese ámbito; una llamada sin él se rechaza antes de ejecutar la consulta.
  2. Seguridad a nivel de fila de PostgreSQL. Cada tabla que contiene datos de entornos tiene la seguridad a nivel de fila habilitada y forzada, de modo que la política también se aplica al propietario de la tabla. Cada transacción establece el entorno actual, y una fila solo es visible cuando su entorno coincide. Una transacción que no ha establecido un entorno no ve ninguna fila. Ningún rol de aplicación o de mantenimiento puede omitir la seguridad a nivel de fila.

Cada tabla con ámbito de entorno comienza su clave primaria y sus índices con el identificador del entorno, de modo que la condición de aislamiento no añade una búsqueda independiente a las consultas.

Búsquedas por token o clave

Algunas solicitudes llegan con solo un valor secreto, por ejemplo un código de autorización, un token de actualización o una clave de API. KeenAuth localiza ese valor mediante una búsqueda basada únicamente en su resumen (digest) y, después, compara el entorno del registro almacenado con el entorno de la solicitud. Si no coinciden, el valor se trata como no válido.

Qué ve al cruzar el límite

Intento Respuesta
Leer un recurso que pertenece a otro entorno 404 Not Found; la respuesta no revela que el recurso existe
Usar un token de acceso emitido por otro entorno 401 Unauthorized; cada entorno tiene su propio emisor y sus propias claves de firma (JWKS)
Autenticarse con un cliente registrado en otro entorno invalid_client

Más allá de la base de datos

El mismo límite se aplica a todos los demás lugares donde se almacenan datos de entornos:

Trasladar la configuración de un entorno a otro (promoción de configuración) copia únicamente los ajustes. Los secretos y los datos de usuarios finales u organizaciones nunca forman parte de un paquete de promoción.

Cómo se prueba el aislamiento

Un conjunto de pruebas de aislamiento entre tenants se ejecuta en la integración continua de KeenAuth y bloquea un cambio cuando falla. Comprueba que:

Una comprobación del esquema también rechaza una nueva tabla de datos de entorno que no tenga la columna del identificador de entorno.

Relacionado