XACML - Википедия - XACML
Парадигма | Декларативное программирование |
---|---|
Разработчик | Организация по развитию стандартов структурированной информации (OASIS) |
Впервые появился | 16 апреля 2001 г.[1] |
Лицензия | ОАЗИС |
Расширения имени файла | .xml, .alfa |
Интернет сайт | www.oasis-open.org |
Основной реализации | |
Аксиоматика, AuthzForce | |
Диалекты | |
АЛЬФА (XACML) | |
Под влиянием | |
XML, SAML | |
Под влиянием | |
АЛЬФА (XACML) |
XACML означает "Расширяемый язык разметки контроля доступа". Стандарт определяет декларативную детализированную, основанную на атрибутах контроль доступа язык политики,[2] архитектура и модель обработки, описывающая, как оценивать запросы доступа в соответствии с правилами, определенными в политиках.
Как опубликованная стандартная спецификация, одна из целей XACML - продвигать общую терминологию и взаимодействие между реализациями управления доступом от нескольких поставщиков. XACML - это прежде всего управление доступом на основе атрибутов система (ABAC), также известная как управление доступом на основе политик (PBAC), где атрибуты (биты данных), связанные с пользователем, действием или ресурсом, являются входными данными для принятия решения о том, может ли данный пользователь получить доступ к данному ресурсу определенным образом. Контроль доступа на основе ролей (RBAC) также может быть реализован в XACML как специализация ABAC.
Модель XACML поддерживает и поощряет отделение принудительного исполнения (PEP) от принятия решений (PDP) от управления / определения (PAP) авторизации. Когда решения о доступе жестко запрограммированы в приложениях (или основаны на идентификаторах пользователей локальной машины и списки контроля доступа (ACL)), очень сложно обновить критерии принятия решения при изменении управляющей политики, и трудно добиться видимости или аудита авторизации на месте. Когда клиент не зависит от решения о доступе, разрешение политики могут обновляться «на лету» и немедленно влиять на всех клиентов.
История
Версия 1.0 была ратифицирована ОАЗИС организация стандартов в 2003 г.
Версия 2.0 была ратифицирована организацией по стандартизации OASIS 1 февраля 2005 г.
Версия 3.0 была ратифицирована OASIS в январе 2013 года.[3]
Архитектура
Терминология
Ненормативная терминология (следующая RFC 2904, кроме PAP)
Abbr. | Срок | Описание |
---|---|---|
PAP | Точка администрирования политики | Пункт, который управляет политиками авторизации доступа |
PDP | Точка принятия политического решения | Точка, которая сравнивает запросы доступа с политиками авторизации перед выдачей решений о доступе |
PEP | Пункт применения политики | Точка, которая перехватывает запрос пользователя на доступ к ресурсу, отправляет запрос решения в PDP для получения решения о доступе (т.е. доступ к ресурсу одобрен или отклонен), и действует в соответствии с полученным решением |
PIP | Пункт информации о политике | Системный объект, который действует как источник значений атрибутов (т. Е. Ресурс, субъект, среда) |
PRP | Точка получения политики | Точка, где хранятся политики авторизации доступа XACML, обычно это база данных или файловая система. |
Поток
- Пользователь отправляет запрос, который перехватывается точкой применения политики (PEP).
- PEP преобразует запрос в запрос авторизации XACML.
- PEP пересылает запрос авторизации в точку принятия решения о политике (PDP)
- PDP сравнивает запрос авторизации с политиками, с которыми он настроен. Политики приобретаются через точку получения политики (PRP) и управляются точкой администрирования политик (PAP). При необходимости он также извлекает значения атрибутов из базовых точек информации о политике (PIP).
- PDP принимает решение (Permit / Deny / NotApplicable / Indeterminate) и возвращает его PEP.
Элементы политики
Конструкционные элементы
XACML состоит из трех уровней элементов:
- PolicySet,
- Политика,
- Правило.
Набор политик может содержать любое количество элементов политики и элементов набора политик. Политика может содержать любое количество элементов правила.[4]
Атрибуты и категории
Политики, наборы политик, правила и запросы - все используют субъекты, ресурсы, среды и действия.
- Субъектный элемент - это объект, запрашивающий доступ. У субъекта есть один или несколько атрибутов.
- Элемент ресурса - это данные, служба или системный компонент. У ресурса есть один или несколько атрибутов.
- Элемент действия определяет тип запрашиваемого доступа к ресурсу. Действия имеют один или несколько атрибутов.
- Элемент среды может дополнительно предоставлять дополнительную информацию.
Цели
XACML предоставляет цель,[5] который в основном представляет собой набор упрощенных условий для субъекта, ресурса и действия, которые должны быть выполнены, чтобы набор политик, политика или правило применялись к данному запросу. Когда обнаруживается, что политика или набор политик применим к данному запросу, его правила оцениваются, чтобы определить решение о доступе и ответ.
Целевая информация - это не только способ проверки применимости, но и способ индексирования политик, что полезно, если вам нужно сохранить много политик, а затем быстро просмотреть их, чтобы найти, какие из них применимы. , PDP будет знать, где искать политики, которые могут применяться к этому запросу, поскольку политики индексируются на основе их целевых ограничений. Обратите внимание, что цель также может указывать, что она применяется к любому запросу.
Набор политик, политика и правило могут содержать целевые элементы.
Условия
Условия существуют только в правилах. Условия - это, по сути, расширенная форма цели, которая может использовать более широкий спектр функций и, что более важно, может использоваться для сравнения двух или более атрибутов вместе, например идентификатор-субъекта == идентификатор-врача. С помощью условий можно реализовать разделение служебных проверок или управление доступом на основе отношений.
Обязательства и советы
В XACML может использоваться концепция, называемая обязательствами. Обязательство - это директива от точки принятия решения по политике (PDP) до точки реализации политики (PEP) о том, что должно быть выполнено до или после утверждения доступа. Если PEP не может соответствовать директиве, разрешенный доступ май или же должен не реализовано. Увеличение обязательств устраняет разрыв между формальными требованиями и соблюдением политики. Пример обязательства может выглядеть так:
Правило контроля доступа: разрешить доступ к ресурсу MedicalJournal с атрибутом PatientID = x, если тема соответствует DesignatedDoctorOfPatient и действие читается с обязательством на Permit: doLog_Inform (PatientID, Subject, time) при Deny: doLog_UnauthorizedLogin (PatientID, Subject, time)
Обязательство XACML может быть эффективным способом удовлетворения формальных требований (например, неотказуемости), которые может быть трудно реализовать в виде правил контроля доступа. Более того, любые формальные требования будут частью политики контроля доступа как обязательства, а не как отдельные функции, что делает политики согласованными и упрощает централизацию ИТ-среды.
Обязательства могут быть использованы для сценариев «разбития стекла» или повышения доверия («вы не можете перевести 1000 долларов без двухфакторной аутентификации - вот ссылка на страницу 2FA»).
В дополнение к обязательствам XACML поддерживает рекомендации, которые идентичны обязательствам, с той разницей, что PEP не обязан обеспечивать выполнение рекомендаций (отсюда и его название).
Объединение алгоритмов
Что происходит в XACML, если есть два правила (или политики), которые противоречат друг другу? Представьте себе, например, первое правило, в котором говорится менеджеры могут просматривать документы и второе правило, которое говорит никто не может работать до 9 утра. Что, если запрос касается Алисы, пытающейся просмотреть документ в 8 утра? Какое правило выигрывает? Об этом говорят алгоритмы комбинирования. Они помогают разрешать конфликты.
XACML определяет ряд алгоритмов комбинирования[6] что можно определить по RuleCombiningAlgId или же PolicyCombiningAlgId атрибут элементов
В таблица истинности находится здесь поможет вам понять, как происходит объединение алгоритмов и объединение политик.
Функции
XACML определяет длинный список функций (около 300) для управления и сравнения атрибутов с другими атрибутами и значениями:
- Равенство, неравенство и другие функции согласования
- Арифметические функции
- Строковые функции
- Логические функции (и, или, не)
- Функции набора и сумки
- Функции высшего порядка
- Функции регулярного выражения
- Функции XPath
Функции и их идентификаторы полностью описан в стандарте. Функции зависят от типа, т.е. есть функция для равенства строк и другая для целочисленного равенства.
Равенство, неравенство и другие функции согласования
Арифметические функции
Обратитесь к стандарту для формального определения этих функций..
- добавить (двойное и целое)
- вычесть (двойное и целое)
- умножить (двойное и целое)
- делить (двойное и целое)
- mod (двойное и целое)
- абс (двойное и целое)
- круглый
- этаж
Строковые функции
Обратитесь к стандарту для формального определения этих функций..
- конкатенация строк
- строка начинается с
- струна заканчивается с
- строка-содержит
- строка-подстрока
Логические функции (и, или, не)
Функции набора и сумки
Функции регулярного выражения
Функции XPath
Функции высшего порядка
Список функций высшего порядка приведен ниже. Формальное определение см. В Стандарт XACML.
- любой из (урна: оазис: имена: tc: xacml: 3.0: функция: любой из )
- параметры: anyAtomicOrBag anyAtomicOrBag *
- возвращаемое значение: логическое
- Описание: эта функция принимает логическую функцию и 2 или более значений атрибутов или сумок. Функция высшего порядка применяет булеву функцию к остальным параметрам.
- Пример:
anyOf (функция [stringEqual], allowedRoles, stringOneAndOnly (роль))
вернет истину, если (а) роль однозначная, (б) есть по крайней мере одно значение в группе атрибутов allowedRoles, равное значению внутри однозначной роли сумки атрибута.
- все (урна: оазис: имена: tc: xacml: 3.0: функция: все из )
- параметры: anyAtomicOrBag anyAtomicOrBag *
- возвращаемое значение: логическое
- anyOfAny (урна: оазис: имена: tc: xacml: 3.0: функция: любой из любых )
- параметры: anyAtomicOrBag anyAtomicOrBag *
- возвращаемое значение: логическое
- allOfAny (урна: оазис: имена: tc: xacml: 1.0: функция: все из любого )
- параметры: сумка [anyAtomic] сумка [anyAtomic]
- возвращаемое значение: логическое
- anyOfAll (урна: оазис: имена: tc: xacml: 1.0: функция: любой из всех )
- параметры: сумка [anyAtomic] сумка [anyAtomic]
- возвращаемое значение: логическое
- allOfAll (urn: oasis: names: tc: xacml: 1.0: function: all-of-all )
- параметры: сумка [anyAtomic] сумка [anyAtomic]
- возвращаемое значение: логическое
- карта (урна: оазис: имена: tc: xacml: 1.0: функция: карта )
- параметры: anyAtomicOrBag anyAtomicOrBag *
- возвращаемое значение: сумка [anyAtomic]
XACML 3.0
Схема
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
- урна: оазис: имена: tc: xacml: 1.0: тип данных: rfc822Name
- урна: оазис: имена: tc: xacml: 1.0: тип данных: x500Name
- урна: оазис: имена: tc: xacml: 2.0: тип данных: dnsName
- урна: оазис: имена: tc: xacml: 2.0: тип данных: ipAddress
- урна: оазис: имена: tc: xacml: 3.0: тип данных: xpathExpression
Новое в XACML 3.0
Новые профили
XACML 3.0 представляет административное делегирование, профиль JSON XACML (запрос / ответ), профиль REST XACML, профиль множественных решений XACML и многое другое.
Делегация
Реализация делегирования является новой в XACML 3.0. Механизм делегирования используется для поддержки децентрализованного администрирования политик доступа. Это позволяет полномочному органу (делегатору) делегировать все или часть своих полномочий или чьих-либо полномочий другому пользователю (делегату) без необходимости изменения корневой политики.
Это связано с тем, что в этой модели делегирования права делегирования отделены от прав доступа. Вместо этого они называются политиками административного контроля.[7] Политики управления доступом и административные политики работают вместе, как в следующем сценарии:
Многие сервисы партнерства компаний защищены системой контроля доступа. В системе реализованы следующие основные правила для защиты своих ресурсов и разрешения делегирования:
Правила контроля доступа: разрешите доступ к ресурсу с атрибутом WebService, если субъект - сотрудник, а действие - чтение или запись. Правила административного контроля: разрешить делегирование правила контроля доступа № 1 субъектам с атрибутом Консультант. Условия: срок делегирования истекает в течение 6 месяцев, у ресурса не должно быть атрибута StrictlyInternal.
(Атрибуты можно получить из внешнего источника, например, из каталога LDAP.)
Когда консультант входит в корпорацию, супервизор консультанта может направить делегирование на месте, разрешив консультанту доступ к системам напрямую.
Делегатору (в данном сценарии - супервизору) может быть предоставлено только право делегировать ограниченный набор прав доступа консультантам.
Другие свойства
Другие новые функции XACML 3.0 перечислены на http://www.webfarmr.eu/2010/07/enhancements-and-new-features-in-xacml-3-axiomatics/
XACML TC также публикует здесь список изменений: http://wiki.oasis-open.org/xacml/DifferencesBetweenXACML2.0AndXACML3.0
Образцы политик
Авторизация на основе даты и времени в XACML
Это правило реализует использовать это потерять это парадигма контроля доступа. Если пользователь не входит в систему в течение 30 дней, он теряет доступ.
В псевдокоде: запретить, если currentDateTime> lastLogin + 30 дней
RuleId ="f6637b3f-3690-4cce-989c-2ce9c053d6fa" Эффект ="Отрицать"> <xacml3:Description>Используйте или потеряйте: эта политика запрещает доступ, если lastLogin находится более чем на 30 дней от сегодняшней даты</xacml3:Description> <xacml3:Target/> > FunctionId ="urn: oasis: names: tc: xacml: 1.0: function: any-of"> FunctionId ="урна: оазис: имена: tc: xacml: 1.0: функция: dateTime-больше-чем"/> FunctionId ="урна: оазис: имена: tc: xacml: 3.0: функция: dateTime-add-dayTimeDuration"> FunctionId ="урна: оазис: имена: tc: xacml: 1.0: функция: dateTime-one-and-only"> Категория ="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 ="ложный"/> </xacml3:Apply> DataType ="http://www.w3.org/2001/XMLSchema#dayTimeDuration">P30D</xacml3:AttributeValue> </xacml3:Apply> Категория ="урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда" AttributeId ="urn: oasis: names: tc: xacml: 1.0: environment: current-dateTime" DataType ="http://www.w3.org/2001/XMLSchema#dateTime" MustBePresent ="ложный"/> </xacml3:Apply> </xacml3:Condition></xacml3:Rule>
Авторизация по времени в XACML
Это правило предоставляет доступ, если текущее время больше 9 утра и меньше 5 вечера.
RuleId ="c01d7519-be21-4985-88d8-10941f44590a" Эффект ="Разрешать"> <xacml3:Description>Разрешить, если время между 9 и 5</xacml3:Description> <xacml3:Target> <xacml3:AnyOf> <xacml3:AllOf> MatchId ="урна: оазис: имена: tc: xacml: 1.0: функция: время больше, чем"> DataType ="http://www.w3.org/2001/XMLSchema#time">09:00:00</xacml3:AttributeValue> Категория ="урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда" AttributeId ="урна: оазис: имена: tc: xacml: 1.0: среда: текущее время" MustBePresent ="ложный" DataType ="http://www.w3.org/2001/XMLSchema#time"/> </xacml3:Match> </xacml3:AllOf> </xacml3:AnyOf> <xacml3:AnyOf> <xacml3:AllOf> MatchId ="urn: oasis: names: tc: xacml: 1.0: function: time-less-than"> DataType ="http://www.w3.org/2001/XMLSchema#time">17:00:00</xacml3:AttributeValue> Категория ="урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда" AttributeId ="урна: оазис: имена: tc: xacml: 1.0: среда: текущее время" MustBePresent ="ложный" DataType ="http://www.w3.org/2001/XMLSchema#time"/> </xacml3:Match> </xacml3:AllOf> </xacml3:AnyOf> </xacml3:Target></xacml3:Rule>
Примеры запросов и ответов
Запрос XACML 3.0
ReturnPolicyIdList ="истинный" CombinedDecision ="ложный" xmlns: xacml-ctx ="urn: oasis: names: tc: xacml: 3.0: core: schema: wd-17"> Категория ="урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие" > AttributeId ="actionId" IncludeInResult ="истинный"> DataType ="http://www.w3.org/2001/XMLSchema#string">Посмотреть</xacml-ctx:AttributeValue> </xacml-ctx:Attribute> </xacml-ctx:Attributes> Категория ="урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс" > AttributeId ="идентификатор ресурса" IncludeInResult ="истинный"> DataType ="http://www.w3.org/2001/XMLSchema#string">документ № 123</xacml-ctx:AttributeValue> </xacml-ctx:Attribute> </xacml-ctx:Attributes> Категория ="urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject" > AttributeId ="user.identifier" IncludeInResult ="истинный"> DataType ="http://www.w3.org/2001/XMLSchema#string">Алиса</xacml-ctx:AttributeValue> </xacml-ctx:Attribute> </xacml-ctx:Attributes></xacml-ctx:Request>
Ответы XACML 3.0
Пример ответа XACML 3.0
xmlns: xacml-ctx ="urn: oasis: names: tc: xacml: 3.0: core: schema: wd-17"> <xacml-ctx:Result> <xacml-ctx:Decision>Непригодный</xacml-ctx:Decision> <xacml-ctx:Status> Значение ="urn: oasis: names: tc: xacml: 1.0: status: ok"/> </xacml-ctx:Status> </xacml-ctx:Result></xacml-ctx:Response>
Образец ответа XACML 3.0 с обязательством
Следующее содержит блок Обязательства. Обязательства - это заявления, которые могут быть возвращены вместе с решением, чтобы обогатить поток решений. В этом примере PEP должен регистрировать предоставление доступа.
xmlns: xacml-ctx ="urn: oasis: names: tc: xacml: 3.0: core: schema: wd-17"> <xacml-ctx:Result> <xacml-ctx:Decision>Разрешать</xacml-ctx:Decision> <xacml-ctx:Status> Значение ="urn: oasis: names: tc: xacml: 1.0: status: ok"/> </xacml-ctx:Status> <xacml-ctx:Obligations> ObligationId ="logAccess"> </xacml-ctx:Obligation> </xacml-ctx:Obligations> <xacml-ctx:PolicyIdentifierList> Версия ="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>
Профиль множественных решений XACML 3.0
По умолчанию PDP обрабатывает один запрос за раз, например «Может ли Алиса просмотреть элемент №1?». Затем PDP отвечает единственным решением. Однако иногда необходимо отправить несколько запросов за один раз, например «Может ли Алиса просматривать / редактировать / удалять элементы №1, №2, №3?». В Профиль множественных решений XACML позволяет этот вариант использования. PDP обычно производит произведение всех комбинаций, т.е. в приведенном выше примере в одном ответе будет возвращено 1 x 3 x 3 = 9 решений.
Пример запроса JSON для профиля множественного решения
Способ включения MDP - это отправить массив объектов для любой из категорий, а не массив одного объекта (или просто объекта). Например, AccessSubject - это объект, а Resource - это массив объектов. Последний запускает процесс MDP в PDP, которые поддерживают профиль. Также обратите внимание на использование атрибута IncludeInResult, который сообщает PDP о необходимости вернуть атрибут XACML и его значение в ответ, чтобы решения можно было соотнести с соответствующими значениями атрибутов.
{ "Запрос": { "ReturnPolicyIdList": истинный, "AccessSubject": { "Атрибут": [{ "AttributeId": "com.acme.user.username", "Ценить": "Алиса" }] }, "Ресурс": [{ "Атрибут": [{ "AttributeId": "com.acme.objectType", "Ценить": "записывать" }, { "AttributeId": "com.acme.record.recordId", "Ценить": "123", "IncludeInResult": истинный }] },{ "Атрибут": [{ "AttributeId": "com.acme.objectType", "Ценить": "записывать" }, { "AttributeId": "com.acme.record.recordId", "Ценить": "124", "IncludeInResult": истинный }] },{ "Атрибут": [{ "AttributeId": "com.acme.objectType", "Ценить": "записывать" }, { "AttributeId": "com.acme.record.recordId", "Ценить": "125", "IncludeInResult": истинный }] }], "Действие": [{ "Атрибут": [{ "AttributeId": "com.acme.action", "Ценить": "Посмотреть", "IncludeInResult": истинный }] },{ "Атрибут": [{ "AttributeId": "com.acme.action", "Ценить": "редактировать", "IncludeInResult": истинный }] },{ "Атрибут": [{ "AttributeId": "com.acme.action", "Ценить": "Удалить", "IncludeInResult": истинный }] }] }}
Пример ответа JSON для профиля множественного решения
{ "Ответ": [ { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice": { "Идентификатор": "com.acme.message", "AttributeAssignment": [ { "AttributeId": "com.acme.messageContent", "Ценить": «В доступе отказано - недостаточный допуск»., «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" }, { "AttributeId": "com.acme.user.clearance", "Ценить": "1", «Категория»: "urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId": "com.acme.record.classification", "Ценить": "3", «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" } ] }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "125", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "Посмотреть", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": [ { "Идентификатор": "311a93c0-6e4c-47a0-8e05-76feb39f25e0", "Версия": "1" }, { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" } ], "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } }, { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice": { "Идентификатор": "com.acme.message", "AttributeAssignment": [ { "AttributeId": "com.acme.messageContent", "Ценить": «Доступ запрещен - недостаточный допуск»., «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" }, { "AttributeId": "com.acme.user.clearance", "Ценить": "1", «Категория»: "urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId": "com.acme.record.classification", "Ценить": "2", «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" } ] }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "124", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "Посмотреть", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": [ { "Идентификатор": "311a93c0-6e4c-47a0-8e05-76feb39f25e0", "Версия": "1" }, { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" } ], "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } }, { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "123", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "редактировать", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" }, "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } }, { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "123", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "Удалить", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" }, "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } }, { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice": { "Идентификатор": "com.acme.message", "AttributeAssignment": [ { "AttributeId": "com.acme.messageContent", "Ценить": «Доступ запрещен - недостаточный допуск»., «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" }, { "AttributeId": "com.acme.user.clearance", "Ценить": "1", «Категория»: "urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId": "com.acme.record.classification", "Ценить": "3", «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" } ] }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "125", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "Удалить", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": [ { "Идентификатор": "311a93c0-6e4c-47a0-8e05-76feb39f25e0", "Версия": "1" }, { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" } ], "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } }, { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice": { "Идентификатор": "com.acme.message", "AttributeAssignment": [ { "AttributeId": "com.acme.messageContent", "Ценить": «Доступ запрещен - недостаточный допуск»., «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" }, { "AttributeId": "com.acme.user.clearance", "Ценить": "1", «Категория»: "urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId": "com.acme.record.classification", "Ценить": "3", «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" } ] }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "125", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "редактировать", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": [ { "Идентификатор": "311a93c0-6e4c-47a0-8e05-76feb39f25e0", "Версия": "1" }, { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" } ], "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } }, { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice": { "Идентификатор": "com.acme.message", "AttributeAssignment": [ { "AttributeId": "com.acme.messageContent", "Ценить": «Доступ запрещен - недостаточный допуск»., «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" }, { "AttributeId": "com.acme.user.clearance", "Ценить": "1", «Категория»: "urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId": "com.acme.record.classification", "Ценить": "2", «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" } ] }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "124", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "Удалить", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": [ { "Идентификатор": "311a93c0-6e4c-47a0-8e05-76feb39f25e0", "Версия": "1" }, { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" } ], "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } }, { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "123", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "Посмотреть", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" }, "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } }, { "Решение": "Отрицать", "Положение дел": { "StatusCode": { "Ценить": "urn: oasis: names: tc: xacml: 1.0: status: ok" } }, "AssociatedAdvice": { "Идентификатор": "com.acme.message", "AttributeAssignment": [ { "AttributeId": "com.acme.messageContent", "Ценить": «Доступ запрещен - недостаточный допуск»., «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: среда", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" }, { "AttributeId": "com.acme.user.clearance", "Ценить": "1", «Категория»: "urn: oasis: names: tc: xacml: 1.0: subject-category: access-subject", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" }, { "AttributeId": "com.acme.record.classification", "Ценить": "2", «Категория»: "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Тип данных": "http://www.w3.org/2001/XMLSchema#integer" } ] }, «Категория»: [ { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: ресурс", "Атрибут": { "AttributeId": "com.acme.record.recordId", "Ценить": "124", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } }, { "CategoryId": "урна: оазис: имена: tc: xacml: 3.0: категория-атрибут: действие", "Атрибут": { "AttributeId": "com.acme.action", "Ценить": "редактировать", "Тип данных": "http://www.w3.org/2001/XMLSchema#string" } } ], "PolicyIdentifierList": { "PolicyIdReference": [ { "Идентификатор": "311a93c0-6e4c-47a0-8e05-76feb39f25e0", "Версия": "1" }, { "Идентификатор": "c6b75be8-f3cb-4bda-9b63-812a1f7e5fae", "Версия": "1" } ], "PolicySetIdReference": [ { "Идентификатор": "1016337f-f5f8-4ed4-bd4e-9a2be01fa211", "Версия": "1" }, { "Идентификатор": "http://www.axiomatics.com/automatic-unique-id/5cc13395-20bd-48b3-a56b-68b1c26c3e54", "Версия": "1.0" } ] } } ]}
Ориентация на разработчика
В 2013 и 2014 годах Технический комитет XACML сосредоточился на разработке новых профилей для облегчения интеграции разработчиков. К ним относятся:
- В ОТДЫХ профиль XACML, написанный Ремоном Синнема из EMC
- В JSON профиль XACML, написанный Дэвидом Броссардом из Axiomatics
- В АЛЬФА профиль XACML, написанный Пабло Джамбиаги, Сриджит Наир и Дэвид Броссард из Axiomatics
Все три профиля были представлены на выставке Саммит Cloud Identity 2014 в Монтерее, Калифорния. Использование этих профилей значительно упрощает интеграцию детальной авторизации в приложения.
Профиль ALFA XACML
ALFA расшифровывается как Abbreviated Language for Authorization. Это упрощенный синтаксис, используемый для реализации политик управления доступом на основе политик. Примеры см. В основная статья.
Профиль JSON XACML
Профиль JSON XACML упрощает интеграцию между PEP и PDP.
Пример запроса JSON
{ "Запрос": { "AccessSubject": { "Атрибут": [ { "AttributeId": "com.acme.user.employeeId", "Ценить": "Алиса" } ] }, "Ресурс": { "Атрибут": [ { "AttributeId": "com.acme.record.recordId", "Ценить": "123" }, { "AttributeId": "com.acme.object.objectType", "Ценить": "записывать" } ] }, "Действие": { "Атрибут": [ { "AttributeId": "com.acme.action.actionId", "Ценить": "Посмотреть" } ] }, "Среда": { "Атрибут": [] } } }
Пример ответа JSON
{ "Ответ" : { "Решение" : "Разрешать", "Положение дел" : { "StatusCode" : { "Ценить" : "urn: oasis: names: tc: xacml: 1.0: status: ok" } } } }
XACML и другие стандарты
XACML и агент открытой политики
Агент открытой политики (OPA) похож на XACML в том, что он предоставляет точку принятия решения о политике, внешнюю авторизацию и язык политики (REGO). Он специализируется на авторизации инфраструктуры (например, для Kubernetes, Istio ...), а не на универсальных, ориентированных на API или данных, к которым обращается XACML.
XACML и SAML
SAML - это единый вход для идентификации и стандарт федерации, используемый для аутентификации. SAML используется как общий формат токена идентификации между различными приложениями. SAML и XACML определены ОАЗИС. SAML и XACML были разработаны для взаимодействия там, где SAML используется для передачи идентификационной информации / виртуальных идентификаторов, а XACML используется для управления логикой управления доступом через политики.
XACML и OAuth
OAuth 2.0 считается стандартом авторизации. Он отличается от XACML своим происхождением, назначением и приложениями. OAuth о:
- делегированный контроль доступа: я, пользователь, делегирую другому пользователю или службе доступ к принадлежащему мне ресурсу. Например, через OAuth я предоставляю Twitter (сервису) возможность публиковать сообщения на моей стене Facebook (ресурс).
- обработка пароля антипаттерн.[8] Всякий раз, когда вы хотите объединить 2 службы вместе, в традиционной унаследованной модели вы должны предоставить службу B с вашими учетными данными для службы A, чтобы служба B могла притвориться вами с помощью службы A. Это, конечно, сопряжено со многими рисками. Использование OAuth устраняет проблемы с этими шаблонами и позволяет пользователю контролировать, что служба B может делать от имени пользователя с помощью службы A.
- HTTP-сервисы / ресурсы
- утверждение управляющего владельца (пользователя)
XACML не обрабатывает утверждения пользователей, делегированный доступ или управление паролями. XACML просто предоставляет:
- Архитектура управления доступом с понятием точки принятия решения (PDP), как обсуждалось ранее, и точки реализации политики (PEP).
- язык политик, с помощью которого можно выразить широкий спектр политик контроля доступа, включая политики, которые могут использовать согласие, обрабатываемое / определяемое через OAuth.
XACML и OAuth можно комбинировать вместе для обеспечения более комплексного подхода к авторизации.
Смотрите также
- Контроль доступа на основе ролей
- Контроль доступа на основе атрибутов
- Обязательный контроль доступа
- Дискреционный контроль доступа
- ПЕРМИС
- GeoXACML
- Безопасность на основе модели
- Авторизация
Рекомендации
- ^ Бест, Карл (16 апреля 2001 г.). «Приглашение TC OASIS к участию: XACML». ОАЗИС. Получено 31 октября 2016.
- ^ "чистый-xacml". www.axiomatics.com. Получено 2016-04-27.
- ^ Расширяемый язык разметки контроля доступа (XACML) V3.0 утвержден в качестве стандарта OASIS, расширяемый язык разметки контроля доступа (XACML) V3.0 утвержден в качестве стандарта 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/
- ^ «Понимание алгоритмов объединения XACML». www.axiomatics.com. Получено 2016-04-27.
- ^ XACML v3.0 Административная политика версии 1.0
- ^ «OAuth: как это работает». Ping Identity. Получено 2016-05-26.