2014-12-02 8 views
1

Я хочу написать слоистую политику, при которой первый слой всегда будет проверять окружающую среду, такие как:В XACML и ALFA, как я могу достичь многоуровневого набора политик, которые проверяют атрибуты среды?

  • проверки, что пользователь имеет действительный IP-адрес,
  • проверки времени находится в пределах допустимого периода времени и день недели
  • устройство пользователя является действительным устройством

нижние слои будут заботиться о реальных запрашиваемых действий например add, view, update, delete на определенный набор ресурсов, таких как medical records, insurance data, bank accounts ...

В простом английском языке, правила выглядеть следующим образом

политики, что позволяет, если все правила окружающей среды вернуть разрешение

  • Rule1: разрешить только пользователи с IP-адресом, который находится в диапазоне [мешок с диапазонов IP-адресов]
  • rule2: только позволяют запросы на действия с понедельника по пятницу
  • Правилу3 разрешены только запросы на действия с 7:00 утра до 22:00
  • Rule4: Разрешить только запросы на действия с настольного компьютера или ноутбука

Как это можно сделать, используя ALFA, язык аксиоматики для авторизации?

ответ

1

Это хороший вопрос, и есть несколько хороших способов сделать это. Одним из примеров будут переписать логику и выразить следующее:

  • PolicySet с комбинационным алгоритмом первого применимого
    • отрицает если время является неправильным
    • отрицает, если устройство является недействительным
    • deny, если IP не соответствует допустимому диапазону
    • набор возможных действий и основанная на ресурсах политика с получением Разрешения.

Это то, что он выглядит в ALFA:

namespace com.axiomatics.example{ 
    policyset global{  
     apply firstApplicable 
     policy securityChecks{ 
      apply firstApplicable 
      rule denyOutsideOfficeHours{ 
       deny 
      } 
      rule denyInvalidDevice{ 
       deny 
      } 
      rule denyInvalidIP{ 
       deny 
      } 
     } 

     policyset myBusinessPolicies{ 
      apply firstApplicable 
      /** 
      * Add your business policies here 
      */ 
     } 

    } 
} 

Это только строительные леса.Давайте теперь посмотрим на атрибуты нам нужно:

  • текущее время
  • текущий IP пользователя
  • пользователя Тип устройства

Мы не будем беспокоиться о том, как мы получили эти значения. Это касается пункта обеспечения соблюдения политики или информационной точки политики, чтобы беспокоиться об этом.

Первое правило будет использовать атрибут currentTime. Это атрибут по умолчанию в ALFA и определяется следующим образом:

attribute currentTime { 
    id = "urn:oasis:names:tc:xacml:1.0:environment:current-time" 
    type = time 
    category = environmentCat 
} 

Обновленный правило в настоящее время выглядит следующим образом:

rule denyOutsideOfficeHours{ 
    target clause currentTime<"09:00:00":time or currentTime>"17:00:00":time 
    deny 
} 

В этом примере мы используем статический нижний и верхний пределы (9 утра и 5 вечера соответственно), но они также могут быть атрибутами, и в этом случае нам придется использовать условие, а не цель. Обратите внимание на нотацию ALFA, используемую для преобразования строкового значения в соответствующий тип данных: "17:00:00":time.

Второе правило выглядит следующим образом:

rule denyInvalidDevice{ 
    condition not(stringIsIn(stringOneAndOnly(deviceType), stringBag("laptop","desktop"))) 
    deny 
} 

В этом правиле, мы должны использовать условие, потому что невозможно выразить отрицательное ограничение в мишени. Условие проверяет наличие атрибута deviceType и что оно содержит одно значение, не более и не менее. Это значение не должно быть равно laptop или desktop для того, чтобы отрицать, что нужно выполнить удар. Кстати, сравнение строк в XACML по умолчанию чувствительно к регистру.

Последнее правило аналогично, и мы снова должны использовать условие для отрицания теста. Здесь мы используем функцию XAdML ipAddressRegexpMAtch, чтобы проверить, соответствует ли IP-адрес пользователя (subjectLocalityIpAddress) данному шаблону IP-адреса.

rule denyInvalidIP{ 
    condition not(
     ipAddressRegexpMatch(
      "^(10)\\.(10)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9])\\:([80|443])$", 
      ipAddressOneAndOnly(subjectLocalityIpAddress) 
     ) 
    ) 
    deny 
} 

Обратите внимание, что обратная косая черта должна была сбрасываться с помощью другой обратной косой черты. Это связано с синтаксисом ALFA. Сама политика XACML, после преобразования в XML, не будет содержать двух символов обратной косой черты.

В результате политика все объединены вместе следующее:

namespace com.axiomatics.example{ 
    import Attributes.* 

    attribute deviceType{ 
     category = subjectCat 
     id = "deviceType" 
     type = string 
    } 

    attribute userIP{ 
     category = subjectCat 
     id = "deviceType" 
     type = string 
    } 

    policyset global{  
     apply firstApplicable 
     policy securityChecks{ 
      apply firstApplicable 
      rule denyOutsideOfficeHours{ 
       target clause currentTime<"09:00:00":time or currentTime>"17:00:00":time 
       deny 
      } 
      rule denyInvalidDevice{ 
       condition not(stringIsIn(stringOneAndOnly(deviceType), stringBag("laptop","desktop"))) 
       deny 
      } 
      rule denyInvalidIP{ 
       condition not(
        ipAddressRegexpMatch(
         "^(10)\\.(10)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9])\\:([80|443])$", 
         ipAddressOneAndOnly(subjectLocalityIpAddress) 
        ) 
       ) 
       deny 
      } 
     } 

     policyset myBusinessPolicies{ 
      apply firstApplicable 
      /** 
      * Add your business policies here 
      */ 
     } 

    } 
} 

Я надеюсь, что это помогает. Отправьте нам свои вопросы через Stackoverflow или через наш Developer's Blog.

+0

Есть ли способ использовать ALFA без использования плагина Eclipse? например программно создать ALFA из пользовательского интерфейса, а затем генерировать XACML из ALFA без использования плагина ALFA? –

 Смежные вопросы

  • Нет связанных вопросов^_^