Authorization of Kubernetes
K8s-authz是一个基于Casbin的Kubernetes(k8s)授权中间件,利用RBAC(基于角色的访问控制)和ABAC(基于属性的访问控制)进行策略执行。 此中间件与K8s验证准入webhook集成,以验证Casbin为每个向K8s资源发出的请求定义的策略。 自定义准入控制器使用ValidatingAdmissionWebhook
在Kubernetes中注册,以对API服务器转发的请求对象进行验证,并提供一个响应,指示是否应允许或拒绝请求。
为确定何时将传入请求发送到准入控制器,已实施了一个验证webhook。 此webhook代理对任何类型的K8s资源或子资源的请求,并执行策略验证。 只有在Casbin执行器授权的情况下,用户才被允许对这些资源执行操作。 执行器检查用户在策略中定义的角色。 K8s集群是此中间件的部署目标。
要求
在继续之前,请确保您有以下内容:
- 正在运行的Kubernetes集群。 您可以使用Docker设置本地集群,或在您的服务器上设置完整的Kubernetes生态系统。 有关在Windows上设置本地Kubernetes集群的详细说明,请参阅此指南,有关在Linux上设置集群的说明,请参阅此指南。
- Kubectl CLI。 有关在Windows上安装Kubectl的说明可以在这里找到,对于Linux,可以在这里找到。
- OpenSSL
使用
按照以下步骤使用K8s-authz:
使用OpenSSL为每个用户生成证书和密钥。 运行下面的脚本:
./gen_cert.sh
通过运行以下命令手动从Dockerfile构建Docker镜像。 记得在命令和部署文件中相应地更改构建版本。
docker build -t casbin/k8s_authz:0.1 .
在model.conf和policy.csv文件中定义Casbin策略。 有关这些策略如何工作的更多信息,请参阅文档。
通过运行以下命令在Kubernetes集群上部署验证控制器和webhook:
kubectl apply -f deployment.yaml
对于生产服务器,建议创建一个Kubernetes
secret
来保护证书:kubectl create secret generic casbin -n default \
--from-file=key.pem=certs/casbin-key.pem \
--from-file=cert.pem=certs/casbin-crt.pem
现在,服务器应该已经启动并运行,准备验证对K8s资源的请求并相应地执行策略。