将 ACL 策略更改为 XACML

change ACL policy to XACML

我正在尝试测试 MapReduce 中的安全方法,我想知道我的方法是否有意义。 我想将 MapReduce 中存在的访问控制列表策略转换为 XACML 策略,以便我获取定义 ACL 的文件并复制每个属性的名称和值,然后将其放入遵循 XACML 格式的策略中。

这是 ACL 定义

<property>
  <name>mapreduce.job.acl-modify-job</name>
  <value>user </value>
</property>
<property>
  <name>mapreduce.job.acl-view-job</name>
  <value>user </value>
</property>

这是 XACML 中的策略

   <Policy PolicyId="GeneratedPolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:ordered-permit-overrides">
  <Target>
    <Subjects>
      <Subject>
        <SubjectMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
          <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">user </AttributeValue>
          <SubjectAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id" DataType="http://www.w3.org/2001/XMLSchema#string"/>
        </SubjectMatch>
      </Subject>
    </Subjects>
    <Resources>
       </AnyResource>
    </Resources>
  </Target>
  <Rule RuleId="rule1" Effect="Permit">
    <Target>
      <Actions>
        <Action>
          <ActionMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
            <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">mapreduce.job.acl-view-job</AttributeValue>
            <ActionAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string"/>
          </ActionMatch>
        </Action>
      </Actions>
    </Target>
  </Rule>
  <Rule RuleId="rule2" Effect="Deny"/>
</Policy>

这是否正确?

对您的政策的几点评论:

  • 它使用 XACML 2.0。那是旧的!切换到 XACML 3.0
  • 您的值 <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">user </AttributeValue> 中有空格。摆脱它(除非你真的想在 'user '.
  • 上测试
  • 您的政策包含两条规则:
    • 如果 urn:oasis:names:tc:xacml:1.0:action:action-id == mapreduce.job.acl-view-job
    • ,第一个授予访问权限
    • 第二个总是拒绝访问。我假设其目的是在没有匹配的操作时拒绝访问。没关系。我经常称其为 "catch-all" 或安全带。还有另一种方法可以实现这一点,即在名为 deny-unless-permit 的策略上使用组合算法。如果 none 条规则适用,则该策略将产生拒绝。这仅存在于 XACML 3.0
  • 您的策略使用了一种称为许可覆盖 (urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:ordered-permit-overrides) 的组合算法。通常我避免使用它,因为它意味着在拒绝和允许的情况下,允许获胜。这对我来说太宽容了。请改用最先适用的 (urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:first-applicable)。您可以阅读组合算法 here.
  • 最终,为了使您的策略规模化,您可能希望将用户列表外部化,而不是为策略中的每个用户设置一个值。因此,与其将您的用户名与 Alice、Bob 或 Carol 进行比较,不如将其与您在数据库中维护的名为 allowedUsers 的属性进行比较。
  • 另一个提示:如果将值 mapreduce.job.acl-view-job 拆分为不同的部分 (appName="mapreduce"; objectType="job";动作="job")。这样您就可以更轻松地查看、编辑和删除作业。