RBAC 不是 RBAC 不是 RBAC,纸面上的 RBAC 很难,但在现实生活中几乎不可能实现。
每个人对 RBAC 都有自己的“想法”,并且大多数人对与 RBAC 相关的每一件事都使用不同的术语。通常,从 LDAP 实现的角度来看,您很少拥有所有“部分”来在 LDAP 中正确实现。
简单来说,“零件”是:
S = 主题 = 一个人或自动代理或用户
P = 权限 = 对目标资源访问模式的批准
T = 目标资源 = 您要为其分配权限的对象
角色至少需要关联权限和用户。目标资源可能完全在 LDAP 之外。因此,它可能是 Tomcat 服务器上的应用程序,或者只是读取 LDAP 服务器中“其他”条目的权利。
因此,通常您在 LDAP 中要做的最好的事情是设置一个具有用户列表的对象,如果 LDAP 中有一些资源,请为这些目标资源分配适当的目录权限。
然后是小问题的实现。
我们现在需要一个策略来实现我们的角色。因此,如果没有关于如何使用它的策略,我们的角色(我们将其称为 USER-READ-ONLY)是没有用的。
在我们的例子中,我们可以说 USER-READ-ONLY 角色可以读取我们组织中的任何内容。
所以我们现在有一个政策。此策略存储在哪里?策略的数字表示存储在“策略信息点”或 PIP 中。
我们如何解释 PIP 提供的政策?策略由策略决策点 (PDP) 解释。
谁决定主题(用户)是否可以访问资源?政策执行点 (PEP)。
将所有这些策略内容放在一起,我们最终得到策略的数字表示,由策略信息点提供给策略决策点,然后将决策传递给允许或拒绝访问的策略执行点。
那么在我们的 RBAC 故事中,PIP、PDP 和 PEP 在哪里?好吧,如果目标资源在 LDAP 目录中,那么它就是 PIP 的 LDAP 目录(我们可能对其进行了硬编码并且没有抽象,PIP 和 PEP 也是如此,这很容易。
但如果是我们的 Tomcat 应用程序,它必须是 Tomcat 应用程序内的一个可以中断的方法,知道必须使用一个方法说“我有这个主题(用户)并且他想要访问这个目标资源(库存)来执行这个权限(只读)”。
当然,所有这些东西都有一些标准。(Google XAML、RFC3198、ISO10181-3、NIST)但它们是与实际实现有很大差距的标准。
所以请记住,RBAC 的真正实现很难。
当然,恕我直言,我们应该了解 RBAC,研究论文并将其作为战略方向,但在广泛的供应商和应用程序基础上的实际实施,我们还没有实现。
-吉姆