Введение

Язык разметки расширяемого контроля доступа (Extensible Access Control Markup Language, XACML) — это стандартный язык разметки на основе XML для определения политик контроля доступа. Стандарт, опубликованный организацией OASIS, определяет декларативный, гранулярный язык политик контроля доступа на основе атрибутов, архитектуру и модель обработки, описывающую, как оценивать запросы доступа в соответствии с правилами, определенными в политиках. XACML является, прежде всего, системой контроля доступа на основе атрибутов. В XACML атрибуты – информация о субъекте, запрашивающем доступ к ресурсу, самом ресурсе и окружении – служат входными данными для принятия решения о предоставлении или отказе в доступе. XACML также может использоваться для реализации контроля доступа на основе ролей. В XACML решения о контроле доступа выражаются в виде Правил. Каждое Правило состоит из ряда условий, определяющих, будет ли данный запрос одобрен. Если Правило применимо к запросу, но условия внутри Правила не могут быть оценены, результат будет неопределенным (Indeterminate). Правила объединяются в Политики, а Набор политик (PolicySet) содержит Политики и, возможно, другие Наборы политик. Каждый из них также включает в себя Цель (Target) – простое условие, определяющее, следует ли оценивать его для данного запроса. Алгоритмы комбинирования могут использоваться для объединения Правил и Политик различными способами, с учетом потенциально различных результатов. XACML также поддерживает обязательства (Obligations) и рекомендации (Advice). Обязательства определяют действия, которые должны быть выполнены в процессе обработки запроса, например, для ведения журналов. Рекомендации аналогичны, но могут быть проигнорированы.

История

Версия 1.0 была утверждена организацией по стандартизации OASIS в 2003 году. Версия 2.0 была утверждена организацией по стандартизации OASIS 1 февраля 2005 года. Версия 3.0 была утверждена OASIS в январе 2013 года.

Атрибуты и категории

Политики, наборы политик, правила и запросы используют субъекты, ресурсы, окружение и действия. Субъект – это сущность, запрашивающая доступ. Субъект имеет один или несколько атрибутов. Ресурс – это компонент данных, сервиса или системы. Ресурс имеет один или несколько атрибутов. Действие определяет тип доступа, запрашиваемого к ресурсу. Действия имеют один или несколько атрибутов. Окружение может опционально предоставлять дополнительную информацию.

Цели

XACML предоставляет целевое назначение, которое, по сути, представляет собой набор упрощенных условий для субъекта, ресурса и действия, которые должны быть выполнены, чтобы набор политик, политика или правило могли быть применены к данному запросу. Как только политика или набор политик признается применимым к запросу, его правила оцениваются для определения решения о доступе и ответа. Помимо проверки применимости, информация о целевом назначении также предоставляет возможность индексировать политики, что полезно при хранении большого количества политик и необходимости быстрого поиска применимых. Когда поступает запрос на доступ к сервису, PDP будет знать, где искать политики, которые могут быть применимы к этому запросу, поскольку политики индексируются на основе ограничений целевого назначения. Следует отметить, что целевое назначение может также указывать на применимость к любому запросу. Наборы политик, политики и правила могут содержать элементы целевого назначения.

Условия

Условия существуют только в правилах. Условия – это, по сути, расширенная форма цели, которая может использовать более широкий спектр функций и, что важнее, позволяет сравнивать два или более атрибута одновременно, например, subject id == doctor id. С помощью условий можно реализовать проверки разграничения полномочий или контроль доступа на основе взаимосвязей.

Комбинирующие алгоритмы

Что происходит в XACML, если два правила (или политики) противоречат друг другу? Представьте, например, первое правило, разрешающее менеджерам просматривать документы, и второе правило, запрещающее кому-либо работать до 9 утра. Что, если запрос касается попытки Элис просмотреть документ в 8 утра? Какое правило имеет приоритет? Ответ на этот вопрос дают алгоритмы объединения. Они помогают разрешать конфликты. XACML определяет несколько алгоритмов объединения, которые идентифицируются атрибутом RuleCombiningAlgId или PolicyCombiningAlgId элементов <Policy> или <PolicySet> соответственно. Алгоритм объединения правил определяет процедуру для вынесения решения о доступе на основе индивидуальных результатов оценки набора правил. Аналогично, алгоритм объединения политик определяет процедуру для вынесения решения о доступе на основе индивидуальных результатов оценки набора политик.

Схема

http://docs.oasis-open.org/xacml/3.0/xacml-core-v3-schema-wd-17.xsd

Типы данных

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:names:tc:xacml:1.0:data type:rfc822Name
urn:oasis:names:tc:xacml:1.0:data type:x500Name
urn:oasis:names:tc:xacml:2.0:data type:dnsName
urn:oasis:names:tc:xacml:2.0:data type:ipAddress
urn:oasis:names:tc:xacml:3.0:data type:xpathExpression

Новые профили

XACML 3.0 представляет административное делегирование, JSON-профиль XACML (запрос/ответ), REST-профиль XACML, профиль множественного принятия решений XACML и многое другое.

Другие особенности

Другие новые функции XACML 3.0 перечислены на сайте http://www.webfarmr.eu/2010/07/enhancements и новые функции в xacml 3 axiomatics/.

Рабочая группа XACML также публикует список изменений здесь: http://wiki.oasis-open.org/xacml/DifferencesBetweenXACML2.0AndXACML3.0.

Профиль многократного решения XACML 3.0

По умолчанию PDP обрабатывает один запрос за раз, например: "Может ли Алиса просмотреть элемент #1?". PDP затем отвечает единым решением. Однако, иногда необходимо отправлять несколько запросов одновременно, например: "Может ли Алиса просматривать, редактировать или удалять элементы #1, #2, #3?". Профиль множественных решений XACML позволяет реализовать этот сценарий. PDP обычно вычисляет произведение всех комбинаций, то есть, в вышеупомянутом примере будет возвращено 1 x 3 x 3 = 9 решений в одном ответе.

Профиль ALFA XACML

ALFA расшифровывается как Abbreviated Language for Authorization (Сокращенный язык авторизации). Это легковесный синтаксис, используемый для реализации политик управления доступом на основе политик. Примеры можно найти в основной статье.

Профиль JSON XACML

Профиль JSON XACML упрощает взаимодействие между точкой принуждения политики (PEP) и точкой принятия решений о политике (PDP).

XACML и агент открытой политики

XACML – это язык определения политик, почти полностью основанный на XML и XSLT, определенный открытой спецификацией OASIS. Спецификация XACML не охватывает проектирование или реализацию точек принятия решений по политике (PDP), а лишь язык политик, который они используют. Многие проприетарные и решения с открытым исходным кодом PDP используют XACML в качестве языка определения политик. Open Policy Agent (OPA) – это реализация точки принятия решений по политике (PDP) с открытым исходным кодом, способная интерпретировать язык политик для вынесения решений. OPA – это универсальная реализация PDP, которую можно использовать в любом сценарии, где требуется принятие решения на основе политики, подобно реализациям PDP, поддерживающим спецификацию XACML. Язык определения политик OPA – Rego, который является языком, неполным по Тьюрингу, основанным на Datalog. Политики, написанные на XACML, могут быть преобразованы в Rego и наоборот.

XACML и SAML

SAML — это стандарт единого входа (SSO) и федерации удостоверений, используемый для аутентификации. SAML применяется как общий формат токена удостоверений между различными приложениями. SAML и XACML определены организацией OASIS. SAML и XACML были разработаны для совместной работы, при этом SAML используется для передачи информации об удостоверениях / виртуальных идентичностях, а XACML — для реализации логики контроля доступа посредством политик.