将 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")。这样您就可以更轻松地查看、编辑和删除作业。
我正在尝试测试 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")。这样您就可以更轻松地查看、编辑和删除作业。