XACML | |
---|---|
Создатель | OASIS |
Официальный сайт | oasis-open.org/committee… |
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 значения: "разрешить", "запретить", "не применимо", "не определено"). Кроме того, ответ может содержать в себе обязательства, которые необходимо выполнить в случае разрешения или запрета доступа.
Это правило запрещает доступ пользователям, которые не входили в систему в течение 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>
Это правило предоставляет субъекту доступ к ресурсу, если текущее время с 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>
Запрос: Алиса хочет просмотреть документ №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-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>
содержит результат вычисления политик (не применимо).
Ответ: Разрешить, выполнить обязательство с индексом "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 |
Технология | Лицензия |
---|---|---|---|
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 | Проприетарная |