XACML 如何有效控制对资源集合(列表)的访问

问题描述 投票:0回答:1

假设我有一个集合

transactions
和一个策略,如果用户的
read access
与记录中的相同,则该策略将
user
授予该集合内具有角色
department
的用户的交易。

问题:如果我访问单个资源,则检查每个资源的访问权限没有问题。但是,如果我想枚举/列出整个集合,我需要检查集合中的每个项目,这是效率不高的(特别是如果您的条目数量“高”)。

如果 PDP 可以将条目列表需要由部门过滤的信息返回给 PEP(并且 PEP 可以将其传递到底层数据存储),那么效率会更高。

我考虑过为此使用义务,但据我所知,它们不应包含 AuthZ 相关信息。

那么如何解决这个问题呢?

authorization access-control xacml abac
1个回答
3
投票

你提出了一个很好的观点。 XACML 是为我所说的交易授权而设计的,即授权特定的交易或流程。例如:

  • 政策:护士可以查看其科室患者的病历。
  • 请求:护士乔可以查看病历#123吗?

挑战在于当您想要控制对大量甚至未知数量的项目的访问时。在这种情况下,您(理论上)可以只发送大量请求。您甚至可以利用 XACML 的多重决策配置文件,它允许您创建请求,例如:

  • 请求:护士乔可以查看病历#123、#124、#125、#126...吗?

然后,您将得到与请求中的 MDP 元素一样多的答案。你甚至可以做一个矩阵,例如

  • 请求:护士Joe可以查看和编辑病历#123、#124、#125、#126...吗?
  • 响应:2x4 = 8 个决策。

但是,它的扩展性仍然不够好(它可以达到数千,但几乎不会达到数百万),并且在分页场景以及当您不知道有多少项时它无法工作。它在分页中不起作用,因为假设您检索了 10 个将要显示的项目(通过分页),然后您对每一项进行了授权。您面临页面上的项目少于 10 个的风险,这会破坏用户体验。

在您的问题中,您提到了使用义务和建议。这是一个选择,但你对缺点的看法是正确的。它将 authZ 语义隐藏在建议中,这使得单一案例变得更加困难。这就是您的政策将会变成的样子

  • 政策:护士可以查看患者的病历+义务:按科室过滤

这给政策执行点(PEP)带来了大量的工作。

那么还有什么选择呢?

使用反向查询(ARQ)

Axiomatics(免责声明 - 是我工作的地方)在 PDP 之上提出了一个新的 API,它允许您以开放式方式查询策略,称为“反向查询”。这是关于该主题的开发者帖子 您不是发送完整的 XACML 请求,而是发送部分请求(开放式问题),例如

Alice 可以看到什么?
  • 请求可以根据需要是通用的或具体的。以下均为有效请求:

会发生什么?
  • 爱丽丝能做什么?
  • Alice 可以看到什么?
  • Alice 可以查看哪些医疗记录?
  • Alice 可以查看 ER 部门的哪些病历?
  • ...
  • 响应将是一组根据必须满足的策略计算得出的过滤器表达式。

鉴于之前所述的政策

    政策
  • :护士可以查看其科室患者的病历。 用户元数据:Alice 是芝加哥库克县医院肿瘤科的一名护士。
  • 可能的答案是

会发生什么?
    • 答案
    • :护士可以查看自己科室病人的病历。
    爱丽丝能做什么?
    • 答案
    • :查看肿瘤科患者的病历。
    Alice 可以看到什么?
    • 答案
    • :肿瘤科患者的病历。
    Alice 可以查看哪些医疗记录?
    • 答案
    • :一名肿瘤科患者。
    Alice 可以查看急诊室的哪些病历?
    • 答案
    • :没什么
  • 上述示例中的请求集中在 Alice 上。您可以将重点放在资源(医疗记录)上,甚至是操作上。你可以选择。

© www.soinside.com 2019 - 2024. All rights reserved.