Gar*_*son 19 microservices abac
我正在研究构建一个系统的选项,以在基于微服务的架构中提供“实体访问控制”,以根据请求用户限制对某些数据的访问。已经实施了完整的基于角色的访问控制 (RBAC) 系统来限制某些操作(基于 API 端点),但是没有实施任何措施来限制针对一个数据实体的这些操作而不是另一个数据实体。因此需要基于属性的访问控制 (ABAC) 系统。
考虑到系统要求适合用途以及我自己的优先事项,以遵循安全逻辑实现的最佳实践以保持在一个位置,我设计创建了一个外部化的“实体访问控制”API。
我设计的最终结果类似于我看到的下图(我认为来自 axiomatics.com)

问题在于,当您开始谈论以结果列表作为响应的 API 的那一刻,整个事情就失败了。
例如。客户 API 上的 /api/customers 端点,它接受查询过滤器、排序、顺序和限制/偏移值等参数以促进分页,并将客户列表返回到前端。那么,您如何在微服务环境中为每个实体提供 ABAC?
到目前为止测试的上述问题的可怕解决方案:
注意:我测试了 14,000 条记录,因为它是我们当前数据状态的基准。一个 API 可以服务 100,000 或 1m 条记录是完全可行的,因此任何涉及迭代整个数据集或通过网络传输整个数据集的事情都是完全不可持续的。
那么,问题就在这里......你如何在微服务架构中实现一个外部化的 ABAC 系统(如图所示),同时还能够通过查询过滤器、排序、排序和限制来处理响应多个实体的请求/offset 值以方便分页。
经过几十个小时的研究,最终确定这是一个完全无法解决的问题,只是微服务(更重要的是,隔离实体存储)的副作用。
如果您想要一个可维护的(如在单个外部化基础设施中)实体级属性访问控制系统的好处,则需要一种实体存储的整体方法。您无法同时获得微服务的好处。