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