关于在基于属性的访问控制 (ABAC) 系统中实际实现 PIP 的问题

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

我正在做一个需要基于属性的访问控制(ABAC)并且基于模块化单体架构的项目。

如果来自 API 请求的参数不足以决定策略,则需要提供缺少的属性。例如,一项政策说“如果由用户创建,则可以编辑对象”。对于该策略,需要首先获取对象或至少一个“createdBy”属性。推荐的架构使用 政策信息点 (PIP).

作为属性的检索源,或者需要的数据 进行政策评估以提供 PDP 所需的信息 做出决定。

我看过的所有文章和论文都只是说PIP检索属性。这不是微不足道的,它在我脑海中提出了很多问题。我很惊讶我找不到任何关于它在实践中如何运作的信息。

即使提倡创建多个问题,我也认为我的问题是相互交织的,将它们分开对我来说没有意义。

1)PIP如何访问对象数据?
我假设 PIP 通过每个限界上下文/微服务的常规 API 获取数据。如果这是正确的,PIP 是否调用常规 API 端点

e.g. GET api/orders/{orderId}?fields=createdBy

或者 API 必须为 PIP 提供特殊的端点吗?

e.g. GET api/orders/{orderId}?pipActivity=update

使用选项 2 获取新属性需要 PIP 和 API 一起更改。

它不会消除这个问题,但在模块化单体中,我可以在有界上下文中拥有 PIP 功能,并在调用访问控制系统之前获取所有必需的数据。这会是模块化单体的一个选择吗?

有没有其他常见的访问模式,比如直接访问数据存储?

2)PIP是如何认证授权的? PIP 通常使用什么认证方式(例如证书、登录名和密码)?

PIP的访问也是ABAC授权的吗?我会假设在大多数情况下,PIP 授权不需要请求参数之外的其他属性,并且应该在不需要递归调用的情况下解决。

3)如何处理集合元素的访问权限? 在集合(例如 /orders)上使用

GET
时,可以检查用户是否有权阅读集合和项目。用户可能拥有某些对象的权限,但没有其他对象的权限(例如,只能看到低于 10.000 欧元的订单)。是为列表中的每个对象创建对 PDP 的单独请求,还是 PDP 接受请求列表并返回决策列表?

4) PIP 如何知道要获取的属性?
PIP 和规则管理必须了解所有 API。新规则可能需要更多属性,并且属性可能会更改。限界上下文/微服务负责什么,授权系统负责什么?当业务安全规则需要新属性时,如何将其添加到 PIP 执行的调用中。如果 PIP 可以直接访问数据库,例如通过 OData,或者资源具有

select
查询参数,则可以轻松配置 PIP 以获取其他属性。

5)有用的错误信息
策略通常由多个规则组成。如果访问被拒绝,因为一个或多个规则不满足,用户应该知道错误的来源还是应该拒绝访问?错误也可能来自数据库和网络错误或缺少属性,因为接口已更改并且未在 PIP 中更新。

感谢您的帮助。

pip implementation abac
© www.soinside.com 2019 - 2024. All rights reserved.