Definición
Imagina un edificio inteligente donde el acceso no depende solo de tu cargo. La puerta considera: ¿quién eres? (empleado del departamento de finanzas), ¿qué intentas hacer? (acceder al archivo de nóminas), ¿cuándo? (3am en domingo), ¿desde dónde? (red externa). Basándose en TODO esto, decide si dejarte pasar. Eso es ABAC - control de acceso que considera el contexto completo, no solo tu rol.
RBAC (Control Basado en Roles) es como un sistema de tarjetas donde “gerentes” pueden entrar a ciertas salas y “empleados” a otras. Simple pero limitado - no puede expresar “los gerentes pueden acceder a documentos de su propio departamento, pero solo durante horario laboral, y solo si el documento no es confidencial.” ABAC puede. Evalúa atributos del usuario, del recurso, de la acción y del entorno para tomar decisiones sofisticadas.
¿Cuándo necesitas ABAC? Cuando tus reglas de acceso son más complejas que “este rol puede hacer esto.” Hospitales donde los médicos solo pueden ver expedientes de sus propios pacientes. Bancos donde los analistas pueden acceder a informes de clientes de su región pero no de otras. Plataformas multi-tenant donde los datos están estrictamente aislados. ABAC te permite expresar estas políticas complejas sin explotar en miles de roles específicos.
Ejemplo
Expedientes Médicos Hospitalarios: Un médico intenta acceder a un expediente. ABAC evalúa: ¿el paciente está asignado a este médico? ¿El médico está de guardia? ¿Está accediendo desde la red del hospital? ¿El expediente contiene información psiquiátrica que requiere credenciales adicionales? Solo si todas las condiciones se cumplen, se concede acceso.
Documentos Financieros: Un analista quiere ver un informe trimestral. ABAC verifica: ¿el analista pertenece a la división que generó el informe? ¿El informe ya es público o todavía está en período de embargo? ¿Es horario laboral o el analista tiene permiso de acceso 24/7? El acceso depende de la combinación de todos estos factores.
Contenido Geográfico: Una plataforma de streaming decide qué contenido mostrarte basándose en tu ubicación (IP o GPS), tu plan de suscripción, las licencias de contenido por país, y a veces hasta la hora local. ABAC permite estas reglas complejas: “usuarios premium en España pueden ver esta película excepto si están usando VPN.”
Salas de Estudio de Biblioteca: Una universidad permite reservar salas de estudio. ABAC considera: ¿eres estudiante activo? ¿La sala está equipada para lo que necesitas? ¿Es periodo de exámenes (límites de tiempo más estrictos)? ¿Ya tienes otra reserva activa? Las políticas se adaptan a múltiples variables sin crear roles infinitos.
Analogía
El Edificio Inteligente: RBAC es como tener tres tipos de tarjeta: empleado, gerente, director. ABAC es como un sistema inteligente que considera: tu tarjeta (quién eres), a qué piso vas (qué recurso), si entras o sales (qué acción), la hora actual, si hay alarma de incendio activada, si ese piso está en mantenimiento. Múltiples factores, decisión dinámica.
El Control de Seguridad del Aeropuerto: No basta con tener pasaporte (rol). El agente verifica: ¿tu vuelo sale hoy? ¿Tu pasaporte es válido para el destino? ¿Estás en alguna lista? ¿Tu equipaje pasó el escáner? Múltiples atributos de ti, de tu vuelo, y del entorno determinan si pasas.
El Club VIP con Reglas Complejas: RBAC: “miembros VIP entran gratis.” ABAC: “miembros VIP entran gratis si es antes de medianoche, si no están en la lista negra, si hay capacidad disponible, y si el evento no es privado.” Las reglas del mundo real raramente son simples verificaciones de rol.
La Sala de Estudio de la Biblioteca: No basta con ser estudiante. ¿Tienes multas pendientes? ¿La sala que quieres está disponible? ¿Es periodo de exámenes (más restricciones)? ¿Ya tienes otra sala reservada? ABAC evalúa todas estas condiciones dinámicamente en lugar de asignar permisos estáticos.
Code Example
// Motor de Políticas ABAC
const abacPolicy = {
canEdit: (user, document, context) => {
// Atributos del usuario
const userDept = user.attributes.department;
const userRole = user.attributes.role;
// Atributos del recurso
const docDept = document.attributes.department;
const docClassification = document.attributes.classification;
// Atributos del entorno
const currentHour = context.time.getHours();
const isBusinessHours = currentHour >= 9 && currentHour <= 17;
// Evaluación de política compleja
return (
userDept === docDept &&
userRole === 'editor' &&
isBusinessHours &&
(docClassification !== 'confidential' ||
user.attributes.clearanceLevel >= 3)
);
}
};
// Uso en API
app.put('/api/documents/:id', async (req, res) => {
const user = req.user;
const document = await getDocument(req.params.id);
const context = { time: new Date() };
if (!abacPolicy.canEdit(user, document, context)) {
return res.status(403).json({
error: 'Acceso denegado',
reason: 'La evaluación de política falló'
});
}
// Proceder con la actualización
});
Notas de Seguridad
- CRÍTICO: Las políticas ABAC deben estar centralizadas y bajo control de versiones - Vulnerabilidades comunes: (1) Inyección de políticas - nunca concatenar entrada de usuario en expresiones de política, (2) Falsificación de atributos - siempre validar fuentes e integridad de atributos, (3) Bypass de políticas - asegurar que todos los caminos de código verifiquen políticas, no solo flujos principales, (4) DoS de rendimiento - políticas complejas pueden ser costosas; implementar caché y circuit breakers, (5) Frescura de atributos - atributos en caché obsoletos pueden llevar a acceso no autorizado, (6) Conflictos de políticas - comportamiento indefinido cuando múltiples políticas entran en conflicto; implementar reglas de precedencia claras - Siempre auditar cambios de política y registrar todas las decisiones de autorización con contexto completo para análisis forense - Probar casos extremos como atributos null/undefined..