ABAC PIP属性请求

时间:2018-07-25 09:57:18

标签: security xacml abac

PIP如何解析正确的属性值?它必须具有哪种接口才能解析属性值?例如,我需要获取用户角色,在这种情况下,我只需要传递用户ID的属性即可。现在让我们使这个任务更加复杂。如果我具有可以更改用户角色的上下文,该怎么办,所以在这里仅一个用户ID是不够的。在这种情况下,我需要传递我们试图获取用户角色的访问级别。

因此,在此示例中,我们可以看到该接口每次都会更改,唯一合适的接口就是接受所有内容。

在这种情况下通常如何实施PIP?

更新

示例: 我们具有以下层次结构:

Level 0           1          2
Organization < tenants < documents.    

符号<表示右是左操作数的子代。

用户可能在每个级别上都具有角色admin或user。如果用户具有级别 n 的管理员角色,则他可以访问级别为 n + 1,n + 2,n + 3 ... 的任何内容。同时,用户将在所有级别上具有角色用户 n-1,n-2,n-3 ...

示例:

    user        admin      admin
Organization < tenants < documents

这是第一部分。第二部分是关于文件。假设我们有一些属性,例如 publicTenant publicDocument 。彼此在不同级别上的解析无关紧要,并且不仅需要了解userId,而且还需要了解我们正在使用的级别,并且需要资源属性(如organizationId,tenantId和documentId)才能正确解析不仅用户的角色,而且还需要资源属性。

如何在ABAC中正确实现?当前解决方案是与ACL / RBAC / ABAC混合使用的。 ACL和RBAC隐藏在ABAC下,用作主题的属性,但这感觉不对。

1 个答案:

答案 0 :(得分:1)

以下方法基于XACML模型。 如果您需要一种能够更好地处理请求中缺少某些资源属性的情况的解决方案,请告诉我们。我可以更新答案,但是解决方案更加复杂,因为它增加了对空/未定义属性的检查。

我使用一种简化的语法,但是您可以通过以下几种约定轻松地转换为XACML:

  • 如果未为策略(集)或规则提及目标,则表示目标为空(适用于任何请求)。
  • 在示例中,诸如 if attribute x ='XXX'之类的谓词转换为具有MatchId ='string-equal',AttributeValue'XXX'和相应值的XACML目标/ AnyOf / AllOf / Match属性 x 的AttributeDesignator。
  • 主题(资源)标识符以主题为前缀。(资源资源。)。
  • 在任何地方,策略/规则组合算法都隐式设置为 deny-unless-permit

PolicySet如下所示:

  • PolicySet'root'

    • 政策“组织级别”

      • 规则“管理员角色”:如果 subject.organization-level-role ='Admin'
      • 规则“用户角色”:如果 subject.organization-level-role ='User'以及其他限制用户角色可以在组织级别执行的条件...(如果太复杂而无法容纳规则,则可以将这些规则更改为“策略”,将随附的策略更改为“策略集”)
    • 政策“租户级别”

      • 规则“管理员角色”:如果 subject.tenant-level-role ='Admin'
      • 规则“用户角色”:如果 subject.tenant-level-role ='User'和...限制用户角色可以在租户级别执行的其他条件...(如果太复杂而无法容纳规则,则可以将这些规则更改为“策略”,将随附的策略更改为“策略集”)
    • “文档级”政策

      • 规则“管理员角色”:如果 subject.document-level-role ='Admin'
      • 规则“用户角色”:如果 subject.document-level-role ='User'和...限制用户角色在文档级别可以做的其他条件... < / li>

为此,您需要实现一个或多个PIP来解决以下主题属性(您可以在一个PIP中完成所有操作,特别是如果所有用户角色都由同一系统管理,则取决于您) :

  • subject.organization-level-role :组织级主题角色;为此,PIP需要以下属性作为输入: subject.userId resource.organizationId
  • subject.tenant-level-role :租户级主题角色;为此,PIP需要以下属性作为输入: subject.userId resource.organizationId resource.tenantId
  • subject.document-level-role :文档级主题角色;为此,PIP需要以下属性作为输入: subject.userId resource.organizationId resource.tenantId resource .documentId

有关PIP实施的一些评论:

  • 如果受试者没有在相应级别上分配任何角色,则PIP可能会为每个返回一个空袋。
  • 如果从角色管理系统中获取用户角色的成本很高,则可以通过从角色管理系统中一次(在所有级别)一次获取所有用户角色来优化PIP,这是主题属性中的第一次在策略评估过程中会请求上述,然后将其保留在缓存中,并在请求这些主题属性中的另一个主题时从缓存中返回。这里可以进行很多缓存优化。