2

嗨,我经历了许多有关 XACML 的用例,但我不知道在 PDP 中加载策略的最佳方式是什么。根据 OASIS 定义的 PDP 工作流程,我理解传入请求何时到达 PDP。PDP 负责根据请求匹配相应的策略。

由于 PDP 将匹配每一个策略,所以想想我有 10,000 个策略存储在分布式环境中的场景,那时会发生什么。匹配会消耗越来越多的时间,这不是匹配策略的有效方式。

我需要对这个问题做一些澄清:

  1. 如何在不同的服务器上分发策略?

  2. 如果我在不同的服务器上分发策略,那么我的 PDP 将如何识别并从特定服务器获取相应的策略?

  3. PDP 识别与传入请求匹配的确切策略的最佳方式是什么?

4

2 回答 2

2

处理拥有大量 (10,000) 个策略的情况的语法方法是尽可能明智地使用 PolicySet、Policy 和 Rule 级别可用的“Target”子句,以便尽快修剪决策树。

因此,假设您知道在 10,000 条策略中只有 1000 条用于财务部门运营,可以添加资源类别属性“dept-focus”,然后我们通过检查来修剪树

target: resource.dept-focus == "finance"

一旦这使您进入修剪树,如果您知道财务部门的政策与 5 个不同的应用程序(可能还有一些常见的部门范围的政策)相关,那么您可以使用“app-id”属性等进行修剪。

当然,要使其工作,PEP 需要将这些属性 id 的适当值添加到 XACML 请求中。

更以部署为中心的解决方案是将 10,000 条策略拆分为更小的块,然后部署到单独的 PDP 组中。不同的供应商对这些概念使用不同的名称(如果有的话)。我为之工作的公理学称这些授权域。

因此,您可以将与财务部门相关的所有策略部署到构成“财务”授权的一组 PDP 中。域和另一组进入研发域等。同一域中的这些 PDP 当然可以进行负载平衡。如果这些域没有中央控制器(例如 Axiomatics 服务管理器),管理可能会变得有点麻烦。

希望有帮助。

于 2014-03-13T05:58:56.597 回答
1

是的.. 如果存储了 10,000 个策略,则可能需要相当长的时间来匹配它们..

如果您考虑水平缩放,您仍然可以寻找以下...

  1. 缓存所有策略或目标元素
  2. 使目标不复杂(只是一些字符串匹配)
  3. 多线程策略的并行匹配。

我同意,对于 10000 个策略,我们可能需要寻找垂直扩展。我假设您已经根据应用程序定义了策略。应用程序 ID 可以是Target您的策略的元素。(它可以是任何有助于创建策略集合的东西)。如果我回答你的问题

  1. 策略可以基于Target元素(基于应用程序)分布。因此,不同的服务器根据应用程序 ID 有不同的策略。基本上它就像一个应用程序的PDP。(想法是您希望基于某种方式对策略进行分组......可以将它们分发到单独的 PDP)
  2. 可以有一个中央 PDP 集线器,一旦收到请求,它将检查应用程序 ID 并将消息路由到相关 PDP。有时,它不想成为一个 PDP,一些路由器(例如 ESB)可以在请求中查找某些参数并发送到相关的 PDP。
  3. 如前所述.. 最好有中央服务器来路由请求

此外,如果您没有实现分布式策略的并行评估..它也可以使用 PDP 集线器来完成......比如说,您可以将策略分布到 10 个 PDP 中,并且有 PDP 集线器。一旦收到对 PDP 集线器的请求,它将向 10 个 PDP 发送请求。10 个 PDP 将并行评估策略。一旦收到响应到 PDP 集线器,它可以聚合 10 个 PDP 的结果并将最终结果发送给 PEP。

于 2014-03-12T08:02:18.753 回答