XACML
XACML (англ. eXtensible Access Control Markup Language — расширяемый язык разметки контроля доступа) — стандарт, разработанный OASIS, определяющий модель и язык описания политик управления доступом, основанный на языке XML, и способы их обработки.
Одной из целей XACML является продвижение общей терминологии и функциональной совместимости между реализациями управления доступом нескольких разработчиков. XACML - это стандарт разграничения доступа на основе атрибутов (ABAC), где атрибуты, связанные с пользователем, действием или ресурсом, являются входными данными для принятия решения о том, может ли данный пользователь получить доступ к данному ресурсу определенным образом. Управление доступом на основе ролей (RBAC) также может быть реализовано в XACML как специализация ABAC.
История
Версия 1.0 была утверждена организацией стандартов OASIS в 2003 году.
Версия 2.0 была утверждена организацией стандартов OASIS 1 февраля 2005 года.
Первая спецификация XACML 3.0 была выпущена 10 августа 2010 года[1]. Последняя версия, XACML 3.0, была стандартизирована в январе 2013 года[2].
Модель языка
Основными компонентами языковой модели являются правило, политика и набор политик.
Правило
Правило является простейшей единицей модели. Правило должно быть включено в политику, самостоятельной единицей оно не является.
Основные компоненты правила:
- Цель
- Условие
- Эффект
- Обязательство
- Рекомендация
Цель
Цель определяет запросы, к которым данное правило применимо, в форме логических выражений над атрибутами запроса. Запрос содержит в себе атрибуты субъекта, запрашивающего доступ, атрибуты ресурса, доступ к которому запрашиваются, и атрибуты действия, которое пользователь хочет совершить. Также запрос может содержать и другие атрибуты, например, атрибуты окружения. Если цель в правиле отсутствует, она наследуется от родительского элемента (политики).
Условие
Условия представляют собой расширенную форму цели, которые могут использовать более широкий диапазон функций и, что более важно, могут использоваться для сравнения двух или более атрибутов вместе, например, subject-id == doctor-id (идентификатор объекта равен идентификатору врача).
Эффект
Эффект может принимать два значения: "разрешить" или "запретить". Эффект правила срабатывает в случае положительного вычисления правила (если цель и условие принимают значение "истина").
Обязательство
Обязательство описывает то, что должно быть выполнено до или после подтверждения доступа. Если описанные действия выполнить невозможно, утвержденный доступ не может и не должен быть реализован.
Пример:
Allow access to resource MedicalJournal with attribute patientID=x
if Subject match DesignatedDoctorOfPatient
and action is read
with obligation
on Permit: doLog_Inform(patientID, Subject, time)
on Deny : doLog_UnauthorizedLogin(patientID, Subject, time)
Рекомендация
Выполняет те же функции, что и обязательство, но, в отличие от него, может быть проигнорировано.
Политика
Используется для объединения правил.
Основные компоненты политики:
- Цель
- Алгоритм объединения правил
- Набор правил
- Обязательство
- Рекомендация
Алгоритм объединения правил
Используется для разрешения конфликтов. Например, если одно из правил принимает значение "истина", а другое "ложь", алгоритм объединения правил определяет, какое значение примет сама политика.
Набор политик
Набор политик нужен для объединения группы политик с целью их более быстрой фильтрации на основе общего назначения, задаваемого в цели группы политик.
Основные компоненты:
- Цель
- Алгоритм объединения политик
- Набор политик
- Обязательство
- Рекомендация
Модель авторизации
Основные компоненты модели
Название | Перевод | Описание |
---|---|---|
PAP (Policy Administration Point) | Точка управления политиками | Системный объект, который управляет политиками авторизации |
PDP (Policy Decision Point) | Точка принятия решения по запросу | Системный объект, который сравнивает запросы доступа с политиками авторизации перед принятием решения о доступе |
PEP (Policy Enforcement Point) | Точка применения политики | Системный объект, который перехватывает запрос пользователя на доступ к ресурсу, делает запрос решения к PDP, чтобы получить решение о доступе (т.е. доступ к ресурсу утвержден или отклонен) и действует на основании принятого решения |
PIP (Policy Information Point) | Информационная точка политики | Системный объект, который действует как источник значений атрибута |
PRP (Policy Retrieval Point) | Точка хранения политики | Системный объект, в котором хранятся политики авторизации доступа XACML. Обычно это база данных или файловая система |
Context handler | Обработчик контекста | Системный объект, который переводит запросы об авторизации в формат XACML, координируется с PIP для добавления значений атрибутов в запрос, и переводит решение об авторизации из формата XACML в собственный формат ответа |
Компоненты модели взаимодействуют между собой посредством запросов и ответов в формате XACML. Запрос содержит в себе атрибуты. Ответ содержит результат вычисления политик (имеет 4 значения: "разрешить", "запретить", "не применимо", "не определено"). Кроме того, ответ может содержать в себе обязательства, которые необходимо выполнить в случае разрешения или запрета доступа.
Процесс авторизации[3]
- PAP пересылает политики и наборы политик PDP.
- Пользователь отправляет запрос об авторизации в PEP.
- PEP отправляет запрос в обработчик контекста.
- Обработчик контекста создает запрос в формате XACML.
- PDP запрашивает дополнительные атрибуты у обработчика контекста.
- Обработчик контекста запрашивает атрибуты у PIP.
- PIP получает необходимые атрибуты.
- PIP возвращает запрошенные атрибуты обработчику контекста.
- Обработчик контекста отсылает запрошенные атрибуты PDP. PDP вычисляет политики.
- PDP возвращает ответ в обработчик контекста.
- Обработчик контекста переводит ответ из формата XACML в собственный формат ответа PEP.
- (Не показано) На основании результата вычисления политик, полученного из ответа, PEP принимает решение о доступе и исполняет обязательства. Если доступ разрешен, PEP разрешает доступ к ресурсу, иначе запрещает.
Примеры политик
Авторизация с учетом даты и времени в XACML
Это правило запрещает доступ пользователям, которые не входили в систему в течение 30 дней.
В псевдокоде: Запретить, если время_сейчас > время_прошлого_доступа + 30 дней.
<xacml3:Rule RuleId="f6637b3f-3690-4cce-989c-2ce9c053d6fa" Effect="Deny">
<xacml3:Description>Use it or lose it: this policy denies access if lastLogin is more than 30 days away from today's date</xacml3:Description>
<xacml3:Target/>
<xacml3:Condition >
<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-greater-than"/>
<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-category:access-subject" 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:AttributeDesignator 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:Apply>
</xacml3:Condition>
</xacml3:Rule>
Авторизация с учетом времени в XACML
Это правило предоставляет субъекту доступ к ресурсу, если текущее время с 9:00 до 17:00.
<xacml3:Rule RuleId="c01d7519-be21-4985-88d8-10941f44590a" Effect="Permit">
<xacml3:Description>Allow if time between 9 and 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: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:Target>
</xacml3:Rule>
Примеры XACML запросов и ответов
Запрос XACML
Запрос: Алиса хочет просмотреть документ №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">view</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 DataType="http://www.w3.org/2001/XMLSchema#string">Alice</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
</xacml-ctx:Request>
Первый элемент <Attributes>
содержит атрибуты действия (прочитать), второй элемент <Attributes>
содержит атрибуты ресурса, к которому субъект хочет применить указанное действие (документ №123), третий элемент <Attributes>
содержит имя субъекта (Алиса).
Пример ответа XACML
Ответ: Не применимо
<xacml-ctx:Response xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Result>
<xacml-ctx:Decision>NotApplicable</xacml-ctx:Decision>
<xacml-ctx:Status>
<xacml-ctx:StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok"/>
</xacml-ctx:Status>
</xacml-ctx:Result>
</xacml-ctx:Response>
Элемент <Decision>
содержит результат вычисления политик (не применимо).
Пример ответа XACML с обязательством
Ответ: Разрешить, выполнить обязательство с индексом "logAccess" (доступ к журналу)
<xacml-ctx:Response xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Result>
<xacml-ctx:Decision>Permit</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:Result>
</xacml-ctx:Response>
Элемент <Decision>
содержит результат вычисления политик (разрешить). Элемент <Obligations>
содержит обязательства, которые нужно применить. В данном случае <Obligations>
содержит один элемент <Obligation>
с идентификатором "logAccess" (доступ к журналу).
Реализации XACML
Название | Версия
XACML |
Технология | Лицензия |
---|---|---|---|
AuthzForce (OW2)[4] / (GitHub) | XACML 3.0 | Java | GPL |
Balana[5] | XACML 3.0, 2.0, 1.1 и 1.0 | Java | Apache 2.0 |
ndg-xacml[6] | XACML 2.0 | Python | BSD |
AT&T XACML[7] | XACML 3.0 | Java | MIT |
Oracle Entitlements Server[8] | XACML 3.0 | Java, .NET | Проприетарная |
Security Policy Tool[9] | XACML 3.0, 2.0 | Java | Проприетарная |
Литература
- Gertz, M. and Jajodia, S. 4.2 HACML // Handbook of Database Security: Applications and Trends. — Springer, 2007. — 591 p. — ISBN 9780387485331.
- Bertino, E. and Martino, L. and Paci, F. and Squicciarini, A. Security for Web Services and Service-Oriented Architectures. — Springer, 2009. — P. 67-75, 170. — 230 p. — ISBN 9783540877424.
Ссылки
- OASIS eXtensible Access Control Markup Language (XACML) TC | OASIS . www.oasis-open.org. Дата обращения: 4 декабря 2019.
- eXtensible Access Control Markup Language (XACML) V3.0 approved as an OA . lists.oasis-open.org. Дата обращения: 4 декабря 2019.
- eXtensible Access Control Markup Language (XACML) Version 3.0 . docs.oasis-open.org. Дата обращения: 11 декабря 2019.
- OW2 - Main - AuthZForce (Community Edition) . authzforce.ow2.org. Дата обращения: 14 декабря 2019.
- Contribute to wso2/balana development by creating an account on GitHub. — 2019-12-12.
- Philip Kershaw. ndg-xacml: XACML 2.0 implementation for the NERC DataGrid.
- AT&T implementation of OASIS XACML 3.0 Specification. — 2021-09-04.
- Oracle Entitlements Server . www.oracle.com. Дата обращения: 14 декабря 2019.
- Security Policy Tool – A Tool for Editing, Modeling, Testing, and Verifying Security Policies to Prevent Access Control Leakage . securitypolicytool.com. Дата обращения: 14 декабря 2019.