【问题标题】:change ACL policy to XACML将 ACL 策略更改为 XACML
【发布时间】:2026-01-20 00:30:01
【问题描述】:

我正在尝试在 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>

这被认为是正确的吗?

【问题讨论】:

  • 有机会我会测试一下这个政策。看起来不错。你用什么工具来生成它?你用什么引擎来运行它?
  • 我正在使用 Xengine 来测试和生成这个策略。
  • 我会使用 AuthZForce(开源)或 Axiomatics(商业),因为它们在实现方面更完整。
  • 您可以使用 ALFA 来编写策略 BTW
  • 更重要的是,AuthZForce 或 Axiomatics 使用 XACML 3.0 而不是您发送给我的 2.0。

标签: mapreduce acl access-control xacml abac


【解决方案1】:

您的保单上有几个 cmets:

  • 它使用 XACML 2.0。那是旧的!切换到 XACML 3.0
  • &lt;AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"&gt;user &lt;/AttributeValue&gt; 中有一个空格。摆脱它(除非您真的想在“用户”上进行测试。
  • 您的策略包含两条规则:
    • 如果urn:oasis:names:tc:xacml:1.0:action:action-id == mapreduce.job.acl-view-job,则第一个授予访问权限
    • 第二个总是拒绝访问。我假设目的是在没有匹配的操作时拒绝访问。没关系。我经常称其为“包罗万象”或安全带。还有另一种方法可以通过在策略上使用一种称为拒绝-除非-许可的组合算法来实现这一点。如果没有任何规则适用,则该策略将产生拒绝。这仅存在于 XACML 3.0 中
  • 您的策略使用称为 permit-overrides (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"; action= “工作”)。这样您就可以更轻松地制定有关查看、编辑、删除作业的政策。

【讨论】:

  • 谢谢您,先生,我会考虑您的意见,并使用 XACML 3 更改为更完整的实现。您能否详细说明您的最后一个提示,它真的很有帮助。
  • 是的!使用有意义的、通俗易懂的英文值,而不是值的串联。