专栏首页FreeBuf基于Casbin的Docker权限管理访问控制插件

基于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(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界面的截图:

最后,欢迎大家留言讨论,谢谢!

*本文作者:hsluoyz,转载请注明来自FreeBuf.COM

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 曝泰国最大的移动运营商泄露83亿条用户数据记录

    昨日,安全研究人员Justin Paine在一篇文章中表明自己发现了一个公开的ElasticSearch数据库,而该数据背后直指泰国一家移动网络运营商分部AIS...

    FB客服
  • 如何入侵大疆Phantom 3无人机

    最近,我有了一些空闲时间可以与我的飞行“精灵”一起玩,但不是你想的那种玩,我是在想着如何能够破解这款大疆Phantom 3无人机。 这是我第一次操作无人机或类似...

    FB客服
  • Mac终端利器 iTerm2被曝严重的RCE漏洞,至少已存在7年(含PoC视频)

    由Mozilla开源支持计划(MOSS)资助、网络安全公司Radically Open Security(ROS)开展的一次独立安全审计结果显示,iTerm 2...

    FB客服
  • 让机器人洗衣服,没有想象中那么简单

    镁客网
  • 刘金玉的零基础VB教程057期:vb6中的try catch finally异常捕获机制

    在程序中肯定会有很多的bug,有些bug认为可以发现并且弥补,但是有些bug很多人虽然能发现,但是却无法弥补的,因为在系统运行的时候,其实会有很多无法预料的情况...

    刘金玉编程
  • django-1-框架介绍

    用django框架做web开发必须要用到python虚拟环境,而且一个虚拟环境只能创建一个django项目,如果创建多个django项目的画将会出现一些莫名奇妙...

    py3study
  • 一日一技:如何更好地理解归并排序?

    在昨天的文章里面,我们已经知道,可以使用 heapq.merge把两个有序列表合并成新的有序列表。

    青南
  • CVPR 2018 | 中科大&微软提出立体神经风格迁移模型,可用于3D视频风格化

    选自arXiv 作者:Dongdong Chen等 机器之心编译 参与:Nurhachu Null、刘晓坤 近年来,在自然图像上再现名画风格的风格转换技术成为内...

    机器之心
  • 系统伪激活查询

    按住Win+R打开运行窗口,输入 slmgr.vbs -xpr 回车,查看电脑系统激活天数,查了下自己的电脑,发现是临时激活的。

    李文华
  • 赛灵思FPGA出现严重漏洞!

    波鸿鲁尔大学霍斯特·戈茨IT安全研究所和马克斯·普朗克网络安全与隐私保护研究所的研究人员在一项联合研究项目中发现,FPGA中隐藏了一个关键的安全漏洞,该漏洞会影...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券