XACML son las siglas de " eXtensible Access Control Markup Language ". El estándar define un lenguaje de política de control de acceso declarativo de grano fino, basado en atributos , [2] una arquitectura y un modelo de procesamiento que describe cómo evaluar las solicitudes de acceso de acuerdo con las reglas definidas en las políticas.
Paradigma | Programación declarativa |
---|---|
Desarrollador | Organización para el Avance de Estándares de Información Estructurada (OASIS) |
Apareció por primera vez | 16 de abril de 2001 [1] |
Licencia | OASIS |
Extensiones de nombre de archivo | .xml, .alfa |
Sitio web | www.oasis-open.org |
Implementaciones importantes | |
Axiomática, AuthzForce | |
Dialectos | |
ALFA (XACML) | |
Influenciado por | |
XML , SAML | |
Influenciado | |
ALFA (XACML) |
Como especificación estándar publicada, 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 proveedores. XACML es principalmente un sistema de control de acceso basado en atributos (ABAC), también conocido como un sistema de control de acceso basado en políticas (PBAC), donde los atributos (bits de datos) asociados con un usuario o acción o recurso son entradas para la decisión de si un usuario dado puede acceder a un recurso dado 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.
El modelo XACML apoya y fomenta la separación de la aplicación (PEP) de la toma de decisiones (PDP) de la gestión / definición (PAP) de la autorización. Cuando las decisiones de acceso están codificadas dentro de las aplicaciones (o se basan en los ID de usuario de la máquina local y las listas de control de acceso (ACL)), es muy difícil actualizar los criterios de decisión cuando cambia la política de gobierno y es difícil lograr visibilidad o auditorías de la autorización en su lugar. Cuando el cliente se desvincula de la decisión de acceso, las políticas de autorización se pueden actualizar sobre la marcha y afectar a todos los clientes de inmediato.
Historia
La versión 1.0 fue ratificada por la organización de estándares OASIS en 2003. [ cita requerida ]
La versión 2.0 fue ratificada por la organización de estándares OASIS el 1 de febrero de 2005. [ cita requerida ]
La versión 3.0 fue ratificada por OASIS en enero de 2013. [3]
Arquitectura
Terminología
Terminología no normativa (siguiendo RFC 2904, excepto para PAP)
Abbr. | Término | Descripción |
---|---|---|
PAPILLA | Punto de administración de políticas | Punto que gestiona las políticas de autorización de acceso |
PDP | Punto de decisión de políticas | Punto que evalúa las solicitudes de acceso contra las políticas de autorización antes de emitir decisiones de acceso |
ENERGÍA | Punto de aplicación de políticas | Punto que intercepta la solicitud de acceso del usuario a un recurso, realiza una solicitud de decisión al PDP para obtener la decisión de acceso (es decir, se aprueba o rechaza el acceso al recurso) y actúa sobre la decisión recibida |
PEPITA | Punto de información sobre políticas | La entidad del sistema que actúa como fuente de valores de atributo (es decir, un recurso, sujeto, entorno) |
PRP | Punto de recuperación de políticas | Punto donde se almacenan las políticas de autorización de acceso XACML, generalmente una base de datos o el sistema de archivos. |
Flujo
- Un usuario envía una solicitud que es interceptada por Policy Enforcement Point (PEP)
- El PEP convierte la solicitud en una solicitud de autorización XACML
- El PEP reenvía la solicitud de autorización al Punto de Decisión de Políticas (PDP)
- El PDP evalúa la solicitud de autorización contra las políticas con las que está configurado. Las pólizas se adquieren a través del punto de recuperación de políticas (PRP) y son gestionadas por el punto de administración de políticas (PAP). Si es necesario, también recupera los valores de los atributos de los puntos de información de políticas (PIP) subyacentes.
- El PDP toma una decisión (Permitir / Denegar / No Aplicable / Indeterminado) y la devuelve al PEP
Elementos de política
Elementos estructurales
XACML está estructurado en 3 niveles de elementos:
- PolicySet,
- Política,
- Regla.
Un conjunto de políticas puede contener cualquier número de elementos de política y elementos de conjunto de políticas. Una política puede contener cualquier número de elementos de regla. [4]
Atributos y categorías
Las políticas, los conjuntos de políticas, las reglas y las solicitudes utilizan sujetos, recursos, entornos y acciones.
- Un elemento sujeto es la entidad que solicita acceso. Un tema tiene uno o más atributos.
- El elemento de recurso es un componente de datos, servicio o sistema. Un recurso tiene uno o más atributos.
- Un elemento de acción define el tipo de acceso solicitado al recurso. Las acciones tienen uno o más atributos.
- Opcionalmente, un elemento de entorno puede proporcionar información adicional.
Objetivos
XACML proporciona un objetivo, [5] que es básicamente un conjunto de condiciones simplificadas para el sujeto, el recurso y la acción que deben cumplirse para que un conjunto de políticas, una política o una regla se apliquen a una solicitud determinada. Una vez que se determina que una política o un conjunto de políticas se aplica a una solicitud determinada, sus reglas se evalúan para determinar la decisión de acceso y la respuesta.
Además de ser una forma de verificar la aplicabilidad, la información de destino también proporciona una forma de indexar políticas, lo cual es útil si necesita almacenar muchas políticas y luego examinarlas rápidamente para encontrar las que se aplican. Cuando llega una solicitud para acceder a ese servicio, el PDP sabrá dónde buscar las políticas que podrían aplicarse a esta solicitud porque las políticas están indexadas en función de sus restricciones de destino. Tenga en cuenta que un objetivo también puede especificar que se aplica a cualquier solicitud.
El conjunto de políticas, la política y la regla pueden contener elementos de destino.
Condiciones
Las condiciones solo existen en las reglas. Las condiciones son esencialmente una forma avanzada de un objetivo que puede usar una gama más amplia de funciones y, lo que es más importante, puede usarse para comparar dos o más atributos juntos, por ejemplo, subject-id == doctor-id. Con condiciones, es posible implementar la segregación de controles de servicio o el control de acceso basado en relaciones.
Obligaciones y asesoramiento
Dentro de XACML, se puede utilizar un concepto llamado obligaciones. Una obligación es una directiva desde el punto de decisión de la política (PDP) hasta el punto de ejecución de la política (PEP) sobre lo que debe llevarse a cabo antes o después de que se apruebe un acceso. Si el PEP es incapaz de cumplir con la Directiva, el acceso autorizado puede o debe no ser realizado. El aumento de obligaciones elimina una brecha entre los requisitos formales y la aplicación de políticas. Un ejemplo de una obligación podría verse así:
Regla de control de acceso: Permitir el acceso al recurso MedicalJournal con el atributo PatientID = x si el asunto coincide con DesignatedDoctorOfPatient y se lee la acción con obligación con permiso: doLog_Inform (pacienteID, Asunto, hora) en Denegar: doLog_UnauthorizedLogin (pacienteID, Asunto, hora)
La obligación de XACML puede ser una forma efectiva de cumplir con los requisitos formales (no repudio, por ejemplo) que pueden ser difíciles de implementar como reglas de control de acceso. Además, cualquier requisito formal será parte de la política de control de acceso como obligaciones y no como funciones separadas, lo que hace que las políticas sean coherentes y la centralización del entorno de TI sea más fácil de lograr.
Las obligaciones se pueden usar para escenarios de "ruptura del cristal" o elevación de confianza ("no puede transferir $ 1,000 sin autenticación de dos factores; aquí está el enlace a la página 2FA").
Además de las obligaciones, XACML respalda el asesoramiento que es idéntico a las obligaciones con la diferencia de que una PEP no está obligada a hacer cumplir el asesoramiento (de ahí su nombre).
Combinando algoritmos
¿Qué sucede en XACML si hay dos reglas (o políticas) que se contradicen entre sí? Imagine, por ejemplo, una primera regla que diga que los gerentes pueden ver documentos y una segunda regla que diga que nadie puede trabajar antes de las 9 am . ¿Qué pasa si la solicitud es sobre Alice tratando de ver un documento a las 8 am? ¿Qué regla gana? Esto es lo que nos dicen los algoritmos de combinación. Ayudan a resolver conflictos.
XACML define una serie de algoritmos que combinan [6] que pueden ser identificados por un RuleCombiningAlgId o PolicyCombiningAlgId atributo de la
La tabla de verdad que se encuentra aquí le ayudará a comprender cómo la combinación de algoritmos procesa y combina políticas.
Funciones
XACML define una larga lista de funciones (cerca de 300) para manipular y comparar atributos con otros atributos y valores:
- Igualdad, desigualdad y otras funciones de emparejamiento
- Funciones aritméticas
- Funciones de cadena
- Funciones lógicas (y, o no)
- Funciones de set y bag
- Funciones de orden superior
- Funciones de expresión regular
- Funciones XPath
Las funciones y sus identificadores se describen detalladamente en el estándar . Las funciones son específicas del tipo, es decir, hay una función para la igualdad de cadenas y otra diferente para la igualdad de enteros.
Igualdad, desigualdad y otras funciones de emparejamiento
Funciones aritméticas
Consulte el estándar para obtener una definición formal de estas funciones .
- sumar (doble y entero)
- restar (doble y entero)
- multiplicar (doble y entero)
- dividir (doble y entero)
- mod (doble y entero)
- abs (doble y entero)
- redondo
- suelo
Funciones de cadena
Consulte el estándar para obtener una definición formal de estas funciones .
- cadena-concatenar
- cadena-comienza-con
- hilo-termina-con
- cadena-contiene
- cadena-subcadena
Funciones lógicas (y, o no)
Funciones de set y bag
Funciones de expresión regular
Funciones XPath
Funciones de orden superior
La lista de funciones de orden superior se muestra a continuación. Para obtener una definición formal, consulte el estándar XACML .
- anyOf ( urn: oasis: names: tc: xacml: 3.0: function: any-of )
- parámetros: anyAtomicOrBag anyAtomicOrBag *
- valor de retorno: booleano
- Descripción: esta función toma una función booleana y 2 o más valores de atributo o bolsas. La función de orden superior aplica la función booleana al resto de parámetros.
- Ejemplo:
anyOf(function[stringEqual], allowedRoles, stringOneAndOnly(role))
devolverá verdadero si (a) el rol es de un solo valor, (b) hay al menos un valor en la bolsa de atributos permitidos Roles igual al valor dentro del rol de la bolsa de atributos de un solo valor.
- allOf ( urn: oasis: nombres: tc: xacml: 3.0: function: all-of )
- parámetros: anyAtomicOrBag anyAtomicOrBag *
- valor de retorno: booleano
- anyOfAny ( urn: oasis: names: tc: xacml: 3.0: function: any-of-any )
- parámetros: anyAtomicOrBag anyAtomicOrBag *
- valor de retorno: booleano
- allOfAny ( urn: oasis: nombres: tc: xacml: 1.0: función: todo-de-cualquiera )
- parámetros: bolsa [anyAtomic] bolsa [anyAtomic]
- valor de retorno: booleano
- anyOfAll ( urn: oasis: names: tc: xacml: 1.0: function: any-of-all )
- parámetros: bolsa [anyAtomic] bolsa [anyAtomic]
- valor de retorno: booleano
- allOfAll ( urn: oasis: nombres: tc: xacml: 1.0: function: all-of-all )
- parámetros: bolsa [anyAtomic] bolsa [anyAtomic]
- valor de retorno: booleano
- mapa ( urn: oasis: nombres: tc: xacml: 1.0: función: mapa )
- parámetros: anyAtomicOrBag anyAtomicOrBag *
- valor de retorno: bolsa [anyAtomic]
XACML 3.0
Esquema
http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd
Tipos de datos
- http://www.w3.org/2001/XMLSchema#anyURI
- http://www.w3.org/2001/XMLSchema#base64Binary
- http://www.w3.org/2001/XMLSchema#boolean
- http://www.w3.org/2001/XMLSchema#date
- http://www.w3.org/2001/XMLSchema#dateTime
- http://www.w3.org/2001/XMLSchema#dayTimeDuration
- http://www.w3.org/2001/XMLSchema#double
- http://www.w3.org/2001/XMLSchema#hexBinary
- http://www.w3.org/2001/XMLSchema#integer
- http://www.w3.org/2001/XMLSchema#string
- http://www.w3.org/2001/XMLSchema#time
- http://www.w3.org/2001/XMLSchema#yearMonthDuration
- urn: oasis: nombres: tc: xacml: 1.0: tipo de datos: rfc822Name
- urn: oasis: nombres: tc: xacml: 1.0: tipo de datos: x500Name
- urn: oasis: nombres: tc: xacml: 2.0: tipo de datos: dnsName
- urn: oasis: nombres: tc: xacml: 2.0: tipo de datos: ipAddress
- urn: oasis: nombres: tc: xacml: 3.0: tipo de datos: xpathExpression
Nuevo en XACML 3.0
Nuevos perfiles
XACML 3.0 introduce la delegación administrativa, el perfil JSON de XACML (solicitud / respuesta), el perfil REST de XACML, el perfil de decisión múltiple de XACML y muchos más.
Delegación
La implementación de la delegación es nueva en XACML 3.0. El mecanismo de delegación se utiliza para respaldar la administración descentralizada de las políticas de acceso. Permite que una autoridad (delegador) delegue la totalidad o parte de su propia autoridad o la autoridad de otra persona a otro usuario (delegado) sin necesidad de implicar la modificación de la política raíz.
Esto se debe a que, en este modelo de delegación, los derechos de delegación están separados de los derechos de acceso. En su lugar, se denominan políticas de control administrativo. [7] Las políticas administrativas y de control de acceso funcionan juntas como en el siguiente escenario:
Los muchos servicios de una sociedad de empresas están protegidos por un sistema de control de acceso. El sistema implementa las siguientes reglas centrales para proteger sus recursos y permitir la delegación:
Reglas de control de acceso: Permitir el acceso al recurso con atributo WebService si el asunto es Empleado y la acción se lee o se escribe. Reglas de control de la administración: Permitir la delegación de la regla de control de acceso n. ° 1 a materias con atributo Consultor. Condiciones: la delegación debe expirar en 6 meses, El recurso no debe tener el atributo StrictlyInternal.
(Los atributos se pueden obtener de una fuente externa, por ejemplo, un catálogo LDAP).
Cuando un consultor ingresa a la corporación, el supervisor del consultor puede emitir una delegación localmente, autorizando el acceso del consultor a los sistemas directamente.
El delegador (el supervisor en este escenario) solo puede tener derecho a delegar un conjunto limitado de derechos de acceso a los consultores.
Otras características
Otras características nuevas de XACML 3.0 se enumeran en http://www.webfarmr.eu/2010/07/enhancements-and-new-features-in-xacml-3-axiomatics/
XACML TC también publica una lista de cambios aquí: http://wiki.oasis-open.org/xacml/DifferencesBetweenXACML2.0AndXACML3.0
Políticas de muestra
Autorización basada en fecha y hora en XACML
Esto implementa las reglas del uso-que-perder-que acceden paradigma de control. Si un usuario no inicia sesión durante 30 días, perderá el acceso.
En pseudocódigo: deny if currentDateTime> lastLogin + 30 days
RuleId = "f6637b3f-3690-4cce-989c-2ce9c053d6fa" Effect = "Deny" > Úselo o piérdalo: esta política deniega el acceso si el últimoLogin está a más de 30 días de la fecha de hoy < Target /> ón> FunctionId = "urn: oasis: names: tc: xacml: 1.0: function: any-of" > FunctionId = "urn: oasis: names: tc: xacml: 1.0: function: dateTime -greater-than " /> FunctionId = " urn: oasis: names: tc: xacml: 3.0: function: dateTime-add-dayTimeDuration " > FunctionId = " urn: oasis: names: tc: xacml: 1.0: function: dateTime-one-and-only " > Category = " urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject " AttributeId = " com.acme.user.lastLogin " DataType = " http://www.w3.org/2001/XMLSchema#dateTime " MustBePresent = " false " /> DataType = " http://www.w3.org/2001/XMLSchema#dayTimeDuration " > P30D 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 " /> < / Regla>
Autorización basada en tiempo en XACML
Esta regla otorga acceso si la hora actual es superior a las 9 a. M. E inferior a las 5 p. M.
RuleId = "c01d7519-be21-4985-88d8-10941f44590a" Effect = "Permit" > Permitir si hay tiempo entre 9 y 5 MatchId = "urn : oasis: nombres: tc: xacml: 1.0: función: tiempo-mayor-que " > DataType = " http://www.w3.org/2001/XMLSchema#time " > 09:00:00 Category = "urn: oasis: names: tc: xacml: 3.0: atributo-category: environment" AttributeId = "urn: oasis: names: tc: xacml: 1.0: environment: current-time" MustBePresent = "false" DataType = "http://www.w3.org/2001/XMLSchema#time" /> MatchId = "urn: oasis: names: tc: xacml: 1.0: function: time-less-than " > DataType = " http://www.w3.org/2001/XMLSchema#time " > 17:00:00 Category = "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: entorno" AttributeId = "urn: oasis: nombres: tc: xacml: 1.0: entorno: tiempo actual" MustBePresent = "false" DataType = "http: //www.w3.org/2001/XMLSc hema # tiempo " />
Ejemplos de solicitudes y respuestas
Solicitud XACML 3.0
ReturnPolicyIdList = "true" CombinedDecision = "false" xmlns: xacml-ctx = "urn: oasis: names: tc: xacml: 3.0: core: schema: wd-17" > Category = "urn: oasis: names: tc: xacml: 3.0: attribute-category: action" > AttributeId = "actionId" IncludeInResult = "true" > DataType = "http: //www.w3.org/2001/XMLSchema#string " > ver Category = " urn : oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " > AttributeId = " resource-id " IncludeInResult = " true " > DataType = " http: // www.w3.org/2001/XMLSchema#string " > doc # 123 Category = " urn : oasis: names: tc: xacml: 1.0: subject-category: access-subject " > AttributeId = " user.identifier " IncludeInResult = " true " > DataTyp e = "http://www.w3.org/2001/XMLSchema#string" > Alice
Respuestas XACML 3.0
Respuesta de muestra de XACML 3.0
xmlns: xacml-ctx = "urn: oasis: names: tc: xacml: 3.0: core: schema: wd-17" > NotApplicable < / xacml-ctx: Decisión> Value = "urn: oasis: names: tc: xacml: 1.0: status: ok" /> < / xacml-ctx: Resultado>
Respuesta de muestra XACML 3.0 con obligación
Lo siguiente contiene un bloque de obligaciones. Las obligaciones son declaraciones que se pueden devolver junto con una decisión para enriquecer el flujo de decisiones. En este ejemplo, el PEP debe registrar que se otorgó acceso.
xmlns: xacml-ctx = "urn: oasis: names: tc: xacml: 3.0: core: schema: wd-17" > Permit < / xacml-ctx: Decisión> Value = "urn: oasis: names: tc: xacml: 1.0: status: ok" /> < XACML-ctx: Obligaciones> ObligationId = "logAccess" > versión = " 1.0 " > http://www.axiomatics.com/automatic-unique-id/18a9eae9-c92b-4087-b2ac-c5a33d7ff477
El perfil de decisión múltiple de XACML 3.0
De forma predeterminada, un PDP procesa una sola solicitud a la vez, por ejemplo, "¿Puede Alice ver el elemento n. ° 1?". Luego, el PDP responde con una sola decisión. A veces, sin embargo, es necesario enviar varias solicitudes de una sola vez, por ejemplo, "¿Puede Alice ver / editar / eliminar elementos # 1, # 2, # 3?". El perfil de decisión múltiple de XACML permite este caso de uso. El PDP normalmente hará el producto de todas las combinaciones, es decir, en el ejemplo mencionado anteriormente habrá 1 x 3 x 3 = 9 decisiones devueltas en una sola respuesta.
Ejemplo de solicitud JSON para el perfil de decisión múltiple
La forma de habilitar el MDP es enviar una matriz de objetos para cualquiera de las categorías en lugar de una matriz de un objeto (o simplemente un objeto). Por ejemplo, AccessSubject es un objeto, pero Resource es una matriz de objetos. Este último activará el proceso MDP en los PDP que admitan el perfil. Tenga en cuenta también el uso del atributo IncludeInResult que le dice al PDP que devuelva el atributo XACML y su valor en la respuesta para que las decisiones puedan correlacionarse con los valores de atributo relevantes.
{ "Request" : { "ReturnPolicyIdList" : true , "AccessSubject" : { "Attribute" : [{ "AttributeId" : "com.acme.user.username" , "Value" : "Alice" }] }, "Resource " : [{ " Attribute " : [{ " AttributeId " : " com.acme.objectType " , " Value " : " record " }, { " AttributeId " : " com.acme.record.recordId " , " Value " : "123" , "IncludeInResult" : true }] }, { "Attribute" : [{ "AttributeId" : "com.acme.objectType" , "Value" : "record" }, { "AttributeId" : "com.acme .record.recordId " , " Value " : " 124 " , " IncludeInResult " : true }] }, { " Attribute " : [{ " AttributeId " : " com.acme.objectType " , " Value " : " record " } , { "AttributeId" : "com.acme.record.recordId" , "Value" : "125" , "IncludeInResult" : true }] }], "Action" : [{ "Attribute" : [{ "AttributeId" : "com.acme.action" , "Value" : "view" , "IncludeInResult" : true }] }, { "Attribute" : [{ "AttributeId" : "com.acme.action" , "Value" : "editar " , " IncludeInResult " : true }] }, { " Attribute " : [{ " AttributeId " : " com.acme.action " , " Value " : " eliminar " , " IncludeIn Resultado " : verdadero }] }] } }
Ejemplo de respuesta JSON para el perfil de decisión múltiple
{ "Respuesta" : [ { "Decisión" : "Denegar" , "Estado" : { "Código de estado" : { "Valor" : "urn: oasis: nombres: tc: xacml: 1.0: estado: ok" } }, " AssociatedAdvice " : { " Id " : " com.acme.message " , " AttributeAssignment " : [ { " AttributeId " : " com.acme.messageContent " , " Value " : " Acceso denegado - autorización insuficiente ". , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: entorno" , "Tipo de datos" : "http://www.w3.org/2001/XMLSchema#string" }, { " AttributeId " : " com.acme.user.clearance " , " Value " : " 1 " , " Category " : " urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject " , " DataType " : "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId" : "com.acme.record.classification" , "Valor" : "3" , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#integer " } ] }, " Categoría " : [ { " CategoryId " : " urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Atributo " : { " AttributeId " : " com.acme.record.recordId " , " Valor " : " 125 " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: atributo-categoría: acción " , " Atributo " : { " AttributeId " : " com.acme.action " , " Value " : " view " , " DataType " : " http://www.w3.org/2001/XMLSchema#string " } } ], " PolicyIdentifier List " : { " PolicyIdReference " : [ { " Id " : " 311a93c0-6e4c-47a0-8e05-76feb39f25e0 " , " Versión " : " 1 " }, { " Id " : " c6b75be8-f3cb-4bda-9b63-812a1f7e5fae " , " Versión " : " 1 " } ], " PolicySetIdReference " : [ { " Id " : " 1016337f-f5f8-4ed4-bd4e-9a2be01fa211 " , " Versión " : " 1 " }, { " Id " : " http : //www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , " Versión " : " 1.0 " } ] } }, { " Decisión " : " Denegar " , " Estado " : { "StatusCode" : { "Value" : "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice" : { "Id" : "com.acme.message" , "AttributeAssignment " : [ { " AttributeId " : " com.acme.messageContent " , " Value " : " Acceso denegado - autorización insuficiente ". , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: entorno" , "Tipo de datos" : "http://www.w3.org/2001/XMLSchema#string" }, { " AttributeId " : " com.acme.user.clearance " , " Value " : " 1 " , " Category " : " urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject " , " DataType " : "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId" : "com.acme.record.classification" , "Valor" : "2" , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#integer " } ] }, " Categoría " : [ { " CategoryId " : " urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Atributo " : { " AttributeId " : " com.acme.record.recordId " , " Valor " : " 124 " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: atributo-categoría: acción " , " Atributo " : { " AttributeId " : " com.acme.action " , " Value " : " view " , " DataType " : " http://www.w3.org/2001/XMLSchema#string " } } ], " PolicyIdentifier List " : { " PolicyIdReference " : [ { " Id " : " 311a93c0-6e4c-47a0-8e05-76feb39f25e0 " , " Versión " : " 1 " }, { " Id " : " c6b75be8-f3cb-4bda-9b63-812a1f7e5fae " , " Versión " : " 1 " } ], " PolicySetIdReference " : [ { " Id " : " 1016337f-f5f8-4ed4-bd4e-9a2be01fa211 " , " Versión " : " 1 " }, { " Id " : " http : //www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , " Versión " : " 1.0 " } ] } }, { " Decisión " : " Denegar " , " Estado " : { "StatusCode" : { "Value" : "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "Category" : [ { "CategoryId" : "urn: oasis: names: tc: xacml: 3.0: atributo-categoría: recurso " , " Atributo " : { " AttributeId " : " com.acme.record.recordId " , " Value " : " 123 " , " DataType " : " http: //www.w3 .org / 2001 / XMLSchema # string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: attribute-category: action " , " Attribute " : { " AttributeId " : " com.acme .action " , " Value " : " edit " , " DataType " : " http://www.w3.org/2001/XMLSchema#string " } } ], " PolicyIdentifierList " : { " PolicyIdReference " : { " Id " : "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae" , "Versión" : "1" }, "PolicySetIdReference" : [ { "Id" : "1016337f-f5f8-4ed4-bd4e-9a2be01fa211" , "Versión" : "1 " }, { " Id " : " http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , " Versión " : " 1.0 " } ] } }, { " Decisión " : " Denegar " , " Estado " : { " Código de estado " : { " Valor " : " urn: oasis: nombres: tc: xacml: 1.0: estado: ok " } }, " Categoría " : [ { " CategoryId " : "urn: oasis: names: tc: xacml: 3.0: attribute-category: resource" , "Attribute" : { "AttributeId" : "com.acme.record.recordId" , "Value" : "123" , "DataType " : " http://www.w3.org/2001/XMLSchema#string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: atributo-categoría: acción " , " Atributo " : { "AttributeId" : "com.acme.action" , "Value" : "eliminar" , "DataType" : "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList" : { "PolicyIdReference" : { "Id" : "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae" , "Versión" : "1" }, "PolicySetIdReference" : [ { "Id" : "1016337f-f5 f8-4ed4-bd4e-9a2be01fa211 " , " Versión " : " 1 " }, { " Id " : " http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , "Versión" : "1.0" } ] } }, { "Decisión" : "Denegar" , "Estado" : { "Código de estado" : { "Valor" : "urn: oasis: nombres: tc: xacml: 1.0: estado : ok " } }, " AssociatedAdvice " : { " Id " : " com.acme.message " , " AttributeAssignment " : [ { " AttributeId " : " com.acme.messageContent " , " Value " : " Acceso denegado - insuficiente autorización." , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: entorno" , "Tipo de datos" : "http://www.w3.org/2001/XMLSchema#string" }, { " AttributeId " : " com.acme.user.clearance " , " Value " : " 1 " , " Category " : " urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject " , " DataType " : "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId" : "com.acme.record.classification" , "Valor" : "3" , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#integer " } ] }, " Categoría " : [ { " CategoryId " : " urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Atributo " : { " AttributeId " : " com.acme.record.recordId " , " Valor " : " 125 " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: atributo-categoría: acción " , " Atributo " : { " AttributeId " : " com.acme.action " , " Value " : " eliminar " , " DataType " : " http://www.w3.org/2001/XMLSchema#string " } } ], " PolicyIdentifi erList " : { " PolicyIdReference " : [ { " Id " : " 311a93c0-6e4c-47a0-8e05-76feb39f25e0 " , " Version " : " 1 " }, { " Id " : " c6b75be8-f3cb-4bda-9b63-812a1f7e5fae " , " Versión " : " 1 " } ], " PolicySetIdReference " : [ { " Id " : " 1016337f-f5f8-4ed4-bd4e-9a2be01fa211 " , " Versión " : " 1 " }, { " Id " : " http : //www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , " Versión " : " 1.0 " } ] } }, { " Decisión " : " Denegar " , " Estado " : { "StatusCode" : { "Value" : "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice" : { "Id" : "com.acme.message" , "AttributeAssignment " : [ { " AttributeId " : " com.acme.messageContent " , " Value " : " Acceso denegado - autorización insuficiente ". , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: entorno" , "Tipo de datos" : "http://www.w3.org/2001/XMLSchema#string" }, { " AttributeId " : " com.acme.user.clearance " , " Value " : " 1 " , " Category " : " urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject " , " DataType " : "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId" : "com.acme.record.classification" , "Valor" : "3" , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#integer " } ] }, " Categoría " : [ { " CategoryId " : " urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Atributo " : { " AttributeId " : " com.acme.record.recordId " , " Valor " : " 125 " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: atributo-categoría: acción " , " Atributo " : { " AttributeId " : " com.acme.action " , " Value " : " editar " , " DataType " : " http://www.w3.org/2001/XMLSchema#string " } } ], " PolicyIdentifier List " : { " PolicyIdReference " : [ { " Id " : " 311a93c0-6e4c-47a0-8e05-76feb39f25e0 " , " Versión " : " 1 " }, { " Id " : " c6b75be8-f3cb-4bda-9b63-812a1f7e5fae " , " Versión " : " 1 " } ], " PolicySetIdReference " : [ { " Id " : " 1016337f-f5f8-4ed4-bd4e-9a2be01fa211 " , " Versión " : " 1 " }, { " Id " : " http : //www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , " Versión " : " 1.0 " } ] } }, { " Decisión " : " Denegar " , " Estado " : { "StatusCode" : { "Value" : "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice" : { "Id" : "com.acme.message" , "AttributeAssignment " : [ { " AttributeId " : " com.acme.messageContent " , " Value " : " Acceso denegado - autorización insuficiente ". , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: entorno" , "Tipo de datos" : "http://www.w3.org/2001/XMLSchema#string" }, { " AttributeId " : " com.acme.user.clearance " , " Value " : " 1 " , " Category " : " urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject " , " DataType " : "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId" : "com.acme.record.classification" , "Valor" : "2" , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#integer " } ] }, " Categoría " : [ { " CategoryId " : " urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Atributo " : { " AttributeId " : " com.acme.record.recordId " , " Valor " : " 124 " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: atributo-categoría: acción " , " Atributo " : { " AttributeId " : " com.acme.action " , " Value " : " eliminar " , " DataType " : " http://www.w3.org/2001/XMLSchema#string " } } ], " PolicyIdentifi erList " : { " PolicyIdReference " : [ { " Id " : " 311a93c0-6e4c-47a0-8e05-76feb39f25e0 " , " Version " : " 1 " }, { " Id " : " c6b75be8-f3cb-4bda-9b63-812a1f7e5fae " , " Versión " : " 1 " } ], " PolicySetIdReference " : [ { " Id " : " 1016337f-f5f8-4ed4-bd4e-9a2be01fa211 " , " Versión " : " 1 " }, { " Id " : " http : //www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , " Versión " : " 1.0 " } ] } }, { " Decisión " : " Denegar " , " Estado " : { "StatusCode" : { "Value" : "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "Category" : [ { "CategoryId" : "urn: oasis: names: tc: xacml: 3.0: atributo-categoría: recurso " , " Atributo " : { " AttributeId " : " com.acme.record.recordId " , " Value " : " 123 " , " DataType " : " http: //www.w3 .org / 2001 / XMLSchema # string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: attribute-category: action " , " Attribute " : { " AttributeId " : " com.acme .action " , " Value " : " view " , " DataType " : " http://www.w3.org/2001/XMLSchema#string " } } ], " PolicyIdentifierList " : { " PolicyIdReference " : { " Id " : " c6b75be8-f3cb-4bda-9b63-812a1f7e5fae " , " Versión " : " 1 " }, " PolicySetIdReference " : [ { " Id " : " 1016337f-f5f8-4ed4-bd4e-9a2be01fa211 " , " Versión " : " 1 " }, { " Id " : " http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , " Versión " : " 1.0 " } ] } }, { "Decisión" : "Denegar" , "Estado" : { "Código de estado" : { "Valor" : "urn: oasis: nombres: tc: xacml: 1.0: estado: ok" } }, "AssociatedAdvice" : { "Id" : "com.acme.message" , "AttributeAssignment" : [ { "AttributeId": "com.acme.messageContent" , "Valor" : "Acceso denegado - autorización insuficiente". , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: entorno" , "Tipo de datos" : "http://www.w3.org/2001/XMLSchema#string" }, { " AttributeId " : " com.acme.user.clearance " , " Value " : " 1 " , " Category " : " urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject " , " DataType " : "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId" : "com.acme.record.classification" , "Valor" : "2" , "Categoría" : "urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#integer " } ] }, " Categoría " : [ { " CategoryId " : " urn: oasis: nombres: tc: xacml: 3.0: atributo-categoría: recurso " , " Atributo " : { " AttributeId " : " com.acme.record.recordId " , " Valor " : " 124 " , " Tipo de datos " : " http://www.w3.org/2001/XMLSchema#string " } }, { " CategoryId " : " urn: oasis: names: tc: xacml: 3.0: atributo-categoría: acción " , " Atributo " : { " AttributeId " : " com.acme.action " , " Value " : " editar " , " DataType " : " http://www.w3.org/2001/XMLSchema#string " } } ], " PolicyIdentifier List " : { " PolicyIdReference " : [ { " Id " : " 311a93c0-6e4c-47a0-8e05-76feb39f25e0 " , " Versión " : " 1 " }, { " Id " : " c6b75be8-f3cb-4bda-9b63-812a1f7e5fae " , " Versión " : " 1 " } ], " PolicySetIdReference " : [ { " Id " : " 1016337f-f5f8-4ed4-bd4e-9a2be01fa211 " , " Versión " : " 1 " }, { " Id " : " http : //www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54 " , " Versión " : " 1.0 " } ] } } ] }
Orientación al desarrollador
En 2013 y 2014, el Comité Técnico de XACML se centró en diseñar nuevos perfiles para facilitar la integración de los desarrolladores. Éstas incluyen:
- El perfil REST de XACML escrito por Remon Sinnema de EMC
- El perfil JSON de XACML escrito por David Brossard de Axiomatics
- El perfil ALFA de XACML escrito por Pablo Giambiagi, Srijith Nair y David Brossard de Axiomatics
Los tres perfiles se exhibieron en el Cloud Identity Summit 2014 en Monterey, California. Con estos perfiles, la integración de la autorización detallada en las aplicaciones se vuelve mucho más fácil.
El perfil ALFA de XACML
ALFA significa lenguaje abreviado para autorización. Es una sintaxis ligera que se utiliza para implementar políticas de control de acceso basadas en políticas. Para obtener ejemplos, consulte el artículo principal .
El perfil JSON de XACML
El perfil JSON de XACML simplifica la integración entre el PEP y el PDP.
Ejemplo de solicitud JSON
{ "Request" : { "AccessSubject" : { "Attribute" : [ { "AttributeId" : "com.acme.user.employeeId" , "Value" : "Alice" } ] }, "Resource" : { "Attribute" : [ { "AttributeId" : "com.acme.record.recordId" , "Value" : "123" }, { "AttributeId" : "com.acme.object.objectType" , "Value" : "record" } ] }, "Action" : { "Attribute" : [ { "AttributeId" : "com.acme.action.actionId" , "Value" : "view" } ] }, "Environment" : { "Attribute" : [] } } }
Ejemplo de respuesta JSON
{ "Respuesta" : { "Decisión" : "Permiso" , "Estado" : { "Código de estado" : { "Valor" : "urn: oasis: nombres: tc: xacml: 1.0: estado: ok" } } } }
XACML y otros estándares
XACML y Open Policy Agent
Open Policy Agent (OPA) es similar a XACML en el sentido de que proporciona un punto de decisión de políticas, una autorización externalizada y un lenguaje de políticas (REGO). Se especializa en la autorización de infraestructura (p. Ej., Para Kubernetes, Istio ...) en lugar de en aplicaciones de uso general, centradas en API o centradas en datos que XACML aborda.
XACML y SAML
SAML es un estándar de federación y SSO de identidad que se utiliza para la autenticación. SAML se utiliza como un formato de token de identidad común entre diferentes aplicaciones. SAML y XACML están definidos por OASIS . SAML y XACML fueron diseñados para interoperar donde SAML se usa para transportar información de identidad / identidades virtuales y XACML se usa para impulsar la lógica de control de acceso a través de políticas.
XACML y OAuth
OAuth 2.0 se considera un estándar de autorización. Se diferencia de XACML aunque en su origen, su propósito y sus aplicaciones. OAuth se trata de:
- control de acceso delegado: Yo, el usuario, delego a otro usuario o servicio el acceso al recurso que poseo. Por ejemplo, a través de OAuth, otorgo a Twitter (el servicio) la capacidad de publicar en mi muro de Facebook (el recurso).
- Manejo del anti-patrón de contraseña . [8] Siempre que desee integrar 2 servicios juntos, en un modelo heredado tradicional, debe proporcionar el servicio B con sus credenciales de usuario en el servicio A para que el servicio B pueda pretender ser usted con el servicio A. Por supuesto, esto tiene muchos riesgos. . El uso de OAuth elimina los problemas con estos patrones y permite al usuario controlar qué servicio B puede hacer en nombre del usuario con el servicio A.
- Servicios / recursos basados en HTTP
- gestionar la aprobación del propietario (usuario)
XACML no maneja la aprobación del usuario o el acceso delegado o la administración de contraseñas. XACML simplemente proporciona:
- Una arquitectura de control de acceso con la noción de un punto de decisión de políticas (PDP) como se discutió anteriormente y un punto de aplicación de políticas (PEP).
- un lenguaje de política con el que expresar una amplia gama de políticas de control de acceso, incluidas las políticas que pueden utilizar consentimientos gestionados / definidos a través de OAuth.
XACML y OAuth se pueden combinar para ofrecer un enfoque más completo para la autorización.
Ver también
- Control de acceso basado en roles
- Control de acceso basado en atributos
- Control de acceso obligatorio
- Control de acceso discrecional
- PERMIS
- GeoXACML
- Seguridad basada en modelos
- Autorización
Referencias
- ^ Best, Karl (16 de abril de 2001). "Convocatoria de participación de OASIS TC: XACML" . OASIS . Consultado el 31 de octubre de 2016 .
- ^ "pure-xacml" . www.axiomatics.com . Consultado el 27 de abril de 2016 .
- ^ Lenguaje de marcado de control de acceso extensible (XACML) V3.0 aprobado como estándar OASIS , Lenguaje de marcado de control de acceso extensible (XACML) V3.0 aprobado como estándar OASIS.
- ^ http://docs.oasis-open.org/xacml/3.0/xacml-3.0-core-spec-cs-01-en.pdf
- ^ http://www.oasis-open.org/committees/xacml/
- ^ "Comprensión de los algoritmos de combinación XACML" . www.axiomatics.com . Consultado el 27 de abril de 2016 .
- ^ Política administrativa XACML v3.0 Versión 1.0
- ^ "OAuth: cómo funciona" . Identidad de ping . Consultado el 26 de mayo de 2016 .
enlaces externos
- Lenguaje de marcado de control de acceso extensible
- Sitio web del comité OASIS XACML
- Declaración de cuestiones de OASIS con dos patentes de software de IBM