【发布时间】:2018-07-25 09:57:18
【问题描述】:
PIP 如何解析正确的属性值?它应该需要哪种接口才能解析属性值?例如,我需要获取用户角色,在这种情况下,我只需要为用户 ID 传递一个属性。现在让我们让这个任务变得更加复杂。如果我有可能更改用户角色的上下文怎么办,所以这里单个用户 ID 是不够的。在这种情况下,我需要传递我们试图获取用户角色的访问级别。
所以在这个例子中我们可以看到,那个接口每次都会改变,唯一合适的就是接受所有的东西。
这种情况下 PIP 通常是如何实现的?
更新
示例: 我们有以下层次结构:
Level 0 1 2
Organization < tenants < documents.
符号
用户可能在每个级别都有角色管理员或用户。如果用户在级别 n 上具有管理员角色,则他可以访问此级别和级别 n+1,n+2,n+3... 上的任何内容。同时用户将在所有级别n-1、n-2、n-3...上拥有角色用户。
例子:
user admin admin
Organization < tenants < documents
这是第一部分。第二部分是关于文件的。假设我们有一些属性,例如 publicTenant 和 publicDocument。在不同级别上相互解析是不相关的,不仅需要了解 userId,还需要了解我们正在工作的级别以及组织 ID、租户 ID 和 documentId 等资源属性,以正确解析用户的角色和资源属性。
如何在 ABAC 中正确实施?当前的解决方案与 ACL/RBAC/ABAC 混合。 ACL 和 RBAC 隐藏在 ABAC 下,作为subject的属性使用,但是感觉不太对。
【问题讨论】:
-
嗨,我也在尝试对这个问题进行一些澄清。当您说用户角色可能会改变时,您的意思是“初级工程师被提升为高级角色”吗? - 让我们假设这两个标题对于所有密集目的具有不同的作用。当您说访问级别就像许可/分类级别时?就像拥有秘密许可的初级工程师想要访问机密级别的文件一样?
-
@MichaelCGood,我已经用示例更新了帖子。
-
您说:当前的解决方案与 ACL/RBAC/ABAC 混合。您的意思是您知道这样的解决方案吗?你能描述一下吗?如果你这样做了,我们很有可能将它翻译成 pure ABAC。事实上,与 ABAC 框架(如 XACML)相比,ACL 通常非常简单,以至于它被认为是 ABAC 的子集(特定用例)。 RBAC0 和 RBAC1 也是如此。所以在大多数情况下,ACL/RBAC/ABAC = ABAC。当然,您仍然需要一些身份/访问管理系统来分配用户角色,并且确实需要 PIP 来将您的 ABAC PDP 与其集成。
-
@CyrilDangerville,所以,ACL/RBAC/ABAC 解决方案确实等于 ABAC。我在这里的意思是,所有 ACL 和 RBAC 属性都以 ABAC 属性表示。例如,在 ABAC 属性中,subject.role 是根据角色实际存在的 ACL 计算出来的。对于 subject.permissions,我们将展开 subject.role 并获取角色的权限。就像,感觉不是很好,但如果我单独管理它们而不是单个 ABAC 界面会更好。
-
好的。另一个需要澄清的问题:在您的示例中,当您在 tenants 上定义管理员和用户角色时,您的意思是在每个租户级别吗?例如。一个人可能在租户 A 上具有管理员角色,但在租户 B 上只有用户角色。文档的问题相同。一个人可能在文档 A 上具有管理员角色,但在文档 B 上具有用户角色?