2

我正在尝试编写将利用自定义属性的 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>

(我们使用 Fedora 的 XACML 实现)。

我确定我在这里遗漏了一些非常简单和基本的东西,但无法弄清楚是什么。有人可以指出我正确的方向吗?

4

3 回答 3

5

自定义属性是什么意思?你想用“简单的古英语”表达什么?

在 XACML 中,您可以使用任何您喜欢的属性,例如角色、公民身份、许可、资源分类、一天中的时间……当然,该属性的可用性取决于您要保护的应用程序的类型。你是如何使用 Fedora 实现的?是用于 Fedora Linux 操作系统中的访问控制吗?

如果要将属性与值进行比较,例如公民身份 == 加拿大,则使用<Target/>. 如果您想比较 2 个属性,例如间隙 > 分类,请使用<Condition>.

于 2012-10-06T01:57:10.447 回答
1

我不确定你真正在寻找什么,但我想你需要做一些基于属性的访问控制。

在 XACML 中有一个称为 PIP(策略信息点)的组件,您可以在其中从外部来源检索属性并检查授权。

这可能会对您有所帮助:了解 PIP(策略信息点)

如果您需要以更简单的方式创建 XACML 策略,您可以按照以下步骤操作:WSO2 Identity Server 中的 XACML 策略编辑器

于 2012-10-05T05:30:49.980 回答
0

我不得不承认我对 XACML 和 Fedora 的实现有点陌生,但我的理解是你应该能够查询在检查用户对象时出现的任何值。默认 Fedora Commons 安装上的 URL 应该是“localhost:8080/fedora/user”,并在登录之前创建的名为“Joe User”的 LDAP 用户后在我的服务器上生成以下对象:

<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 模块的情况)或什至环境变量将值注入到用户对象中,您应该能够查询它。在下面的示例策略中,如果用户的 OU 设置为“DPT”,我将 Fedora 设置为授予 fedoraAdmin 访问 API-M 调用的权限:

<?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 相当陌生,并不完全理解它。此规则适用于我的本地主机测试服务器,基于其他规则。你的旅费可能会改变。

此外,如示例策略文件中所述,确保您正在测试的客户端既可以被允许,又可以在稍后拒绝 API-M 访问,然后再设置这样的规则,因为在 Fedora 中调试 XACML 策略似乎非常即使在调试模式下也很难将少量数据写入日志文件(您会看到操作通过或失败,但永远不会看到导致通过/失败结果发生的规则名称)。

于 2013-05-06T14:30:35.190 回答