Как написать политику XACML, используя пользовательские атрибуты

Я пытаюсь написать политику XACML, которая будет использовать пользовательский атрибут. Я думаю о чем-то вроде:

<?xml version="1.0" encoding="UTF-8"?>
<Policy xmlns="urn:oasis:names:tc:xacml:1.0:policy"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" PolicyId="deny-demo100"
  RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable">
  <Description> </Description>
  <Target>
    <Subjects>
      <AnySubject/>
    </Subjects>
    <Resources>
  <AnyResource/>
</Resources>
<Actions>
  <AnyAction/>
</Actions>
  </Target>

  <Rule Effect="Deny" RuleId="rule-deny-demo100">
    <Target>
      <Subjects>
        <AnySubject/>
      </Subjects>
      <Resources>
        <Resource>
           <AnyResource/>
        </Resource>
      </Resources>
      <Actions>
        <Action>
          <ActionMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">customAttribute</AttributeValue>
            <ActionAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-    id" MustBePresent="false" DataType="http://www.w3.org/2001/XMLSchema#string"/>
          </ActionMatch>
        </Action>
      </Actions>
    </Target>    
  </Rule>

  <Rule RuleId="deny-demo100-catch-all" Effect="Permit" />

</Policy>

(Мы используем реализацию XACML в Fedora).

Я уверен, что упускаю что-то действительно простое и фундаментальное, но не могу понять, что. Может ли кто-нибудь указать мне правильное направление, пожалуйста?

3 ответа

Что вы подразумеваете под пользовательским атрибутом? Что вы хотите выразить "простым старым английским"?

В XACML вы можете использовать любой понравившийся вам атрибут, такой как роль, гражданство, разрешение, классификация ресурсов, время суток... Конечно, доступность атрибута зависит от типа приложения, которое вы защищаете. Как вы используете реализацию Fedora? Это для контроля доступа в ОС Fedora Linux?

Если вы хотите сравнить атрибут со значением, например, гражданство == канадский, то используйте <Target/>, Если вы хотите сравнить 2 атрибута вместе, например, оформление> классификация, используйте <Condition>,

Я не уверен, что вы на самом деле ищете, но я думаю, что вам нужно сделать некоторые атрибуты контроля доступа.

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

Это может помочь вам: Понимание PIP (Информационный пункт о политике).

Если вам нужно создать политики XACML более простым способом, вы можете выполнить следующие действия: Редактор политики XACML в WSO2 Identity Server.

Я должен признать, что я в некотором роде новичок в XACML и его реализации в Fedora, но, насколько я понимаю, вы должны иметь возможность запрашивать любое значение, которое появляется при проверке объекта пользователя. URL-адрес при установке Fedora Commons по умолчанию должен быть "localhost:8080/fedora/user", и на моем сервере будет показан следующий объект после входа в систему ранее созданного пользователя LDAP с именем "Joe User":

<user id="Joe User">
  <attribute name="uid">
    <value>userj</value>
  </attribute>
  <attribute name="mail">
    <value>UserJ@ldap.test.user.uconn.edu</value>
  </attribute>
  <attribute name="sn">
    <value>User</value>
  </attribute>
  <attribute name="ou">
    <value>DPT</value>
  </attribute>
  <attribute name="cn">
    <value>Joe User</value>
  </attribute>
  <attribute name="description">
    <value>sample user</value>
  </attribute>
  <attribute name="role"/>
  <attribute name="fedoraRole"/>
  <attribute name="objectClass">
    <value>organizationalPerson</value>
    <value>person</value>
    <value>inetOrgPerson</value>
    <value>top</value>
  </attribute>
  <attribute name="displayName">
    <value>Joe User (LDAP)</value>
  </attribute>
</user>

После того, как значение было введено в объект пользователя через какой-либо модуль аутентификации JAAS (как в приведенном выше случае с использованием модуля LDAP) или даже переменную среды, вы сможете запросить его. В приведенном ниже примере политики я настроил Fedora на предоставление FedoraAdmin аналогичного доступа к вызовам API-M, если для OU пользователя установлено значение "DPT":

<?xml version="1.0" encoding="UTF-8"?>
<Policy xmlns="urn:oasis:names:tc:xacml:1.0:policy"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        PolicyId="permit-apim-to-ldap-ou"
        RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable"
>
  <!-- test policy to approve API-M operations if a specific LDAP OU exists -->
  <!-- make sure access to API-M in premitted from the current client IP address first (check "deny-apim-if-not-in-list.xml" or "deny-apim-if-not-localhost.xml" ) -->
  <Description>note that other policies may provide exceptions to this broad policy. This policy assumes api-m users have to be authenticated</Description>
  <Target>
    <Subjects>
      <Subject> 
        <!-- specific OU - need to get this working with a range of values -->
        <SubjectMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
          <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DPT</AttributeValue>
          <SubjectAttributeDesignator AttributeId="ou" MustBePresent="false" DataType="http://www.w3.org/2001/XMLSchema#string"/>
        </SubjectMatch>
      </Subject>
    </Subjects>
    <Resources>
      <AnyResource/>
    </Resources>    
    <Actions>
        <AnyAction/>
    </Actions>
  </Target>
  <Rule RuleId="1" Effect="Permit"/>
</Policy>

Пользовательские атрибуты могут даже добавляться в файл пользователя Fedora XML (а не в файл пользователя Tomcat) вместо использования LDAP. Вероятно, есть лучший способ сделать это, но, как я уже говорил ранее, я довольно плохо знаком с XACML и не до конца его понимаю. Это правило работает на моем тестовом сервере localhost на основе других действующих правил. Ваш пробег может отличаться.

Кроме того, как указано в примере файла политики, убедитесь, что клиент, с которого вы тестируете, можно разрешить, а затем запретить доступ к API-M, прежде чем применять подобное правило, поскольку отладка политик XACML в Fedora кажется чрезвычайно сложной. трудно с небольшим объемом данных, записываемых в файл журнала даже в режиме отладки (вы увидите, что операция прошла успешно или не удалось, но никогда не будет указано имя правила, вызвавшего результат "пройдено / не выполнено").

Другие вопросы по тегам