如果PIP和整个ABAC引擎无法解析属性,它应该如何表现。有几种情况:找不到我们正在解析属性的目标对象属性不能……
ABAC 是一个广义的概念,没有指明这种低级行为;并且很难为所有ABAC框架提供通用的最佳实践,因为有越来越多的ABAC框架可能完全不同:其中一些是标准的(例如。 OASIS XACML , NIST NGAC ),其他非标准但通用的(例如。 OPA ),其他产品特定的(例如 Kubernetes ABAC )。
由于规范更加成熟,因此更容易为XACML(3.0)标准提供提示:
的 5.29 强> 说: 如果上下文中不存在匹配属性,则 的 MustBePresent 强> 属性控制此元素是返回空包还是 Interterminate 。见7.3.5节。 (MustBePresent是在XACML策略中的AttributeDesignator元素上定义的.AntributeDesignator是对属性的引用,在您的情况下,如果该属性在当前请求上下文中不可用,则应调用PIP。)
的 7.3.5 强> 提供更多细节: 如果缺少该属性,则MustBePresent控制属性指示符或属性选择器是返回空包还是 Interminminate 结果。如果MustBePresent是 False (默认值),则缺少的属性应该导致空包。如果MustBePresent是 True ,则缺少的属性应该导致 Interterminate 。应该根据包含的表达式,规则,策略和策略集的规范来处理这个“确定”结果。如果结果为 Interterminate ,则属性的AttributeId,DataType和Issuer可以在第7.17节中描述的授权决策中列出。但是,PDP可能出于安全原因选择不返回此类信息。 [...]无论在策略评估期间对请求上下文进行任何动态修改,PDP都应该表现得好像每个属性值包在首次测试之前在上下文中完全填充,并且此后在评估期间是不可变的。 (也就是说,该属性的每个后续测试都应使用最初测试过的同一组值。) 的 最后一句特别意味着如果PIP属性解析导致空包并且MustBePresent = False,则应该将属性值保留为空包以用于其余的策略评估,即不要尝试再次为相同属性调用PIP (在相同的背景下冒着价值变化的风险)。 强>
的 7.19.3 强> 指定PDP应如何在其响应中包含有关缺失属性的信息。
请注意,最终结果也会受到XACML中的算法组合的影响。例如。即使由于子规则/策略(集)中的PIP错误而导致AttributeDesignator返回Indeterminate,封闭策略的算法(如deny-unless-permit(resp.allow -no-deny))也可能返回Deny(resp.Permit),无论如何。
这就是标准所说的,那就是特定于实现的行为。在 AuthzForce 例如,XACML实现,我们在尝试尽可能符合XACML时区分以下情况:
PDP和PIP之间的交互没有在XACML标准中规定。这取决于每个实现(AuthZForce,Axiomatics ......)以确定它们如何处理每种情况。
一般来说,使用PIP时可能会出现3个错误:
此外,还有另一个可能的问题:映射中使用的密钥(例如用户名)根本没有任何价值。在这种情况下,很明显,根本不会调用映射(例如,检索角色)。
第1点和第2点可能会导致不确定。这有助于管理员排除安装故障。
对于使用该属性的分支,第3点应该导致NotApplicable。如果没有价值,那就这样吧。为什么一定会有价值?
我希望这有帮助,
大卫。