RBACX tras seis meses: ReBAC, políticas de IA y autorización por lotes
Durante los últimos seis meses, la librería RBACX ha evolucionado de un motor básico RBAC/ABAC a un sistema integral que incluye ReBAC y políticas generadas por IA. Se han solucionado vulnerabilidades críticas: la omisión de denegaciones en el compilador, DoS mediante recursión de condiciones y SSRF en la fuente HTTP. El sistema ahora aplica MAX_CONDITION_DEPTH=50, verify_ssl y bloquea direcciones IP privadas.
La verificación de permisos por lotes se implementa mediante los métodos evaluate_batch_async y evaluate_batch_sync en la clase Guard. Esto resuelve el problema de múltiples solicitudes en aplicaciones de interfaz de usuario, donde la evaluación paralela usando asyncio.gather reduce la latencia.
decisions = await guard.evaluate_batch_async([
(subject, Action("read"), doc, ctx),
(subject, Action("write"), doc, ctx),
(subject, Action("delete"), doc, ctx),
])
ReBAC: Grafos de relaciones en lugar de atributos
La autorización basada en relaciones (ReBAC) introduce un modelo de "quién concedió qué a quién", similar a Google Drive o GitHub. Los permisos se definen mediante un grafo de entidades: el propietario de un documento delega el acceso. Las integraciones con OpenFGA y SpiceDB admiten llamadas síncronas/asíncronas, incluyendo gRPC por lotes para listas de objetos. Un grafo local es adecuado para pruebas.
La implementación requirió reestructurar la evaluación de políticas basándose en la especificidad del recurso, con pruebas de equivalencia entre las rutas de compilación e interpretación.
Generación de políticas con LLMs
El paquete adicional rbacx[ai] añade AIPolicy para automatizar la creación de políticas a partir de esquemas OpenAPI. El proceso: generación por LLM → validación con JSON Schema → reintentos → linter → compilación.
from rbacx.ai import AIPolicy
ai = AIPolicy(api_key="sk-...", model="gpt-4o")
result = await ai.from_schema(openapi_schema)
guard = Guard(result.policy)
Métodos como refine_policy para refinamiento en lenguaje natural y explain_decision mantienen el determinismo del motor. Se incluye soporte para OpenAI, Ollama, Azure y proveedores compatibles con límites de reintentos.
La abreviatura roles: ["admin", "editor"] simplifica RBAC sin perder flexibilidad. Se combina con condition mediante AND, con el linter advirtiendo sobre superposiciones.
Mejoras adicionales de rendimiento
- Caché con adaptador Redis (
rbacx[cache-redis]) para despliegues multi-host. - Adaptador asíncrono para Django ASGI 4.1+.
- Modo de tipos estrictos:
Guard(policy, strict_types=True)desactiva conversiones implícitas de tipos. - Trazado de decisiones con
explain=Truepara depurar coincidencias de reglas.
Estos cambios garantizan escalabilidad en producción: desde interfaces PyQt hasta microservicios.
Conclusiones clave
- Seguridad primero: Parcheadas omisiones de denegación, recursión DoS y SSRF; comportamiento de fallo cerrado.
- Integraciones ReBAC: OpenFGA/SpiceDB con gRPC por lotes, grafo local para desarrollo.
- Automatización con IA: Políticas desde OpenAPI sin DSL manual, con validación y reintentos.
- Permisos por lotes: Evaluación paralela para interfaces y listas de objetos.
- Rendimiento: Caché Redis, Django asíncrono, tipado estricto.
— Editorial Team
Aún no hay comentarios.