我有一个需要实施ABAC的项目。我一直在互联网上搜索有关ABAC如何从Node.js角度工作的信息。我对ABAC的基本概念有所了解,但对如何成功实施它却不是很了解。我已经阅读了有关该主题的白皮书,并尝试研究了一些声称已实施ABAC的项目,但该项目似乎并不完整或不清楚。
首先,我想从高层次描述我的项目,然后我打算如何在我的项目中实施ABAC。我希望有人可以给我有关此主题的指导,以及我想要实施ABAC的方式是好是坏,还是我遗漏了一些东西并且需要一些工作。
我的技术栈:
以下是我堆栈中最重要的技术
我的项目:
这是一个电子商务平台,它将允许用户创建可以与系统中其他用户出售和/或共享的某些资源。当共享或出售这些资源时,ABAC将“加入”。该项目将具有一个界面,该界面将允许其最终用户为其资源创建ABAC策略。这些策略将影响其他用户和组织用户之间的隔apart。可能有1000个用户和1000个资源中的100个。
我可能的ABAC实施方式:
所以我要做的第一件事是重组数据库,以便每个对象和主题(在这种情况下,这将是用户及其资源)
将有一个仅用于其属性的表和一个查找表,该表跟踪哪个对象/对象具有哪个属性键/值对。因此,例如:如果有一个users
表,那么将有一个包含用户属性键的表和一个查找表,该表跟踪哪个用户具有为其分配的属性键以及该键的值。例如:
| userId | attr_key | attr_val |
|--------|------------|----------|
| 1 | department | sales |
我的项目将为最终用户提供一个UI,以为其资源创建策略。用户界面将允许用户根据ABAC的4条主要原则创建策略:主题,对象,动作和环境(在这种情况下,“环境”就是时间)。在用户界面中,这些原则中的每一项都会 有一个按钮,用户可以向其添加属性和逻辑运算符。用户完成创建策略后,UI会以特定方式将其保存到MySQL DB中,以便在需要执行时可以进行查询。
鉴于以上内容,我发现ABAC在项目中的工作方式如下:
那么,首先,上述方法可行吗?第二,实用吗?最后,ABAC范式在我计划的实施过程中还缺少什么,或者关于如何改进它的任何建议?