Kuberenetes + Casbin 权限插件: K8s-Gatekeeper
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