paper-about-PML(Casbin论文)
PERM modeling language
PML:AnInterpreter-BasedAccessControl PolicyLanguageforWebServices
找到一篇关于casbin起源的论文,原文链接:Casbin
产生的背景
过去的几年里,云计算成为了一个为了减少基础计算需求的企业级能力的革命者,其中公有云在互联网上暴露了接口,云数据的访问控制就成了非常重要的一个部分,过去十年里,学术界提出了几个访问控制策略语言,比如:XACML,SPL,Ponder等等。
介绍了一下云计算的发展,特别是公有云的安全认证问题,不同的厂家有不同的实现,虽然功能都是一样的,而且为了多平台适配还开发了不同语言版本的安全认证,,这就导致了几个问题,比如一个用户可能在好几个云服务商上都部署了自己的业务,所以如果想要在不同的云服务商上迁移的时候,就会出现安全认证代码在其它平台不兼容的情况。而且云服务商需要开发对应的安全策略语言,这也是需要成本的,而且由于他们缺乏安全方面的知识,开发出来的安全策略可能引发安全漏洞。
所以为了解决这些问题,PERM模型语言(PML)就应运而生了。
特点
PML可以提供很多访问控制模型,比如像:access control list(ACL)
,RBAC
,ABAC
等等
PML运行机制被设计具有两个特点:
- 访问控制模型独立
- 实现语言独立
核心的PML-EM使用lua语言实现的,lua经常可以嵌入到其它的程序语言中,部分工作孵化成了目前入驻在github的开源项目casbin里,而且已经被一些公司应用在自己的生产环境中。
PML
将抽象的认证逻辑与策略规范分开
PML-EM:PML的运行机制,采用LUA语言实现,并融入了编译器内的编译器(interpreter-oninterpreter
)思想,这使得它可以直接使用所有支持LUA的语言,而且实践证明,PML-EM并不会造成明显的运行开销。
Request
request作为一个键值对就像这样:
1 | request::=r:attributes |
Policy
同样定义成键值对:
1 | policy::=p:attributes |
Policy Rule
它是上面policy的实例,它定义成值的数据,就像这样:
1 | policy_rule::={value1,value2,value3...} |
Matcher
它的作用是决定策略规则怎样作用于request,它被定义成boolean表达式
1 | matcher::<boolean_expr>(variables,constants,stub_functions) |
Effect
影响范围,比如说 some|any|max|min
Stub Function
可以用户自定义的策略设计
Has_Role
在PML中不会直接定义角色的概念,取而代之的是用stub函数描述两个对象的角色继承关系,定义如下:
1 | has_role::=function_name:parameters |
通用的has_role
函数使用如下:
1 | m=g(r.sub,p.sub) && r.obj==p.obj && r.act==p.act |
matcher会检查是否p.sub是r.obj的一个角色,基于has_role的能力,PML也就提供了对RBAC的支持
关于IoI的解释:
因为在策略执行期间直接运行用户侧代码会因为执行了不受控制的代码而遭遇攻击,例举了一些预防的措施:
- 在沙盒中执行stub函数,这样就不会影响到外面的PML解释器或者整个系统
- 当stub函数注册到云服务提供商中时执行静态代码检查,恶意代码会在这个过程中检测出来
- 提供一个用于函数编辑的接口,提供预定于构建模块用来构建一个stub函数
然而要实现上面这三个措施需要额外的机制,实现起来很不方便。这里团队成员采用了另一种平替方案,用Lua语言写PML解释器,也就意味着PML解释器是跑在Lua解释器上的,这就是interpreter-on-interpreter(IoI)
的由来.市面上很多流行的编程语言都对Lua解释器有一个很成熟的实现,而且体积非常小(小于1000KB),因此可以很容易的嵌入到需要被访问控制的底层系统里。
PML matcher与Lua的语法基本相同,因此PML interpreter直接使用Lua的解释器,类似于虚拟技术里面的硬件辅助,直接用物理处理器执行机器码而不是二进制的模拟器。
所有的benchmarks的请求延迟都少于5.9微秒,即使不考虑在云端运行的延迟,通过PML-EM的总体延迟跟正常事物延迟差距依然少于0.2%(当时ping的往返时间RTT大概在30-100ms)
本文作者:oldmee
本文链接:https://oldmee.github.io/2022/08/19/paper-about-PML/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。