微服务架构中用于资源列表的基于属性的访问控制 (ABAC)

Attribute Based Access Control (ABAC) in a microservices architecture for lists of resources

我正在研究构建系统的选项,以跨基于微服务的架构提供 "Entity Access Control",以根据请求用户限制对某些数据的访问。已经实施了一个完整的基于角色的访问控制 (RBAC) 系统来限制某些操作(基于 API 端点),但是还没有实施任何措施来限制针对一个数据实体的这些操作。因此需要基于属性的访问控制 (ABAC) 系统。

考虑到系统的要求是适合目的的,并且我自己的优先事项是遵循最佳实践以将安全逻辑的实施保留在一个位置,我设计创建了一个外部化的 "Entity Access Control" API.

我设计的最终结果类似于下面我看到的浮动图像(我认为来自 axiomatics.com)

问题是,当您开始谈论以结果列表响应的 API 时,整个事情就失败了。

例如。 Customers API 上的 /api/customers 端点接受查询过滤器、排序、顺序和 limit/offset 值等参数以促进分页,以及 returns 客户列表到前端。那么,您如何在微服务环境中为这些实体中的每一个提供 ABAC?

到目前为止测试的上述问题的糟糕解决方案:

注意:我测试了 14,000 条记录,因为它是我们当前数据状态的基准。单个 API 可以提供 100,000 条或 100 万条记录是完全可行的,因此任何涉及遍历整个数据集或通过网络传输整个数据集的操作都是完全不可持续的。

所以,问题来了……如何在微服务架构中实现外部化的 ABAC 系统(如图所示),同时还能够通过查询过滤器、排序来处理响应多个实体的请求、顺序和 limit/offset 值以方便分页。

经过几十个小时的研究,我们认为这是一个完全无法解决的问题,只是微服务(更重要的是分离实体存储)的副作用。

如果您希望获得可维护(如在单个外部化基础架构中)实体级属性访问控制系统的好处,则需要一种整体式实体存储方法。您无法同时获得微服务的好处。