ABAC(基于属性的访问控制, Attribute-Based Access Control)是一种访问控制模型,通过使用属性来决定用户对资源的访问权限。与传统的基于角色的访问控制模型(RBAC)不同,ABAC 不依赖于固定的角色,而是更加灵活地使用一组属性来动态地评估和授权访问请求。
ABAC的核心概念解释
在ABAC中将每一件事都抽象为四个核心元素,即用户,操作,资源,环境。对于一个用户,他要进行某一个操作,这个操作是在哪个环境下对哪个资源的实例进行操作?
举个例子:李云龙要吃晚饭,李云龙就是用户了,那李云龙这个用户要进行的操作就是吃饭,每个人都有吃晚饭的权限,但是如果李云龙的媳妇剥夺了他吃晚饭的权限,那李云龙连操作的权限都没有,也就不会有下文了,所以ABAC中操作是最关键的元素,而资源和环境都是依托于操作而来的,没有操作的权限,自然也就更不会有关联操作的资源和操作执行的环境的下文了。而对于吃饭这个操作,需要关联的资源就是食物,李云龙只能吃他家里面的食物,不能跑到别人家随便吃别人家的食物,即李云龙只对他家里面的食物(资源)有吃(操作)的权限,如果李云龙去他朋友家吃饭,那他的朋友就会赋予他吃他家食物的权限,那李云龙吃饭这个操作自然也就关联了两个资源实例,一是自己家的食物,二是朋友家的食物,他可以吃自己家的食物,也可以吃朋友家的食物。而晚饭肯定只能在晚上吃,不能在早上吃,也不能在中午吃,那只能在晚上吃晚饭就是环境对操作的一个限制。
所以,对于ABAC的权限控制策略就是,一个用户是否有某种操作的权限,这个操作是否需要关联资源,这个操作是否有环境限制?就是ABAC区别于RBAC基于角色权限控制的更细粒度的权限控制。
ABAC的工作流程
授权:
权限管理员可以将某一个操作的权限赋予某一个用户,这个操作可以是关联了一系列资源的操作,也可以是没有关联资源的操作,如果这个操作是有关联资源的,那么管理员还需对这个用户具体可以操作哪些资源实例进行授权,例如,管理员需要赋予一个用户在虚拟机上编辑文件的权限。那么,操作就是在虚拟机上编辑文件,而虚拟机可能有多个,那么资源就是虚拟机,资源实例就是正在运行的虚拟机实例。这是动态变化的,可能随时会新增虚拟机,也可能会关闭一部分虚拟机,这个时候,权限中心就需要动态地知道哪些虚拟机是正在运行的,以便管理员从中选取并授予用户在操作实例的权限。管理员从中选取出需要让用户操作的虚拟机授予用户操作的权限,即操作所关联的资源实例。
鉴权:
鉴权的大致流程为,当用户进行某一个操作时,携带操作的唯一标识,如果需要关联资源,则一并携带资源实例的唯一标识,和用户信息一起到权限中心进行鉴权,权限中心会根据这些信息生成用户的访问策略,决定用户是否有访问权限。
ABAC的优势:
- 提供了更细粒度的权限控制,使得权限控制不再仅仅是局限于操作,而是拓展到操作所关联的资源,以及执行操作的环境。
- 属性可以实时变化,不依靠固定的权限表或角色,系统能够覆盖复杂而动态的访问控制需求。