АЛЬФА (XACML) - ALFA (XACML)
Парадигма | Декларативное программирование |
---|---|
Разработано | Пабло Джамбиаги |
Разработчик | Аксиоматика |
Впервые появился | 16 июля 2012 г.[1] |
Расширения имени файла | .альфа |
Интернет сайт | связь |
Основной реализации | |
Аксиоматика | |
Под влиянием | |
XML, XACML |
АЛЬФА, сокращенный язык для авторизации, является псевдокод язык, используемый при формулировании политик контроля доступа.[2][3]
История
Источник
XACML, расширяемый язык разметки управления доступом, в качестве основного языка кодирования использует XML. Разработчики всегда изо всех сил пытались написать XML, и поэтому была необходима новая, более легкая нотация. Поэтому исследователь аксиоматики Пабло Джамбиаги разработал ALFA, язык аксиоматики для авторизации.
ALFA отображается непосредственно в XACML. ALFA содержит то же самое структурные элементы как XACML, то есть PolicySet, Policy и Rule.
Axiomatics жертвует ALFA для OASIS
В марте 2014 года Axiomatics объявила о пожертвовании ALFA ОАЗИС Технический комитет XACML[4] чтобы продвинуть его стандартизацию.
ALFA был впоследствии переименован в сокращенный язык для авторизации и подан для стандартизации. Его текущая версия доступна здесь.
Примеры использования
- Пример использования в медицине: врачи могут просматривать медицинские записи пациентов, с которыми они связаны.
- Пример использования в финансовой сфере: сотрудники в Сингапуре могут просматривать счета клиентов сотрудников из Сингапура.
- Случай использования страхования: страховой агент может утвердить претензию пользователя, если претензия находится в том же регионе, что и агент, и если сумма претензии меньше суммы утверждения агента.
Слова доктор, вид, медицинская карта, Сингапур ... все это примеры значений атрибутов. Атрибуты составляют строительные блоки политик в ABAC и, следовательно, в ALFA.
Структура
Как и XACML, ALFA имеет три структурных элемента:
- PolicySet
- Политика
- Правило
Как и в XACML, PolicySet может содержать элементы PolicySet и Policy. Политика может содержать элементы правила. Правило содержит решение (разрешить или запретить). Кроме того, в ALFA можно добавлять элементы правила к элементам PolicySet и Policy. Элементы PolicySet, Policy и Rule могут быть вложенными или ссылаться на них.
Чтобы разрешить конфликты между братьями и сестрами, ALFA (как и XACML) использует алгоритмы объединения. Можно использовать несколько алгоритмов комбинирования. Их поведение определяется в этом таблица истинности
Типы данных
ALFA поддерживает все типы данных которые определены в OASIS XACML Основная спецификация. Некоторые типы данных, например числовое (целое, двойное) и логическое отображение напрямую из ALFA в XACML. Остальные необходимо преобразовать, например атрибуты даты или времени. Чтобы преобразовать атрибут в соответствующий тип данных, используйте обозначение «значение»: тип данных. См. Примеры ниже
Значения собственных атрибутов, отображаемые непосредственно из ALFA в XACML
Строковые, целочисленные, двойные и логические значения отображаются напрямую из ALFA в XACML. Им не нужна конверсия
Политика ALFA с использованием логических атрибутов
namespace exampleBoolean {policy article {target clause userRole == "editor" and actionId == "edit" и itemType == "article" применить firstApplicable rule publishedArticles {target clause published == true allow}}}
Значения атрибутов, требующие явного преобразования
Следующие типы данных атрибутов требуют явного преобразования:
- http://www.w3.org/2001/XMLSchema#time
- http://www.w3.org/2001/XMLSchema#date
- http://www.w3.org/2001/XMLSchema#dateTime
- http://www.w3.org/2001/XMLSchema#anyURI
- http://www.w3.org/2001/XMLSchema#hexBinary
- http://www.w3.org/2001/XMLSchema#base64Binary
- http://www.w3.org/2001/XMLSchema#dayTimeDuration
- http://www.w3.org/2001/XMLSchema#yearMonthDuration
- урна: оазис: имена: tc: xacml: 1.0: тип данных: x500Name
- урна: оазис: имена: tc: xacml: 1.0: тип данных: rfc822Name
- урна: оазис: имена: tc: xacml: 2.0: тип данных: ipAddress
- урна: оазис: имена: tc: xacml: 2.0: тип данных: dnsName
- урна: оазис: имена: tc: xacml: 3.0: тип данных: xpathExpression
Пример: Политика ALFA с использованием anyURI
В этой политике мы преобразуем значение String в anyURI.
атрибут userBlacklistedResources{ категория = subjectCat я бы = "userBlacklistedResources" тип = нить }
правило allowProfileAccess{целевое предложение url == "http: // : / profile /": anyURI разрешать }
Образцы политик
Простая политика и правило с условием
Следующий пример ALFA представляет политику XACML, которая содержит одно правило. У политики и правила есть цель. В правиле также есть условие, которое используется для сравнения двух атрибутов вместе для проверки взаимосвязи (идентификатор пользователя должен быть равен владельцу). Когда нужно проверить 2 атрибута вместе, они должны использовать условие.
пример пространства имен {policy article {target clause itemType == "article" применить firstApplicable rule editArticle {target clause actionId == "edit" и userRole == "editor" условие разрешения userId == owner}}}
Использование времени в политике XACML, написанной на ALFA
namespace exampleTime {policy checkTimeAccess {применить firstApplicable rule checkNightAccess {target clause role == "supervisor" и document == "medicalrecord" condition timeInRange (timeOneAndOnly (currentTime), "22:00:00": time, "06:00:00 ": время) разрешение}}}
Ссылки на политику в ALFA
ALFA может использовать ссылки на политику (набор). Фактически они используются неявно при выполнении следующих действий.
namespace com.axiomatics {namespace example {/ ** * Политика о том, что могут делать менеджеры. Он связан с из набора политик * документов. * / policy manager {target clause role == "manager" apply firstApplicable rule allowSameDepartment {condition user.department == document.department permission}}} / ** * Основная политика. Он ссылается на политику менеджеров * / policyset documents {target clause resourceType == "document" apply firstApplicable // Ниже приведен пример справки по политике.
Обязательства и консультации в ALFA
Обязательства и рекомендации - это утверждения в XACML, которые могут быть возвращены из PDP в PEP вместе с решением (Permit, Deny ...). Обязательства и рекомендации инициируются как при выдаче разрешения, так и при отказе.
namespace example {import Attributes. * advice notify = "example.notify" policy readDocuments {target clause actionId == "read" и objectType == "document" apply firstApplicable / ** * Это правило запрещает доступ, если время не находится между 9 и 5 * / rule denyOutsideHours {target clause currentTime <"09:00:00": time или currentTime> "17:00:00": время отклонить при отклонении {advice notify {acme.obligations.message = "Вы не можете получить доступ к этому обслуживание в нерабочее время "}}} / ** * Это правило предоставляет менеджерам доступ * / rule allowManagers {target clause acme.user.role ==" manager "permission} / ** * Это правило перехватывает все остальное, что могло упасть этот момент * / rule failsafeDeny {deny on deny {advice notify {acme.ob ligations.message = "Ваш запрос не соответствует политике. Пожалуйста, попробуйте еще раз" } } } } }
Сценарий авторизации Break the Glass
Начнем с определения атрибутов и обязательств, которые мы будем использовать.
пространство имен com.axiomatics.examples {атрибуты импорта. * обязательство breakTheGlass = "com.axiomatics.examples.breakTheGlass" обязательство auditLog = "com.axiomatics.examples.auditLog" пользователь пространства имен {attribute role {category = subjectCat id = "com.axiomatics .examples.user.role "type = string} идентификатор атрибута {category = subjectCat id =" com.axiomatics.examples.user.identifier "type = string}} пространство имен пациент {attribute assignDoctor {category = resourceCat id =" com.axiomatics .examples.user.assignedDoctor "type = string}} запись пространства имен {идентификатор атрибута {category = resourceCat id =" com.axiomatics.examples.record.identifier "type = string}} атрибут actionId {category = actionCat id =" com. axiomatics.examples.actionId "type = string} attribute objectType {category = resourceCat id =" com.axiomatics.examples.objectType "type = string} attribute isEmergency {category = environmentCat id =" com.axiomatics.examples.isEmergency " type = boolean} attribute message {category = environmentCat id = "com.axiomatics.examples.message" type = string}
Теперь мы можем определить политику с помощью 3 правил:
- первое правило - для нормального доступа (врачи могут просматривать записи пациентов, которым они назначены.
- второе правило - особый доступ, потому что стекло разбито.
- третье правило - это правило, которое запускает обязательство сообщать пользователю, как разбить стекло.
/ ** * Контроль доступа к медицинским записям * / policy accessMedicalRecord {target clause actionId == "view" и objectType == "medical record" apply firstApplicable / ** * Врачи могут просматривать медицинские записи пациентов, которым они назначены * / rule allowRegularAccess {целевое предложение user.role == "doctor" condition Patient.assignedDoctor == user.identifier permission} / ** * Доктора могут просматривать любую медицинскую причину в случае чрезвычайной ситуации * / rule allowBreakTheGlassAccess {целевое предложение isEmergency == true разрешение при разрешении {обязательство auditLog {message = "Врач получил доступ к медицинской карте, разбив стакан" user.identifier = user.identifier record.identifier = record.identifier currentDateTime = currentDateTime}}} / ** * Запретить другое доступы. Если в доступе обычно отказывают, сообщите врачам, как * они могут получить доступ, «разбив стекло». * / rule denyAccess {deny on deny {обязательство breakTheGlass {message = "У вас нет доступа к этой медицинской карте. Чтобы получить доступ, установите для флага isEmergency значение true». record.identifier = record.identifier currentDateTime = currentDateTime}}}}}
Детализированная политика авторизации на основе времени
Ниже приводится пример политики ABAC, реализованной с использованием ALFA. Он использует время как атрибуты. Он использует условие XACML для сравнения атрибута currentTime со значением, представляющим 17:00 (выраженное в 24-часовом формате). Обратите внимание на использование: time для преобразования значения String в правильный тип данных.
правило allowAfter5pm{ разрешатьусловие currentTime> "17:00:00": время}
Политики HL7
Сценарии использования
HL7 определяет серию контроля медицинского доступа сценарии использования который легко определяется в ALFA.
Примеры политик ALFA для HL7
Контроль доступа в зависимости от категории действия
/ * * Контроль доступа в зависимости от категории действия * URL: https://web.archive.org/web/20160304081703/http://wiki.hl7.org/index.php?title=Security_and_Privacy_Ontology_Use_Cases#Access_Control_Based_on_Category_of_Action#Access_Control_Based_of_Action * Доступ к заметкам о ходе выполнения * / policy progressNotes {target clause objectType == "progress note" apply firstApplicable / * * Основной врач может создать заметку о ходе выполнения пациента * / rule createNote {target clause role == "doctor" and action == "create" condition primaryPhysician == requestorId permission} / * * Врач может обновить заметку о прогрессе пациента, которую он написал самостоятельно * / rule updateNote {target clause role == "doctor" and action == "update" condition author == requestorId allow} / * * Правило безопасности для явного отказа в доступе, если не было найдено одно из правил соответствия выше * / rule securityHarness {deny}}
Плагин ALFA для Eclipse
Плагин ALFA для Eclipse - это инструмент, который преобразует вашу среду разработки программирования Eclipse в специальный редактор политик авторизации с использованием синтаксиса ALFA. Политики ALFA могут быть легко преобразованы в настоящие XACML 3.0 и загружены в ваш инструмент управления политиками XACML.[5]
Рекомендации
- ^ Гебель, Джерри (16 июля 2012 г.). «Axiomatics выпускает бесплатный плагин для Eclipse IDE для создания политик XACML3.0». Аксиоматика. Получено 31 мая 2017.
- ^ "'alfa 'tag wiki ".
- ^ «Упрощение XACML - плагин Axiomatics ALFA для Eclipse IDE». КуппингерКоул. Получено 2017-02-10.
- ^ https://www.linkedin.com/grp/post/3934718-5851696088934801412
- ^ «Как я могу использовать ссылки на политику в ALFA?». 2016-10-10.
Внешние ссылки
Европейские аналитики говорят об ALFA
Интерфейс создания политик на основе шаблонов для веб-служб RESTful