Una implementación ABAC es más compleja que ACL / RBAC. Algunos marcos incluso le brindan partes de infraestructura para lidiar con esto último. Si las personas y los activos se pueden agrupar en un número relativamente pequeño y fijo de roles / categorías, entonces probablemente sea mejor quedarse con ACL / RBAC. Si los permisos difieren mucho de una persona a otra, ABAC podría proporcionar una solución mejor y más flexible.
Si elige seguir el camino ABAC, lo primero que debe hacer es pasar un tiempo leyendo y entendiendo el estándar XACML . Los ejemplos proporcionados en el documento usan sintaxis compatible con XACML y al principio son un poco difíciles de masticar. Supongo que no desea implementar una solución compatible estándar, por lo que solo necesita las ideas generales de ella.
Conceptos
XACML gira en torno a 4 conceptos y sus atributos: temas , acciones , recursos y entorno . Hay algunos más, pero estos son los más importantes. Todo lo demás está construido sobre ellos. Si tuviera que hacer una oración con estos conceptos, podría ser algo similar a: los sujetos realizan acciones sobre los recursos en un determinado entorno . Aplicar esto a su escenario se traduciría en algo como:
- Leslie abre la página web del administrador de precios.
- Leslie crea un precio de viaje utilizando la página web del administrador de precios.
Colección de atributos
Lo primero que debemos hacer es reunir los atributos relevantes de los conceptos mencionados anteriormente. Idealmente, no debe asignar ningún atributo específico ya que XACML intenta ser discreto y confiar solo en lo que el sistema proporciona de forma natural. Y entonces tenemos:
Tema
Cualquier actor, ya sea una persona o un servicio, en su sistema. Nuestro tema es Leslie. ¿Qué atributos son necesarios para identificar a Leslie de forma exclusiva? Es probable que algunos de los siguientes: first name
, last name
, e-mail
, ssn
, company id
, position(s)
.
Acción
Cualquier acción realizada por los sujetos. Pueden ser las operaciones CRUD estándar o algo más complejo. Nuestras acciones son open/view
y create
. Los atributos para estas acciones pueden ser diferentes según el marco de la aplicación web que esté utilizando. Hablaremos más sobre esto cuando lleguemos al recurso.
Recurso
Bastante autoexplicativo. Nuestros recursos son los price manager page
, travel prices
y the newly created price
. Podría haber más, si realmente quieres. Es posible que desee ocultar acciones que los usuarios no pueden realizar. P.ej. el create price button
puede ser un recurso que puede ser mostrado / oculto en función de si el usuario tiene permisos para crear los precios. Dado que la única forma en que un usuario puede ver una lista de precios podría ser a través de esta página, probablemente sería una buena idea hacer cumplir la autorización a este nivel en lugar de más abajo en la pila.
El acceso a los recursos es el más complicado de implementar, especialmente en los que provienen de una base de datos. La opción más fina es la seguridad a nivel de fila. Algunas bases de datos tienen cierto grado de soporte. Algunos implementadores de XACML han ido tan lejos como crear un superconjunto SQL. Esto realmente depende de sus necesidades de autorización, pero lo único que no desea hacer es extraer todo de una tabla y luego decidir qué mostrar. Puede agrupar recursos por conjuntos de permisos, abstraerlos detrás de una API y aplicar la autorización en los puntos finales de la API.
Ambiente
No puedo definirlo correctamente (XACML tampoco tiene una definición adecuada) pero digamos que es la "burbuja" en la que sucede todo esto. Esto incluye: web application
, web server
, operating system
, browser
, office
. Se podría extraer atributos como: ip address
, time of day
, user locale
, user agent
, operating system version
. Puede usarlos para bloquear incluso el acceso de usuarios desde entornos que no son compatibles con su aplicación (por ejemplo, navegadores antiguos, sistemas operativos antiguos, computadoras fuera de su red, acceso fuera del horario comercial).
Solicitud de autorización
Una vez que hemos reunido todos los atributos necesarios, los agrupamos en una solicitud de autorización y los reenviamos a una entidad que puede tomar decisiones de autorización basadas en los valores de estos atributos. En XACML lingua, el lugar donde recopila estos atributos y aplica las decisiones tomadas en ese momento se denomina punto de cumplimiento de políticas (PEP) y el punto de toma de decisiones se denomina punto de decisión de políticas (PDP). Las ubicaciones de las que se obtienen los valores de los atributos se denominan puntos de información de política (PIP). Los PEP, PDP y PIP pueden ser parte de su aplicación o pueden ser sistemas externos. Puede encontrar un diagrama de cómo se comunican entre sí en el estándar XACML.
Proceso de decisión
El proceso de toma de decisiones se basa en reglas . Las reglas se pueden agrupar en políticas que se pueden agrupar en conjuntos de políticas . Cada uno de estos tiene un objetivo . El objetivo se utiliza para decidir si alguna de las reglas se aplica a la solicitud de autorización. Piense en ello como un filtro. El objetivo contiene condiciones creadas utilizando nombres y valores de atributos. Por ejemplo, las reglas para su aplicación podrían agruparse en algo como:
Aplicación web (conjunto de políticas)
| - target: nombre-aplicación == "Aplicación web"
`- Versión 1.0 (conjunto de políticas)
| - target: aplicación-versión == "1.0"
`- Ver administrador de precios (política)
| - target: web-page-name == "administrador de precios" && action-name == "view"
`- Leslie puede ver el gerente de precios (regla)
| - target: subject-name == "Leslie"
`- permiso: permitir
El PDP hará coincidir todo en el conjunto anterior con los valores de atributo en la solicitud de autorización. Lo que sucede si no hay reglas que coincidan depende de la implementación de su PDP. Una vez que el PDP ha tomado una decisión ( allow
, deny
o not-applicable
) la envía de vuelta a la PEP, que actúa sobre ella otorgando o denegando el acceso al recurso. Junto con la respuesta, el PDP puede enviar una lista obligations
y advices
la PEP debe o debe cumplir en el proceso de ejecución. Dependiendo de cómo se almacenan las reglas (archivos de texto o base de datos), un administrador puede usar un editor de texto estándar o una aplicación de edición personalizada para cambiarlos como mejor le parezca. Revocar el acceso de Leslie al gerente de precios se reanuda simplemente cambiando el permiso de allow
adeny
, garantizado que el PEP hace su trabajo.
Aplicación
Esto depende en gran medida de su pila de tecnología. Algunos marcos web tienen puntos de aplicación naturales (por ejemplo, ASP.NET MVC tiene filtros de atributos). Es posible que sus capas empresariales tengan que definir dichos puntos de aplicación. Me resultó más fácil aplicar la aplicación en los puntos finales de servicio (piense en microservicios) o en el nivel de UI.
Otros beneficios
Un buen efecto secundario de implementar esto es que terminas con una pista de auditoría bastante rica que puede usarse para otros fines.