Введение
Язык разметки расширяемого контроля доступа (Extensible Access Control Markup Language, XACML) — это стандартный язык разметки на основе XML для определения политик контроля доступа. Стандарт, опубликованный организацией OASIS, определяет декларативный, гранулярный язык политик контроля доступа на основе атрибутов, архитектуру и модель обработки, описывающую, как оценивать запросы доступа в соответствии с правилами, определенными в политиках. XACML является, прежде всего, системой контроля доступа на основе атрибутов. В XACML атрибуты – информация о субъекте, запрашивающем доступ к ресурсу, самом ресурсе и окружении – служат входными данными для принятия решения о предоставлении или отказе в доступе. XACML также может использоваться для реализации контроля доступа на основе ролей. В XACML решения о контроле доступа выражаются в виде Правил. Каждое Правило состоит из ряда условий, определяющих, будет ли данный запрос одобрен. Если Правило применимо к запросу, но условия внутри Правила не могут быть оценены, результат будет неопределенным (Indeterminate). Правила объединяются в Политики, а Набор политик (PolicySet) содержит Политики и, возможно, другие Наборы политик. Каждый из них также включает в себя Цель (Target) – простое условие, определяющее, следует ли оценивать его для данного запроса. Алгоритмы комбинирования могут использоваться для объединения Правил и Политик различными способами, с учетом потенциально различных результатов. XACML также поддерживает обязательства (Obligations) и рекомендации (Advice). Обязательства определяют действия, которые должны быть выполнены в процессе обработки запроса, например, для ведения журналов. Рекомендации аналогичны, но могут быть проигнорированы.
NOTOC
The eXtensible Access Control Markup Language (XACML) is an XML based standard markup language for specifying access control policies. The standard, published by OASIS, defines a declarative fine grained, attribute based access control policy language, an architecture, and a processing model describing how to evaluate access requests according to the rules defined in policies. XACML is primarily an attribute based access control system. In XACML, attributes – information about the subject accessing a resource, the resource to be addressed, and the environment – act as inputs for the decision of whether access is granted or not. XACML can also be used to implement role based access control. In XACML, access control decisions to be taken are expressed as Rules. Each Rule comprises a series of conditions which decide whether a given request is approved or not. If a Rule is applicable to a request but the conditions within the Rule fail to evaluate, the result is Indeterminate. Rules are grouped together in Policies, and a PolicySet contains Policies and possibly other PolicySets. Each of these also includes a Target, a simple condition that determines whether it should be evaluated for a given request. Combining algorithms can be used to combine Rules and Policies with potentially differing results in various ways. XACML also supports obligations and advice expressions. Obligations specify actions which must be executed during the processing of a request, for example for logging. Advice expressions are similar, but may be ignored.
История
Версия 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
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 — для реализации логики контроля доступа посредством политик.