Как представить явный контроль доступа в XACML 3.0 - PullRequest
1 голос
/ 07 ноября 2019

Мы используем маркировку данных ресурса XACML, чтобы обеспечить контроль доступа к данным. Существуют ограничения на то, что можно / нужно помещать в метки данных, которые используют базовую логику для каждого типа атрибута (anyinall или allinall).

Необходимо предусмотреть дополнительные ограничения помимо маркировки данных, которые могут включать явные списки субъектов, которые имеют доступ . В этом случае мы хотим расширить ограничения в метках данных с помощью явного списка субъектов (И разрешения на маркировку данных для тех в списке).

Как бы мы записали это в политике XACML где (а) мы не только идентифицируем субъект, но и (б) можем выполнить дополнительные сравнения от resource.attributes до subject.attribute.

Мы использовали права для представления членства в «списке», который требует интенсивного управления правами. Право также имеет ограниченную сложную логику (например, комбинацию AND и OR) атрибутов ресурсов для атрибутов идентификатора субъекта.

При маркировке данных используются правила, которые включают в себя anyinall или allinall для пакетов атрибутов (т. Е. ресурс). классификация: "частный" allinall subject.classification: "частный" )

Я ожидаю, что разрешение будет включать:

  1. все метки данных разрешенына основе subject.attributes
  2. subjectID включен в «список»
  3. subjectID соответствует сложным логическим сравнениям правил AND и OR для resource.attributes к subjectID.attributes

Каждый раздел разрешает или запрещает, а любое запрещение нарушает общую политику

1 Ответ

0 голосов
/ 10 ноября 2019

Вы можете легко сделать это в XACML (и ALFA - более легкий синтаксис XACML). Прежде всего, вы заявили, что:

Каждый раздел будет разрешать или запрещать

. Для этого вы будете использовать Политику для каждого раздела, который использует deny-unless-permitобъединяющий алгоритм. Это означает, что либо политика предоставит доступ, если будут выполнены условия, либо запретит доступ. Возможно, вы помните, что по умолчанию, если условия не выполняются, обычное решение - NotApplicable. Использование deny-unless-permit предотвратит это.

, и любое отклонение приведет к сбою общей политики

После того как вы написали каждую политику с использованием deny-unless-permit, вы объедините их всев родительский набор политик, который будет использовать алгоритм объединения deny-overrides. Это означает, что, если есть какое-либо решение об отказе, то это решение превзойдет все другие решения.

Это дает нам следующую структуру:

ALFA

namespace com.axiomatics{
    /**
     * Resource data labeling to provide access control to data
     */
    policyset dataAccess{
        apply denyOverrides
        /**
         * First check
         */
        policy firstCheck{
            apply denyUnlessPermit
            /**
             * Allow if clearance is sufficient
             */
            rule clearanceCheck{
                permit
                condition com.acme.user.clearance > com.acme.record.classification
            }
            rule otherCheck{
                // Fill in your checks here
                permit
            }
        }
        /**
         * Second check...
         */
        policy secondCheck{
            apply denyUnlessPermit
        }
    }
}

Эквивалент вXACML

<?xml version="1.0" encoding="UTF-8"?><!--This file was generated by the 
    ALFA Plugin for Eclipse from Axiomatics AB (http://www.axiomatics.com). --><!--Any modification to this file will 
    be lost upon recompilation of the source ALFA file -->
<xacml3:PolicySet
    PolicyCombiningAlgId="urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-overrides"
    PolicySetId="http://axiomatics.com/alfa/identifier/com.axiomatics.dataAccess"
    Version="1.0"
    xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
    <xacml3:Description>Resource data labeling to provide access control to
        data</xacml3:Description>
    <xacml3:PolicySetDefaults>
        <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116
        </xacml3:XPathVersion>
    </xacml3:PolicySetDefaults>
    <xacml3:Target />
    <xacml3:Policy
        PolicyId="http://axiomatics.com/alfa/identifier/com.axiomatics.dataAccess.firstCheck"
        RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit"
        Version="1.0">
        <xacml3:Description>First check</xacml3:Description>
        <xacml3:PolicyDefaults>
            <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116
            </xacml3:XPathVersion>
        </xacml3:PolicyDefaults>
        <xacml3:Target />
        <xacml3:Rule Effect="Permit"
            RuleId="com.axiomatics.dataAccess.firstCheck.clearanceCheck">
            <xacml3:Description>Allow if clearance is sufficient
            </xacml3:Description>
            <xacml3:Target />
            <xacml3:Condition>
                <xacml3:Apply
                    FunctionId="urn:oasis:names:tc:xacml:3.0:function:any-of-any">
                    <xacml3:Function
                        FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-greater-than" />
                    <xacml3:AttributeDesignator
                        AttributeId="com.acme.user.clearance"
                        Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
                        DataType="http://www.w3.org/2001/XMLSchema#integer"
                        MustBePresent="false" />
                    <xacml3:AttributeDesignator
                        AttributeId="com.acme.record.classification"
                        Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
                        DataType="http://www.w3.org/2001/XMLSchema#integer"
                        MustBePresent="false" />
                </xacml3:Apply>
            </xacml3:Condition>
        </xacml3:Rule>
        <xacml3:Rule Effect="Permit"
            RuleId="com.axiomatics.dataAccess.firstCheck.otherCheck">
            <xacml3:Description />
            <xacml3:Target />
        </xacml3:Rule>
    </xacml3:Policy>
    <xacml3:Policy
        PolicyId="http://axiomatics.com/alfa/identifier/com.axiomatics.dataAccess.secondCheck"
        RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit"
        Version="1.0">
        <xacml3:Description>Second check...</xacml3:Description>
        <xacml3:PolicyDefaults>
            <xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116
            </xacml3:XPathVersion>
        </xacml3:PolicyDefaults>
        <xacml3:Target />
    </xacml3:Policy>
</xacml3:PolicySet>

Другие проверки

В дополнение к вашей структуре политики, вы упоминаете, что вы хотели бы контролировать доступ на основе атрибутов (например, пользователь может просматривать свой документ), а также на основепри явном контроле доступа (пользователь может просматривать документ, если он находится в списке для этого документа). Вы можете полностью реализовать контроль доступа по усмотрению (DAC) в XACML в дополнение к доступу на основе атрибутов. Вот пример:

/**
 * Second check...
 */
policy secondCheck{
    target clause com.acme.action.actionId == "view" and com.acme.object.objectType == "document"
    apply denyUnlessPermit
    /**
     * Users can view documents they own
     */
     rule owner{
         permit
         condition com.acme.record.owner==user.userId
     }
     /**
      * Users in the whitelist can view the document
      */
     rule dac{
         permit
         condition stringAtLeastOneMemberOf(user.userId, com.acme.record.whitelist)
     }
}
...