Casbin K8s-Gatekeeper

Casbin K8s-Gatekeeper 是一个集成了 Casbin 作为访问控制工具的 Kubernetes Admission Webhook. 使用 Casbin K8s-Gatekeeper 可以在不编写任何代码,只使用数行 Casbin 的 ACL(Access Control List)语言编写 model 和 policy ,即可建立灵活的规则,实现对 K8s 资源的增删改查操作的准入和拦截。Casbin K8s-Gatekeeper 由 Casbin 社区开发与维护,项目传送门https://github.com/casbin/k8s-gatekeeper

Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。Casbin ACL 的编写十分简单易懂,请访问https://casbin.org/docs/en/overview获取更多信息。Casbin 已经成为 Golang ACL 模型事实上的标准。Casbin K8s-Gatekeeper 使用的 ACL 模型便是 Casbin 。

一个简单的示例

例如,您无需编写任何代码,只需以下几行 Casbin ACL 语言即可实现不允许使用带特定 tag 的镜像创建 pod

Model:


[request_definition]
r =  obj

[policy_definition]
p =  obj,eft

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

[matchers]
m = r.obj.Request.Namespace == "default" && r.obj.Request.Resource.Resource =="deployments" && \
contain(split(accessWithWildcard(${OBJECT}.Spec.Template.Spec.Containers , "*", "Image"),":",1) , p.obj)

Policy:

p, "1.14.1",deny

上面的 Casbin Model&Policy 看起来似乎晦涩难懂,实际十分简单易学,10min 内即可快速上手。教程在这里https://casbin.org/docs/en/syntax-for-models

为什么使用 Casbin K8s-Gatekeeper

Casbin K8s-Gatekeeper 具有以下优点:

  • 简单易用,写几行 ACL 总比写一堆代码来实现要省事得多
  • 允许配置热更新。如果用编写代码实现 Admission Webhook 准入控制,每次规则变更你必须重新上线一个新的 Webhook ;而使用 K8s-Gatekeeper 则没有上述烦恼,只需一到两条 kubectl 命令,准入规则即可热更新
  • Casbin K8s-Gatekeeper 十分灵活强大,规则可以任意制定,凡是可以从 kubectl get 看到的某种 K8s 资源的属性,都可以作为 ACL 准入规则使用的属性
  • 从上层屏蔽了复杂的 K8s Admission Webhook 实现;相比于编写代码实现功能,你甚至不需要真正了解 K8s Admission Webhook 是什么,如何工作,怎么配置,只需要知道 Casbin K8s-Gatekeeper 可以实现对 K8s 资源的增删改查操作的准入和拦截,并编写 Casbin ACL ,即可完成你的目标。全世界都知道 K8s 复杂难学,使用 Casbin K8s-Gatekeeper 你就不用花时间学那么多了
  • 有人维护。Casbin K8s-Gatekeeper 由 Casbin 社区开发与维护,搞不懂的可以在 Github, QQ 联系我们,会有人为您解答疑问

    联系我们

  • 前往 github 通过 issue 联系我们:https://github.com/casbin/k8s-gatekeeper
  • QQ 群 546057381
  • gitter casbin/Lobby - Gitter