XACML
XACML (англ. eXtensible Access Control Markup Language — расширяемый язык разметки контроля доступа) — стандарт, разработанный OASIS, определяющий модель и язык описания политик управления доступом, основанный на языке XML, и способы их обработки. Одной из целей XACML является продвижение общей терминологии и функциональной совместимости между реализациями управления доступом нескольких разработчиков. XACML - это стандарт разграничения доступа на основе атрибутов (ABAC), где атрибуты, связанные с пользователем, действием или ресурсом, являются входными данными для принятия решения о том, может ли данный пользователь получить доступ к данному ресурсу определенным образом. Управление доступом на основе ролей (RBAC) также может быть реализовано в XACML как специализация ABAC. ИсторияВерсия 1.0 была утверждена организацией стандартов OASIS в 2003 году. Версия 2.0 была утверждена организацией стандартов OASIS 1 февраля 2005 года. Первая спецификация XACML 3.0 была выпущена 10 августа 2010 года[1]. Последняя версия, XACML 3.0, была стандартизирована в январе 2013 года[2]. Модель языкаОсновными компонентами языковой модели являются правило, политика и набор политик. ПравилоПравило является простейшей единицей модели. Правило должно быть включено в политику, самостоятельной единицей оно не является. Основные компоненты правила:
Цель Цель определяет запросы, к которым данное правило применимо, в форме логических выражений над атрибутами запроса. Запрос содержит в себе атрибуты субъекта, запрашивающего доступ, атрибуты ресурса, доступ к которому запрашиваются, и атрибуты действия, которое пользователь хочет совершить. Также запрос может содержать и другие атрибуты, например, атрибуты окружения. Если цель в правиле отсутствует, она наследуется от родительского элемента (политики). Условие Условия представляют собой расширенную форму цели, которые могут использовать более широкий диапазон функций и, что более важно, могут использоваться для сравнения двух или более атрибутов вместе, например, subject-id == doctor-id (идентификатор объекта равен идентификатору врача). Эффект Эффект может принимать два значения: "разрешить" или "запретить". Эффект правила срабатывает в случае положительного вычисления правила (если цель и условие принимают значение "истина"). Обязательство Обязательство описывает то, что должно быть выполнено до или после подтверждения доступа. Если описанные действия выполнить невозможно, утвержденный доступ не может и не должен быть реализован. Пример: Allow access to resource MedicalJournal with attribute patientID=x
if Subject match DesignatedDoctorOfPatient
and action is read
with obligation
on Permit: doLog_Inform(patientID, Subject, time)
on Deny : doLog_UnauthorizedLogin(patientID, Subject, time)
Рекомендация Выполняет те же функции, что и обязательство, но, в отличие от него, может быть проигнорировано. ПолитикаИспользуется для объединения правил. Основные компоненты политики:
Алгоритм объединения правил Используется для разрешения конфликтов. Например, если одно из правил принимает значение "истина", а другое "ложь", алгоритм объединения правил определяет, какое значение примет сама политика. Набор политикНабор политик нужен для объединения группы политик с целью их более быстрой фильтрации на основе общего назначения, задаваемого в цели группы политик. Основные компоненты:
Модель авторизацииОсновные компоненты модели
Компоненты модели взаимодействуют между собой посредством запросов и ответов в формате XACML. Запрос содержит в себе атрибуты. Ответ содержит результат вычисления политик (имеет 4 значения: "разрешить", "запретить", "не применимо", "не определено"). Кроме того, ответ может содержать в себе обязательства, которые необходимо выполнить в случае разрешения или запрета доступа. ![]() Процесс авторизации[3]
Примеры политикАвторизация с учетом даты и времени в XACMLЭто правило запрещает доступ пользователям, которые не входили в систему в течение 30 дней. В псевдокоде: Запретить, если время_сейчас > время_прошлого_доступа + 30 дней. <xacml3:Rule RuleId="f6637b3f-3690-4cce-989c-2ce9c053d6fa" Effect="Deny">
<xacml3:Description>Use it or lose it: this policy denies access if lastLogin is more than 30 days away from today's date</xacml3:Description>
<xacml3:Target/>
<xacml3:Condition >
<xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:any-of">
<xacml3:Function FunctionId="urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than"/>
<xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:3.0:function:dateTime-add-dayTimeDuration">
<xacml3:Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:dateTime-one-and-only">
<xacml3:AttributeDesignator Category="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="false"/>
</xacml3:Apply>
<xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#dayTimeDuration">P30D</xacml3:AttributeValue>
</xacml3:Apply>
<xacml3:AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-dateTime" DataType="http://www.w3.org/2001/XMLSchema#dateTime" MustBePresent="false"/>
</xacml3:Apply>
</xacml3:Condition>
</xacml3:Rule>
Авторизация с учетом времени в XACMLЭто правило предоставляет субъекту доступ к ресурсу, если текущее время с 9:00 до 17:00. <xacml3:Rule RuleId="c01d7519-be21-4985-88d8-10941f44590a" Effect="Permit">
<xacml3:Description>Allow if time between 9 and 5</xacml3:Description>
<xacml3:Target>
<xacml3:AnyOf>
<xacml3:AllOf>
<xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:time-greater-than">
<xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#time">09:00:00</xacml3:AttributeValue>
<xacml3:AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-time" MustBePresent="false" DataType="http://www.w3.org/2001/XMLSchema#time"/>
</xacml3:Match>
</xacml3:AllOf>
</xacml3:AnyOf>
<xacml3:AnyOf>
<xacml3:AllOf>
<xacml3:Match MatchId="urn:oasis:names:tc:xacml:1.0:function:time-less-than">
<xacml3:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#time">17:00:00</xacml3:AttributeValue>
<xacml3:AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment" AttributeId="urn:oasis:names:tc:xacml:1.0:environment:current-time" MustBePresent="false" DataType="http://www.w3.org/2001/XMLSchema#time"/>
</xacml3:Match>
</xacml3:AllOf>
</xacml3:AnyOf>
</xacml3:Target>
</xacml3:Rule>
Примеры XACML запросов и ответовЗапрос XACMLЗапрос: Алиса хочет просмотреть документ №123. <xacml-ctx:Request ReturnPolicyIdList="true" CombinedDecision="false" xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" >
<xacml-ctx:Attribute AttributeId="actionId" IncludeInResult="true">
<xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">view</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" >
<xacml-ctx:Attribute AttributeId="resource-id" IncludeInResult="true">
<xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">doc#123</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
<xacml-ctx:Attributes Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" >
<xacml-ctx:Attribute AttributeId="user.identifier" IncludeInResult="true">
<xacml-ctx:AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Alice</xacml-ctx:AttributeValue>
</xacml-ctx:Attribute>
</xacml-ctx:Attributes>
</xacml-ctx:Request>
Первый элемент Ответ XACMLПример ответа XACMLОтвет: Не применимо <xacml-ctx:Response xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Result>
<xacml-ctx:Decision>NotApplicable</xacml-ctx:Decision>
<xacml-ctx:Status>
<xacml-ctx:StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok"/>
</xacml-ctx:Status>
</xacml-ctx:Result>
</xacml-ctx:Response>
Элемент Пример ответа XACML с обязательствомОтвет: Разрешить, выполнить обязательство с индексом "logAccess" (доступ к журналу) <xacml-ctx:Response xmlns:xacml-ctx="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml-ctx:Result>
<xacml-ctx:Decision>Permit</xacml-ctx:Decision>
<xacml-ctx:Status>
<xacml-ctx:StatusCode Value="urn:oasis:names:tc:xacml:1.0:status:ok"/>
</xacml-ctx:Status>
<xacml-ctx:Obligations>
<xacml-ctx:Obligation ObligationId="logAccess">
</xacml-ctx:Obligation>
</xacml-ctx:Obligations>
<xacml-ctx:PolicyIdentifierList>
<xacml-ctx:PolicyIdReference Version="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
Литература
Ссылки
Внешние ссылки |
Portal di Ensiklopedia Dunia