我们使用XACML资源数据标签来提供对数据的访问控制。对于可以/应该放在数据标签中的内容有限制,这些数据标签对每种属性类型(任何或全部)使用基本逻辑。
除了可能包含具有访问权限的主题的明确列表的数据标签之外,还需要提供其他限制。在这种情况下,我们希望使用明确的主题列表来扩展数据标签中的限制(并且数据标签允许使用列表中的对象)。
我们将如何在XACML策略中编写此内容,其中(a)我们不仅可以识别主题,而且(b)可以执行其他resource.attributes
至subject.attribute
比较。
我们已经使用权利来表示“列表”中的成员身份,这是权利管理的重点。权利还具有资源属性到主题ID属性的有限复杂逻辑(例如,AND和OR的组合)。
数据标签使用的规则包括对属性包的全部或全部内容(即resource.classification:“ private” allinall subject.classification:“ private”]]
我希望许可证包括:
每个部分都会允许或拒绝,任何拒绝都会使整体政策失败
您可以在XACML(和ALFA-XACML的更轻量级语法)中轻松地做到这一点。首先,您说:
每个部分都会允许或拒绝
为此,您将为使用deny-unless-permit
组合算法的每个部分使用一个策略。这意味着,如果满足条件,则策略将授予访问权限,否则将拒绝访问。您可能还记得默认情况下,如果不满足条件,通常的决定是NotApplicable
。使用deny-unless-permit
将防止这种情况。
并且任何拒绝都会使整体政策失败
一旦使用deny-unless-permit
编写了每个策略,就将它们全部组合成一个父策略集,该父策略集将使用deny-overrides
组合算法。这意味着,如果有任何拒绝的决定,那么该决定将胜过所有其他决定。
这为我们提供了以下结构:
namespace com.axiomatics{
/**
* Resource data labeling to provide access control to data
*/
policyset dataAccess{
apply denyOverrides
/**
* First check
*/
policy firstCheck{
apply denyUnlessPermit
/**
* Allow if clearance is sufficient
*/
rule clearanceCheck{
permit
condition com.acme.user.clearance > com.acme.record.classification
}
rule otherCheck{
// Fill in your checks here
permit
}
}
/**
* Second check...
*/
policy secondCheck{
apply denyUnlessPermit
}
}
}
<?xml version="1.0" encoding="UTF-8"?><!--This file was generated by the
ALFA Plugin for Eclipse from Axiomatics AB (http://www.axiomatics.com). --><!--Any modification to this file will
be lost upon recompilation of the source ALFA file -->
<xacml3:PolicySet
PolicyCombiningAlgId="urn:oasis:names:tc:xacml:3.0:policy-combining-algorithm:deny-overrides"
PolicySetId="http://axiomatics.com/alfa/identifier/com.axiomatics.dataAccess"
Version="1.0"
xmlns:xacml3="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17">
<xacml3:Description>Resource data labeling to provide access control to
data</xacml3:Description>
<xacml3:PolicySetDefaults>
<xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116
</xacml3:XPathVersion>
</xacml3:PolicySetDefaults>
<xacml3:Target />
<xacml3:Policy
PolicyId="http://axiomatics.com/alfa/identifier/com.axiomatics.dataAccess.firstCheck"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit"
Version="1.0">
<xacml3:Description>First check</xacml3:Description>
<xacml3:PolicyDefaults>
<xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116
</xacml3:XPathVersion>
</xacml3:PolicyDefaults>
<xacml3:Target />
<xacml3:Rule Effect="Permit"
RuleId="com.axiomatics.dataAccess.firstCheck.clearanceCheck">
<xacml3:Description>Allow if clearance is sufficient
</xacml3:Description>
<xacml3:Target />
<xacml3:Condition>
<xacml3:Apply
FunctionId="urn:oasis:names:tc:xacml:3.0:function:any-of-any">
<xacml3:Function
FunctionId="urn:oasis:names:tc:xacml:1.0:function:integer-greater-than" />
<xacml3:AttributeDesignator
AttributeId="com.acme.user.clearance"
Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"
DataType="http://www.w3.org/2001/XMLSchema#integer"
MustBePresent="false" />
<xacml3:AttributeDesignator
AttributeId="com.acme.record.classification"
Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource"
DataType="http://www.w3.org/2001/XMLSchema#integer"
MustBePresent="false" />
</xacml3:Apply>
</xacml3:Condition>
</xacml3:Rule>
<xacml3:Rule Effect="Permit"
RuleId="com.axiomatics.dataAccess.firstCheck.otherCheck">
<xacml3:Description />
<xacml3:Target />
</xacml3:Rule>
</xacml3:Policy>
<xacml3:Policy
PolicyId="http://axiomatics.com/alfa/identifier/com.axiomatics.dataAccess.secondCheck"
RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit"
Version="1.0">
<xacml3:Description>Second check...</xacml3:Description>
<xacml3:PolicyDefaults>
<xacml3:XPathVersion>http://www.w3.org/TR/1999/REC-xpath-19991116
</xacml3:XPathVersion>
</xacml3:PolicyDefaults>
<xacml3:Target />
</xacml3:Policy>
</xacml3:PolicySet>