АЛЬФА (XACML) - ALFA (XACML)

АЛЬФА
ПарадигмаДекларативное программирование
РазработаноПабло Джамбиаги
РазработчикАксиоматика
Впервые появился16 июля 2012 г.; 8 лет назад (2012-07-16)[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}}}

Значения атрибутов, требующие явного преобразования

Следующие типы данных атрибутов требуют явного преобразования:

Пример: Политика 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

Контроль доступа в зависимости от категории действия

Плагин ALFA для Eclipse

Плагин ALFA для Eclipse - это инструмент, который преобразует вашу среду разработки программирования Eclipse в специальный редактор политик авторизации с использованием синтаксиса ALFA. Политики ALFA могут быть легко преобразованы в настоящие XACML 3.0 и загружены в ваш инструмент управления политиками XACML.[5]

Рекомендации

  1. ^ Гебель, Джерри (16 июля 2012 г.). «Axiomatics выпускает бесплатный плагин для Eclipse IDE для создания политик XACML3.0». Аксиоматика. Получено 31 мая 2017.
  2. ^ "'alfa 'tag wiki ".
  3. ^ «Упрощение XACML - плагин Axiomatics ALFA для Eclipse IDE». КуппингерКоул. Получено 2017-02-10.
  4. ^ https://www.linkedin.com/grp/post/3934718-5851696088934801412
  5. ^ «Как я могу использовать ссылки на политику в ALFA?». 2016-10-10.

Внешние ссылки

Европейские аналитики говорят об ALFA

Интерфейс создания политик на основе шаблонов для веб-служб RESTful