我有一个项目,我需要执行ABAC。从Nodejs的角度来看,我一直在互联网上搜索ABAC是如何工作的。我了解ABAC的基本概念,但并不真正理解如何成功地实现它。我读过关于这一主题的白皮书,并试图审查一些声称已实施ABAC但似乎不完整或不明确的项目。
首先,我想描述我的项目在高水平,然后我计划如何在我的项目中实施ABAC。我希望有人能在这个主题上给我提供指导,以及我想要实现ABAC的方式是好的还是坏的,或者我遗漏了一些东西,它需要一些工作。
我的技术栈:
下面是我的堆栈中最重要的技术片段
我的项目:
它是一个电子商务平台,允许用户创建特定的资源,这些资源可以出售和/或与系统中的其他用户共享。当这些资源被分享或被出售时,即ABAC将“启动”。该项目将有一个界面,使其最终用户能够为他们的资源创建ABAC策略。这些策略将影响到其他用户和用户所在的组织。可能有1000 s的用户和1000 s的资源。
我可能的ABAC实现:
因此,我要做的第一件事是调整我的数据库,以便每个对象和主题(在本例中是用户和他们的资源)都有一个仅用于它们的属性的表和一个查找表,以跟踪哪个对象/主题具有哪个属性键/值对。因此,例如:如果有一个users表,那么就会有一个带有用户属性键的表和一个查找表来跟踪哪个用户分配了哪个属性键以及该键的值。示例:
| userId | attr_key | attr_val |
|--------|------------|----------|
| 1 | department | sales |我的项目将为最终用户提供一个UI,以便为他们的资源创建策略。UI将允许用户根据4项主要ABAC原则创建策略:主题、对象、操作和环境(在这种情况下,“环境”将是时间)。在UI中,每个原则都有一个按钮,用户可以在其中添加一个属性和一个逻辑运算符。一旦用户完成创建策略,UI将以特定的方式将其保存到MySQL DB中,以便在需要强制执行时对其进行查询。
鉴于我在上面所写的内容,我看到ABAC在我的项目中是这样工作的:
所以,首先,上述方法是否可行?第二,这是否切合实际?最后,在ABAC范例中,我计划的实现是否缺少什么,或者对如何改进它有什么建议?
发布于 2022-02-20 12:55:04
首先,你想要解决的问题很复杂,需要不断更新,将来可能会有麻烦。在不使用数据库上的任何策略引擎的情况下解释策略将浪费您的时间,并可能迫使您维护它。要根据技术栈回答问题,OPA https://www.openpolicyagent.org/docs/latest/rest-api/将帮助您管理和执行您的策略。
OPA RBAC策略示例
package app.abac
default allow = false
allow {
user_is_owner
}
allow {
user_is_in_sales_department
user_is_senior
}
user_is_owner {
input.user.id == input.resource.owner_id
}
user_is_in_sales_department {
input.user.attributes.department == "sales"
}
user_is_senior {
input.user.attributes.tenure > 8
}如上例所示,您可以将用户属性和资源属性与opa进行比较。
这将返回一个关于用户是否应该执行此事件的结果。
关于如何实现它,有多种选项,您可以从这个链接https://www.openpolicyagent.org/docs/latest/integration/访问它。
我通常在我的项目中使用黄金。我认为在我的核心业务逻辑中包含策略管理是不合理的,我创建了一项不同的服务,以便自己使用OPA的go库管理策略。
https://stackoverflow.com/questions/56935214
复制相似问题