Существует ли стандартный или предпочтительный способ использования обязательств и рекомендаций в XACML и ALFA?

Я написал некоторые обязательства и советы, но мне было интересно, есть ли общепринятый/или формальный способ сделать это правильно? Другими словами: существует ли стандартный или предпочтительный способ использования обязательств и рекомендаций в ALFA?

Мне бы очень хотелось увидеть пример того, как определить обязательство (например, регистрировать каждый запрос) и его содержимое в многоуровневой политике, которая всегда будет запускаться (при каждом запросе) как при отказе, так и при разрешении? Или вам нужно определить отдельное обязательство для каждого набора политик/политики и правила?

Нужно ли вам определять точное содержание такого обязательства или это зависит от функциональности PEP?


person Morei    schedule 12.12.2014    source источник


Ответы (1)


Это большой вопрос.

Хотя спецификация (все версии) определяет структуру обязательства и даже рекомендации в случае XACML 3.0, в спецификации не упоминается, как PEP (пункт применения политики) должен реализовать обязательство. Все, что упоминается в спецификации, — это то, что должно произойти, если PEP не сможет выполнить обязательство, то есть что произойдет с решением.

С точки зрения кода PEP наилучшей практикой было бы написать интерфейс ObligationHandler, который можно реализовать для различных обязательств. Конструктор классов, реализующих интерфейс ObligationHandler, будет принимать запрос и ответ XACML.

Пример

obligation emailManager = "com.axiomatics.example.obligations.emailmanager"
policy documentAccess{
    apply firstApplicable
    rule allowAccessIfClearanceSufficient{
        condition user.clearance>document.classification
        permit
        on permit {
            obligation emailManager{
                email = email
                message = stringConcatenate("Employee ", 
                                            stringOneAndOnly(Attributes.subjectId),
                                            " has obtained access to ", 
                                            stringOneAndOnly(Attributes.resourceId)
                )
            }
        }
    }
}

Другие ресурсы:

person David Brossard    schedule 15.12.2014
comment
Большое спасибо, Дэвид. Мне все еще интересно, возможно ли в ALFA определить обязательство, которое всегда будет срабатывать при каждом запросе (будь то DENY или PERMIT), например, когда вы хотите принудительно регистрировать каждый запрос. Можете вы помочь мне? Я бы очень хотел увидеть пример в ALFA, как это сделать. - person Morei; 16.12.2014
comment
Добавлю образец. Вы должны определить обязательство дважды: один раз при разрешении и один раз при отказе - person David Brossard; 16.12.2014
comment
@Morei, теперь я добавил пример. - person David Brossard; 16.12.2014
comment
Еще раз спасибо @david-brossard. Если я правильно понимаю, вы всегда должны определять обязательство в операторе on permit или on deny, который идет сразу после ключевого слова permit или deny. Для политики было бы очень уместно иметь обязательство, которое всегда будет срабатывать. Например, имея своего рода ветвь else или other, которая идет с on deny и on permit. Но я думаю, это потому, что XACML его тоже не поддерживает? - person Morei; 17.12.2014
comment
Это правильно. XACML заставляет вас определить, когда сработает обязательство. - person David Brossard; 17.12.2014