如果无法解析属性,ABAC PIP 应该怎么做?
Posted
技术标签:
【中文标题】如果无法解析属性,ABAC PIP 应该怎么做?【英文标题】:What should ABAC PIP do in case of attributes resolution impossibility? 【发布时间】:2018-07-26 14:18:47 【问题描述】:PIP 和整个 ABAC 引擎在无法解析属性的情况下应该如何表现。 有几种情况:
-
找不到我们用来解析属性的目标对象
无法解析属性,因为提供的属性不足以请求附加信息。就像我们传递单个 userId 和没有 id 的资源名称一样。
如果在属性解析链中(当某些属性依赖于另一个属性时)缺少某些东西,导致无法解析目标属性。
【问题讨论】:
您是否尝试实现自己的? @DavidBrossard,是的,我愿意。 Node.js 没有任何引擎或 SDK。我们迈出了一小步,开始使用最简单的 JSON、解析器和 XACML 的一些部分。目前我已经实现了支持规则、策略(没有集合)、目标过滤和日志记录的引擎。这对于第一步来说已经足够了。我希望将来,当我们需要更多时,会尝试为 XACML 或 ALFA 规范实现引擎。 出于好奇,为什么不使用现有的 PDP 并简单地在 NodeJS 中实现 PEP? @DavidBrossard,这是时间问题。作为第一步,涵盖 90% 需求的最简单的服务器实施需要 3 天时间来了解原理,并需要 2 天时间来实施。现在这更便宜,至少在我们开始使用它之前。我想将来我们会审查现有的解决方案。再一次,但现在它们确实庞大而复杂,这很酷,但需要努力管理它们。而且,我找不到纯 RESTfull 或任何其他类型的专用 PDP。 我明白了。顺便说一句,Axiomatics 和 AuthzForce 都提供 REST PDP 【参考方案1】: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”。该“不确定”结果应根据包含表达式、规则、策略和策略集的规范进行处理。如果结果是“Indeterminate”,那么属性的 AttributeId、DataType 和 Issuer 可以列在授权决策中,如第 7.17 节所述。但是,出于安全原因,PDP 可以选择不返回此类信息。 [...] 无论在策略评估期间请求上下文的任何动态修改如何,PDP 都应该表现得好像每个属性值包在第一次测试之前都已完全填充在上下文中,并且此后在评估期间是不可变的。 (也就是说,该属性的每个后续测试都应使用最初测试的相同值包。) 最后一句特别表示,如果 PIP 属性解析导致空包并且 MustBePresent=False ,您应该在策略评估的其余部分将属性值保留为空包,即不要尝试在相同的上下文中再次为相同的属性调用 PIP(冒着值更改的风险)。
§ 7.19.3 指定 PDP 应如何在其响应中包含有关缺失属性的信息。
请注意,最终结果也会受到 XACML 中组合算法的影响。例如。即使由于子规则/策略(集)中的 PIP 错误而导致 AttributeDesignator 返回 Indeterminate,封闭策略的算法(如拒绝除非许可(resp. permit-unless-deny))也可能返回拒绝(或许可)不管.
这就是标准所说的,然后,存在特定于实现的行为。例如,在AuthzForce XACML 实现中,我们区分以下情况,同时尽可能地符合 XACML:
-
如果在属性解析期间出现 PIP 内部错误(连接问题、配置错误、缺少依赖项等),那么无论 MustBePresent 为何,AttributeDesignator 都会评估为 Indeterminate,因为我们认为这很关键,因此我们添加了 info Missing 属性XXX;我们还添加有关原因的信息,例如缺少依赖项:属性 YYY 如果 PIP 需要上下文中缺少的某些属性来完成其工作(例如,缺少依赖项:属性 'subject-id' 如果 PIP 获取用户的角色,但需要 subject-id 属性才能做到这一点,这是缺失的)。
如果 PIP 属性解析没有错误但未找到值,则结果为空(例如,某些 PIP 从数据库中成功获取用户的角色,但由于没有为用户分配角色而得到一个空列表.),然后如果 MustBePresent=false,则 AttributeDesignator 评估为空包,否则(如果 MustBePresent=true)返回 Indeterminate 并带有信息缺少属性 XXX。
【讨论】:
【参考方案2】:PDP 和 PIP 之间的交互在 XACML 标准中没有指定。取决于每个实现(AuthZForce、Axiomatics...)来确定它们如何处理每种情况。
一般来说,使用 PIP 时可能会出现 3 个错误:
-
连接问题:无法访问目标 PIP(例如 LDAP 服务器)
映射配置问题:属性的映射无效。例如,您正在从不存在的 SQL 表或列中检索属性。
数据问题:底层源中没有要读取的数据
此外,还有另一个可能的问题:映射中使用的键(例如用户名)根本没有值。在这种情况下,显然根本不会调用映射(例如检索角色)。
第 1 点和第 2 点可能导致不确定。这有助于管理员对安装进行故障排除。
对于使用该属性的分支,第 3 点应导致 NotApplicable。如果没有价值,那就这样吧。为什么一定会有值?
希望对你有帮助,
大卫。
【讨论】:
以上是关于如果无法解析属性,ABAC PIP 应该怎么做?的主要内容,如果未能解决你的问题,请参考以下文章
从网上下载的JAVA程序在eclipse里打不开,src怎么一大堆红叉?提示无法解析类型。我要怎么做呀?
电脑DNS解析失败,本地连接IPV6连接无网络访问权限。怎么办啊?
带有 keycloak 的 ABAC - 在策略中使用资源属性