快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

基于Casbin的Docker权限治理走访控制插件

Docker是目前支流的一种容器手艺。为了解决多用户同时走访Docker时产生的安全问题,Docker设计了走访控制插件(Authorization Plugin,见官方文档)这一机制,通过对Docker要求进行过滤,来完成对Docker的权限治理。

这里需要注意,Docker并没有本人设计一套权限治理机制,而是设计了一套权限治理插件的机制,允许第三方的开发者自行设计权限治理的架构、模型、策略格式,然后通过统一的插件接口接入Docker,为Docker提供权限治理的服务,无比的天真。这个插件机制的设计思惟实在很简单,就是每一当Docker daemon接收到一个走访要求时,就会把这个要求的context信息(走访者、资源、动作三元组)发送给Authorization Plugin,Authorization Plugin本人判定一下是否允许这个要求,然后向Docker daemon返归效果,allow or deny,即是否允许这个要求的走访。详细的插件接口格式,人人可以参考上面的文档,这里再也不赘述。

casbin-logo.png

Casbin(https://github.com/casbin/casbin)作为目前Golang说话中最支流的走访控制、权限治理开源库,也完成了一个Docker的Authorization Plugin,鸣做:Casbin-authz-plugin

这里起首先容一下Casbin项目。Casbin是一个国产开源项目,专注于解决Go说话中的权限治理问题。Casbin由北京大学罗杨博士在2017年4月提议,罗杨博士的研究方向为云计算走访控制,目前已发表数十篇相干学术论文,曾经在ICWS、IEEE CLOUD、ICICS等多个顶级学术会议进行论文宣讲。Casbin项目则是其研究成果的落地。目前经过一年多的发铺,Casbin在GitHub上已经2500+ stars,黑客网,已成为Go说话Access Control领域排名第一的项目。下面则是Casbin相干链接:

源码:https://github.com/casbin/casbin 
官网:http://casbin.org/ 
在线策略编辑器:http://casbin.org/editor/

下面列举了Casbin项目首要的一些特点:

支持多说话:Go + Java,Java版本的鸣做jCasbin,保持与Casbin一致的接口;

获美国身份治理与认证创业公司 Auth0 ([2018年5月17日,该公司获得D轮5500万美元融资];(http://www.yidianzixun.com/article/0J5VMI4t))的赞助,并且有进一步合作意向;

支持多种走访控制模型:ACL、RBAC、ABAC、RESTful;

支持16种策略存储插件(Storage Adapter);

支持2种分布式插件(Watcher);

支持4种角色治理插件(Role Manager)。

目前,Casbin已在190+个开源项目获得应用,知名的有:

Intel的RMD项目:Intel公司的资源治理服务,用来治理Intel CPU相干的硬件资源;

VMware的Dispatch项目:部署Serverless服务的应用框架平台;

法国电信公司Orange的Gobis项目:轻量级API网关项目。

更具体的应用情形,人人可以在这里看到:https://github.com/casbin/casbin#our-adopters。另外,在闭源、商业项目上的使用,因为没法统计,并没有计入。然则据作者了解,Casbin已经在Cisco(思科)、Verizon(美国电信)等公司得到大规模实际应用。

以上是对Casbin项目的先容,本文下脸部分首要先容Casbin的Docker插件的用法。

举个例子:当你执行docker images这条命令时,实在你是执行了一条CLI命令,以images为参数执行了docker这个client。这个client会向Docker daemon发送一个类HTTP要求:

/v1.27/images/json, GET

其中/v1.27/images/json就是走访的URL路径,GET就是HTTP method。Casbin插件通过查询安全策略可以帮助你决定是否允许某用户以GET动作走访/v1.27/images/json路径。实际上,Casbin插件的本质就是做如许一个简单的事情。那么,该怎么样判定是否允许某个要求呢,这个详细逻辑就要触及到Casbin的道理了,在Casbin插件的例子中,提供了一个策略文件:basic_policy.csv,这个文本文件只含有一行内容:

p, /v1.27/images/json, GET

下面是一个禁止走访的例子:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              48b5124b2768        3 months ago        1.84 kB

$ docker info
Error response from daemon: authorization denied by plugin casbin-authz-plugin: Access denied by casbin plugin

我们可以看到,当执行docker info命令的时辰,提示了禁止走访错误。这就说明,我们的Casbin插件产生了结果。

Casbin实在遥比上面的例子复杂,起首,可设置的内容就有两大块:模型文件以及策略文件。在Casbin插件中,模型文件的内容是:

[request_definition]
r = obj, act

[policy_definition]
p = obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.obj == p.obj && r.act == p.act

策略文件的内容是:

p, /_ping, GET
p, /v1.27/images/json, GET

模型文件,可以理解为一套Casbin本人的脚本说话,被Casbin诠释执行,作为权限判定的逻辑。策略文件则提供详细的安全策略的文本。你可以把Casbin理解为一个程序,那么模型文件就是这个程序的代码段,策略文件就是这个程序的数据段。代码在执行过程中,接受输入,并对数据进行读写,终极产生输出,实在本质上Casbin的走访控制就是如许一个过程。

Casbin插件的装置步骤因为比较琐碎,这里就不在先容了,人人可以去GitHub源码中查看README文档即可:https://github.com/casbin/casbin-authz-plugin

最后,列举一下使用Casbin插件进行Docker权限治理的好处:

Casbin权限治理天真度高,可定制性强,几乎能餍足任何苛刻、复杂的权限治理需求,如许就省的开发者本人编写一套权限治理的逻辑了,方便开发者把精力集中在其他营业逻辑的部分。

Casbin有完美的测试用例,产生的效果正确性有保障。本人手写权限控制的逻辑,则难免会有失足。

Casbin应用广泛,基本支持了所有的Golang Web框架,如Beego、Gin、Revel、Echo等等。同时Casbin还包含Java版本:jCasbin以及PHP版本:PHP-Casbin。帮助开发者完成:learn once, use everywhere

Casbin支持图形化的Web策略编辑:Casbin Online Editor (http://casbin.org/editor/)。其支持对Casbin模型以及策略的编辑,并且支持语法高亮、自动实现、实时语法检查,在线摹拟执行等多个功能,基本达到了IDE的级别,对开发者无比友爱。相比传统的安全策略复杂的设置过程,通过该GUI界面进行策略设计、编辑,可以明明降低学习Casbin难度。下面是Casbin Online Editor界面的截图:

20180528232009331.jpg

最后,欢迎人人留言讨论,感谢!

*

您可能还会对下面的文章感兴趣: