XACML ( lenguaje de marcado de control de acceso extensible - lenguaje de marcado de control de acceso extensible ) es un estándar desarrollado por OASIS que define un modelo y un lenguaje para describir las políticas de control de acceso basadas en XML y cómo se procesan.
Uno de los objetivos de XACML es promover la terminología común y la interoperabilidad entre las implementaciones de control de acceso de múltiples desarrolladores. XACML es un estándar de control de acceso basado en atributos (ABAC) donde los atributos asociados con un usuario, acción o recurso se ingresan para decidir si un usuario determinado puede acceder a un recurso determinado de una manera particular. El control de acceso basado en roles (RBAC) también se puede implementar en XACML como una especialización de ABAC.
La versión 1.0 fue aprobada por la organización de estándares OASIS en 2003.
La versión 2.0 fue aprobada por la organización de estándares OASIS el 1 de febrero de 2005.
La primera especificación XACML 3.0 se publicó el 10 de agosto de 2010 [1] . La última versión, XACML 3.0, se estandarizó en enero de 2013 [2] .
Los componentes principales de un modelo de lenguaje son una regla, una política y un conjunto de políticas.
Una regla es la unidad más simple de un modelo. La regla debe estar incluida en la póliza, no es una unidad independiente.
Componentes principales de la regla:
Objetivo
El objetivo define las consultas a las que se aplica la regla, en forma de expresiones booleanas en los atributos de la consulta. La solicitud contiene atributos del sujeto que solicita acceso, atributos del recurso al que se solicita acceso y atributos de la acción que el usuario desea realizar. La solicitud también puede contener otros atributos, como atributos de entorno. Si no hay un objetivo en la regla, se hereda del elemento principal (política).
Condición
Las condiciones son una forma extendida de objetivos que pueden usar una gama más amplia de funciones y, lo que es más importante, se pueden usar para comparar dos o más atributos, como subject-id == doctor-id (objeto id igual a doctor id).
Efecto
El efecto puede tomar dos valores: "habilitar" o "prohibir". El efecto de la regla se activa si la regla se evalúa positivamente (si tanto el destino como la condición se evalúan como verdaderos).
Compromiso
Un compromiso describe lo que se debe hacer antes o después de que se confirme el acceso. Si no se pueden realizar las acciones descritas, el acceso aprobado no puede ni debe implementarse.
Ejemplo:
Permitir el acceso al recurso MedicalJournal con el atributo ID del paciente=x si el asunto coincide con DesignatedDoctorOfPatient y se lee la acción con obligación en Permiso: doLog_Inform (ID del paciente, Asunto, hora) en Denegar: doLog_UnauthorizedLogin (ID del paciente, Asunto, hora)Recomendación
Realiza las mismas funciones que la obligación, pero, a diferencia de ésta, puede ser ignorada.
Se utiliza para combinar reglas.
Los principales componentes de la política:
Algoritmo de combinación de reglas
Se utiliza para resolver conflictos. Por ejemplo, si una de las reglas se evalúa como "verdadero" y la otra como "falso", el algoritmo de combinación de reglas determina qué valor tomará la política en sí.
Se necesita un conjunto de políticas para combinar un grupo de políticas a fin de filtrarlas más rápidamente en función del propósito general especificado en el objetivo del grupo de políticas.
Componentes principales:
Nombre | Traducción | Descripción |
---|---|---|
PAP (Punto de Administración de Políticas) | Punto de gestión de políticas | Objeto del sistema que gestiona las políticas de autorización |
PDP (punto de decisión de política) | Solicitar punto de decisión | Un objeto del sistema que compara las solicitudes de acceso con las políticas de autorización antes de tomar una decisión de acceso |
PEP (Punto de Aplicación de Políticas) | Punto de aplicación de políticas | Un objeto del sistema que intercepta la solicitud de un usuario para acceder a un recurso, realiza una solicitud de decisión al PDP para obtener una decisión de acceso (es decir, se aprueba o deniega el acceso al recurso) y actúa sobre la decisión. |
PIP (Punto de Información de Políticas) | Punto de Información de Políticas | Un objeto del sistema que actúa como fuente de valores de atributo. |
PRP (Punto de recuperación de pólizas) | Punto de almacenamiento de políticas | Un objeto del sistema que almacena políticas de autorización de acceso XACML. Suele ser una base de datos o un sistema de archivos. |
controlador de contexto | Controlador de contexto | Un objeto del sistema que traduce las solicitudes de autorización al formato XACML, se coordina con PIP para agregar valores de atributos a la solicitud y traduce la decisión de autorización XACML a su propio formato de respuesta. |
Los componentes del modelo interactúan entre sí a través de solicitudes y respuestas en formato XACML. La solicitud contiene atributos. La respuesta contiene el resultado del cálculo de la política (tiene 4 valores: "permitir", "denegar", "no aplicable", "no definido"). Además, la respuesta puede contener obligaciones que deben cumplirse si se permite o deniega el acceso.
Esta regla deniega el acceso a los usuarios que no han iniciado sesión durante 30 días.
En pseudocódigo: Denegar si time_now > last_access_time + 30 días.
<xacml3:Rule RuleId= "f6637b3f-3690-4cce-989c-2ce9c053d6fa" Effect= "Deny" > <xacml3:Description> Úselo o piérdalo: esta política deniega el acceso si lastLogin está a más de 30 días de la fecha de hoy < /xacml3:Descripción> <xacml3:Objetivo/> <xacml3:Condición > <xacml3:Apply FunctionId= "urn:oasis:names:tc:xacml:1.0:function:any-of" > <xacml3:Function FunctionId= "urn :oasis:names:tc:xacml:1.0:function:dateTime-mayor-que" /> <xacml3:Apply FunctionId= "urn:oasis:names:tc:xacml:3.0:function:dateTime-add-dayTimeDuration" > < xacml3:Apply FunctionId= "urn:oasis:names:tc:xacml:1.0:function:dateTime-one-and-only" > <xacml3:AttributeDesignator Category= "urn:oasis:names:tc:xacml:1.0:subject- categoría:asunto-de-acceso" AttributeId= "com.acme.user.lastLogin" DataType= "http://www.w3.org/2001/XMLSchema#dateTime" MustBePresent= "false" /> </xacml3:Apply> < xacml3:AttributeValue DataType= "http://www.w3.org/2001/XMLSchema#dayTimeDuration" > P30D </xacml3:AttributeValue> </xacml3:Apply> <xacml3:Attribute Designator Category= "urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId= "urn:oasis:names:tc:xacml:1.0:environment:current-dateTime" DataType= "http:// www.w3.org/2001/XMLSchema#dateTime" MustBePresent= "false" /> </xacml3:Aplicar> </xacml3:Condición> </xacml3:Regla>Esta regla otorga al sujeto acceso al recurso si la hora actual es entre las 9:00 a. m. y las 5:00 p. m.
<xacml3:Rule RuleId= "c01d7519-be21-4985-88d8-10941f44590a" Effect= "Permit" > <xacml3:Description> Permitir tiempo entre 9 y 5 </xacml3:Description> <xacml3:Target> <xacml3:AnyOf > <xacml3:AllOf> <xacml3:Match MatchId= "urn:oasis:names:tc:xacml:1.0:function:time-greater-than" > <xacml3:AttributeValue DataType= "http://www.w3.org /2001/XMLSchema#time" > 09:00:00 </xacml3:AttributeValue> <xacml3:AttributeDesignator Category= "urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId= "urn:oasis :names:tc:xacml:1.0:environment:current-time" MustBePresent= "false" DataType= "http://www.w3.org/2001/XMLSchema#time" /> </xacml3:Match> </xacml3 :AllOf> </xacml3:AnyOf> <xacml3:AnyOf> <xacml3:AllOf> <xacml3:Match MatchId= "urn:oasis:names:tc:xacml:1.0:function:time-less-than" > <xacml3: AttributeValue DataType= "http://www.w3.org/2001/XMLSchema#time" > 17:00:00 </xacml3:AttributeValue> <xacml3:AttributeDesignator Category= "urn:oasis:names:tc:xacml:3.0 :atributo-categoría:entorno " AttributeId= "urn:oasis:names:tc:xacml:1.0:environment:current-time" MustBePresent= "false" DataType= "http://www.w3.org/2001/XMLSchema#time" /> </ xacml3:Coincidir> </xacml3:Todos> </xacml3:CualquieraDe> </xacml3:Objetivo> </xacml3:Regla>
Solicitud: Alice quiere ver el documento #123.
<xacml-ctx:Request ReturnPolicyIdList= "true" CombinedDecision= "false" xmlns:xacml-ctx= "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" > <xacml-ctx:Attributes Category= "urn:oasis:names:tc:xacml:3.0:attribute-category:action" > <xacml-ctx:Attribute AttributeId= "actionId" IncludeInResult= "true" > <xacml-ctx:AttributeValue DataType= "http: //www.w3.org/2001/XMLSchema#string" > ver </xacml-ctx:AttributeValue> </xacml-ctx:Attribute> </xacml-ctx:Attributes> <xacml-ctx:Attributes Category= "urn :oasis:names:tc:xacml:3.0:attribute-category:resource" > <xacml-ctx:Attribute AttributeId= "resource-id" IncludeInResult= "true" > <xacml-ctx:AttributeValue DataType= "http:// www.w3.org/2001/XMLSchema#string" > doc#123 </xacml-ctx:AttributeValue> </xacml-ctx:Attribute> </xacml-ctx:Attributes> <xacml-ctx:Attributes Category= "urn :oasis:names:tc:xacml:1.0:subject-category:access-subject" > <xacml-ctx:Attribute AttributeId= "user.identifier" IncludeInResult= "true" > <xacml-ctx:AttributeValue DataTyp e= "http://www.w3.org/2001/XMLSchema#string" > Alicia </xacml-ctx:Valor del atributo> </xacml-ctx:Atributo> </xacml-ctx:Atributos> </xacml-ctx :Solicitud>El primer elemento <Attributes>contiene los atributos de la acción (leer), el segundo elemento <Attributes>contiene los atributos del recurso al que el sujeto desea aplicar la acción especificada (documento #123), el tercer elemento <Attributes>contiene el nombre del sujeto (Alice) .
Respuesta: No aplica
<xacml-ctx:Respuesta xmlns:xacml-ctx= "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" > <xacml-ctx:Resultado> <xacml-ctx:Decisión> No aplicable < /xacml-ctx:Decision> <xacml-ctx:Status> <xacml-ctx:StatusCode Value= "urn:oasis:names:tc:xacml:1.0:status:ok" /> </xacml-ctx:Status> < /xacml-ctx:Resultado> </xacml-ctx:Respuesta>El elemento <Decision>contiene el resultado de la evaluación de políticas (no aplicable).
Un ejemplo de respuesta XACML con un compromisoRespuesta: Permitir, confirmar con el índice "logAccess" (acceso al registro)
<xacml-ctx:Respuesta xmlns:xacml-ctx= "urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" > <xacml-ctx:Resultado> <xacml-ctx:Decisión> Permitir < /xacml-ctx:Decision> <xacml-ctx:Status> <xacml-ctx:StatusCode Value= "urn:oasis:names:tc:xacml:1.0:status:ok" /> </xacml-ctx:Status> < xacml-ctx:Obligations> <xacml-ctx:Obligation ObligationId= "logAccess" > </xacml-ctx:Obligation> </xacml-ctx:Obligations> <xacml-ctx:PolicyIdentifierList> <xacml-ctx:PolicyIdReference Version= " 1.0" > http://www.axiomatics.com/automatic-unique-id/18a9eae9-c92b-4087-b2ac-c5a33d7ff477 </xacml-ctx:PolicyIdReference> </xacml-ctx:PolicyIdentifierList> </xacml-ctx: Resultado> </xacml-ctx:Respuesta>El elemento <Decision>contiene el resultado de la evaluación de políticas (habilitar). El elemento <Obligations>contiene las obligaciones a aplicar. En este caso, <Obligations>contiene un elemento <Obligation>con el identificador "logAccess" (acceso al registro).
Nombre | Versión
XACML |
Tecnología | Licencia |
---|---|---|---|
AuthzForce (OW2) [4] / ( GitHub ) | XACML 3.0 | Java | GPL |
balaná [5] | XACML 3.0, 2.0, 1.1 y 1.0 | Java | apache 2.0 |
ndg-xacml [6] | XACML 2.0 | Pitón | BSD |
XACML de AT&T [7] | XACML 3.0 | Java | MIT |
Servidor de derechos de Oracle [8] | XACML 3.0 | Java , .NET | Propiedad |
Herramienta de política de seguridad [9] | XACML 3.0, 2.0 | Java | Propiedad |
Consorcio World Wide Web (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Productos y estándares |
| ||||||||||||||
Organizaciones |
| ||||||||||||||
EN |
| ||||||||||||||
Conferencias |
|
OASIS | Normas|
---|---|