序言
CBAC是“基于上下文的访问控制”(Context based Access Control)的英文首字母缩写,它是指云敏团队自研的一套以配置即代码为基础的高性能、可审计、可编程的分布式权限访问控制引擎,用于根据权限设置控制用户的操作,提升系统的安全性。
一、访问控制概述
访问控制是物理安全和信息安全领域的重要概念,它是指有选择性地限制对某个位置或资源的访问。而这里所说的“访问”可以包括消耗、进入或者使用。对某个资源的访问的许可被称为鉴权。
有效地进行访问控制,能够规避越权操作为系统安全性和使用体验带来的风险。诸如访问控制列表(ACL)、基于角色的访问控制(RBAC)都是我们常见的访问控制方式。
二、为什么要自研CBAC引擎?
诚然,市面上有很多现成的访问控制系统,但这些系统往往都会有些功能方面的限制条件。比如上面提到的RBAC这种访问控制策略,最适合实现“只有甲方项目经理能够修改流水线”。但是如果我们期望使用访问控制规则实现“只有周五下午六点到七点之间可以启动部署流水线”,那么RBAC就无能为力了。因此,我们有必要回归到软件系统访问控制的本质上,实现一套通用的访问控制引擎,RBAC其实就是这个引擎中所配置的策略之一。
三、CBAC是如何被设计出来的?
在软件系统的访问控制中,我们往往能够使用这样的句子来描述:
当满足 <某种关于用户、服务器的约束>,允许 <某种访问> 进行。
比如:
-
当用户年龄满18岁,允许进入游戏
-
当用户使用谷歌浏览器,允许获取短信验证码
-
当服务器内存占用超过50%,允许执行内存回收
-
当访问的服务器位于北京,允许购买华北机房的服务器
-
当用户角色是系统管理员,允许修改系统设置
这些描述的背后,暗含了三个重要的要素:
-
上下文:当前访问环境的即时状态信息,既包括客户端上下文(当前用户、角色、浏览器等),也包括服务端的上下文(当前服务器的硬件基础设施、操作系统、软件等)
-
访问控制策略:依据上下文和约束条件进行鉴权结果计算的算法
-
访问:每一种访问都是包含了所使用的控制策略的约束条件输入
因此,我们有了一个公式:
鉴权结果 = 控制策略(上下文,访问约束条件)
根据这个公式,我们便得到了这个模型:
四、实现可配置性和可编程性
可配置性和可编程性是CBAC的核心基础,只有这样,CBAC引擎才能根据不同的需求配置不同的访问控制策略。为此,我们的CBAC引擎构建于云敏流水线的另一个基础模块“配置即服务”(后序文章会为陆续介绍),同时技术选型采用Node.js作为开发语言。
我们先将js脚本嵌入到了YAML配置文件中,以rbac策略的配置为例:
而要让这段字符串可以执行,我们使用了Data URL机制,直接将字符串转变为es模块。
最后,将整个鉴权机制封装成服务,我们便得到了一套高性能、可编程、高可配置的访问控制引擎!
总结
CBAC引擎为云敏流水线带来了巨大的便利,实现了快速的权限配置和鉴权机制,大大加快了开发进度,如果您对此感兴趣,或者想了解云敏流水线的最新进展,欢迎与我们取得联系。
文章作者:李 淳
排版设计:王蔚棋
手绘插画:岳 媛
原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33155.html