在LDAP中表示RBAC角色的方法

8

当使用LDAP存储实现RBAC模型时(我正在使用Apache Directory 1.0.2作为测试平台),其中一些角色显然可以映射到特定的objectClasses:

  • 资源 - 我没有看到一个清晰的映射方式。applicationEntity似乎只是间接地用于此目的
  • 权限 - 权限可以被视为单一目的的角色;显然,我没有考虑LDAP权限,因为它们控制对LDAP对象和属性的访问,而不是对资源的RBAC权限
  • 角色 - 直接映射到groupOfNames或groupOfUniqueNames,对吗?
  • 用户 - person

在过去,我曾看到一些模型,其中资源没有以任何方式在目录中处理,而权限和角色则映射到Active Directory组。

有没有更好的方法来表示这些角色?如何编写一份文档,讨论架构的良好映射和意图?


好奇-为什么连一句评论都没有就给我点了踩?三年前我问这个问题时,它似乎是一个相关的问题...特别是对于当时我正在工作的项目。 - Tetsujin no Oni
1
作为原帖作者,我发现这是一个重复的问题,与LDAP中基于角色的安全实现相同,该问题实际上提供了一些有用的指导。 - Tetsujin no Oni
在最新的更新中:我发现基于声明的访问控制在 .Net 中是一种不错的机制,而 ADFS 似乎是将声明从应用程序数据库编组到身份验证/授权结构中的机制。 - Tetsujin no Oni
2个回答

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

当你在扩展讨论的时候,我不能接受这个答案,因为它并不是我提出的问题的答案... 在讨论中抛出更多(有用的!)术语肯定不能解决“实际构建实现的简单示例”的情况... - Tetsujin no Oni

1

请查看Fortress,它是一个真实的、开源的ANSI RBAC(INCITS 359)实现,使用LDAP。http://iamfortress.org/

是的,实现起来相当困难,但我们已经在解决这个问题上工作了10多年。 ;-)


我知道这个问题很老了,但你是否知道那个Fortress(iamfortress.org)是否被正式纳入(或转变为)Apache Directory Fortress? 故事是什么?Symas是否运营iamfortress.org,然后移交给了Apache基金会?寻找新闻稿或任何其他关于那里发生的事情的细节,但找不到任何信息。另外,你是否知道有人在ABAC的模式方面做了一些工作? - aimass
Symas收购了JoshuaTree Software,后者是Fortress的赞助商。随后,Symas将Fortress“捐赠”给Apache,并将其更名为Apache Fortress。从那时起,iamfortress.org一直是我的个人博客。我仍然会监控并回答问题,尽管最好将它们路由到Fortress邮件列表。关于ABAC模式支持,是的,Apache Fortress在其RBAC会话中确实部分支持属性。有许多关于此的文章发布在symas和iamfortress网站上。完整披露:我为Symas工作,也是Apache Fortress的维护者之一。 - Shawn McKinney
更正:iamfortress.net 是个人博客。iamfortress.org已停止使用。 - Shawn McKinney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接