Categorías
IAM Seguridad

Autorizaciones. 3de4 – Estándares y librerías.

En la entrada anterior, expuse los modelos más populares de control de acceso, ACL, RBAC, ABAC. Doy por hecho que las conoces, pero si no, puedes refrescar la memoria aquí. 🤓

Toca hablar de estándares y librerías que nos simplifiquen la vida, pero es sencillo, o apuestas por Software bajo el estándar XACML o por librerías que apuestan por su propia sintaxis de definición de políticas.

Empiezo por algunas de estas últimas:

Librerias

CASBIN

Es una librería de autorizaciones bastante sorprendente por su filosofía. Su fuerte es que puedes definir el modelo de autorizaciones que desees mediante software.

https://casbin.org/

La sintaxis de definición no sigue ningún estándar, pero es bastante clara, un ejemplo para un RBAC

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

Y para un ABAC

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == r.obj.Owner

Dispone de implementación para la mayoría de los lenguajes de programación y cuenta de un potente sistema de plugin.

Open Policy Agent (OPA)

Incubada por la Cloud Native Computing Foundation, es un motor de políticas multipropósito que se definen mediante el lenguaje REGO

https://www.openpolicyagent.org/

Se suele utilizar principalmente para definir políticas en el mundo Kubernetes, en microservices, CI/CD pipelines, API gateways, y mucho más.

Policy Server

Viene del mundo .NET y en concreto de Motor de Autenticación Identity Server, bastante popular en el mundo Microsoft.

PolicyServer es una solución de autorización que separa de autenticación y autorización, en su versión de pago incluye una aplicación de administración, jerarquía de políticas y la integración con la identidad.

En su versión Libre es una demo de su integración con el framework de .NET para autorizaciones

https://policyserver.io/

Es un PBAC / RBAC muy interesante si todo tu mundo es .NET

Estándares

XACML

Es un estándar que nació en el principio de los años 2000, casi nada, y nos va a permitir definir un políticas de control de acceso. Viene del Inglés, eXtensible Access Control Markup Language, así que… sí, están definidos en xml pero el estándar también contempla la definición en JSON.

Empezamos bien, seguir un estándar suele ser positivo, especialmente cuando tienes que integrarte con los demás.

Actualmente, la versión vigente es la 3, que fue estandarizada en enero de 2013. Y aunque se puede definir los diferentes modelos, está muy centrada en ABAC. Todo son atributos.

Su estructura consta de una jerarquía, cuyo raíz es la política, la cual tiene contiene instrucciones para indicar cuando se aplica y las reglas para aceptar o rechazar la autorización según unas condiciones.

La condiciones de aplicación se definen con atributos, los cuales los básicos son los relacionado con el sujeto, recurso, acción y entorno. ¿Te suena?

Te enlazo a un ejemplo, en este, podrás ver una política que consta de 4 reglas y las condiciones de match para que la regla sea evaluada. Puedes ver que para un acceso y un rol de un usuario se da permiso a un recurso en concreto, la última regla es una denegación de acceso en caso de no cumplir con ningún rol.

https://github.com/wso2/balana/blob/master/modules/balana-samples/hierarchical-resource/resources/hierarchical-resource-policy.xml

Las políticas, a su vez, se pueden agrupar en conjuntos, lo cual nos permite construir bloques mayores y la reutilización.

Y sí, esto es un RBAC, pero el Rol es un atributo, así implementado con ABAC. ¿Todos contentos?

Te dejo enlace a la especificación, al principio asusta, pero luego es bastante sencillo. Lo complicado no es entenderlo, sino definir una estrategia para utilizarlo en tus sistemas.

http://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-os-en.html

AXIOMATICS

Es un producto propietario, totalmente orientado a XACML, con grandes clientes gubernamentales y privados detrás.

Es tan bueno como caro, cubre todas las capas posibles a proteger y han realizado contribuciones importante al mundo AuthZ. Por ejemplo, liberaron ALFA, una simplificación de la definición de políticas mediante un lenguaje menos descriptivo. ¡XML duele! Además construyeron un plugin para eclipse que permite definir políticas con esta sintaxis .

Si tienes pasta, es una buena opción.

BALANA

Otro que se apoya en XACML, es parte del popular software de gestión de identidades de wso2

https://wso2.com/identity-and-access-management/

Esta muy verde, si tiene implementado un motor xacml que además está integrado con el servidor de identidad de wso2, pero la administración está desarrollada muy superficialmente, puedes dar de alta políticas con unos asistentes muy sencillos. Difícilmente se podría confiar en este producto según sale de la caja.

Pero es todo software libre y java, así que hay tienes un producto que lo puedes adaptar a tus necesidades con unos pilares bastantes sólidos.

¡Suerte!

AUTHZFORCE

También es Open Source, motor de políticas con la sintaxis XACML que dispone de todos los roles PIP, PAP, PDP…

https://gitlab.ow2.org/authzforce/server

Aunque es una opción menos conocida, tiene un API REST muy completa y dispones todo el código en Java para que lo adaptes a tus necesidades

EPAL (Enterprise Privacy Authorization Language)

Realmente no es un estándar, pero si esta muy bien definido por parte de IBM, eso sí, definido en 2003 y sin mucha evolución.

https://www.w3.org/Submission/2003/SUBM-EPAL-20031110/

Se puede considerar que esta en la línea filosófica de XACML, pero no es tan completo, carece de muchas de sus funcionalidades, muchas creo que básicas, como anidamiento de políticas, poder hacer referencia, gestión de error, orientación total hacia el atributo…

Y lo más significativo, no conozco ninguna librería usable para tener un criterio practico

Es útil para tener otro punto de vista y madurar conceptos

Conclusión

Yo hace tiempo que concluí que este mundo de la AuthZ, a pesar de tener unas bases teóricas muy fuertes, XACML se definió a principios de los 2000 y OAuth tiene los scopes… sigue estando muy poco explorado.

La mayoría del software se apoya en RBAC y muchos de ellos desarrollados por la propia solución o asociados a grupos de usuarios como si fueran un rol.

Pero si quieres un ABAC, y con las nuevas necesidades de gestión de recursos, hay poco donde elegir. Axiomatics es la opción más completa y bajo un estándar… y propietaria, si decides algo libre, tendrás que picar mucho código.

¿Oportunidad de negocio?

¡A dale caña! 💪

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *