跳转至主要内容

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:

  1. 使用OpenSSL为每个用户生成证书和密钥。 运行下面的脚本:

    ./gen_cert.sh
  2. 通过运行以下命令手动从Dockerfile构建Docker镜像。 记得在命令和部署文件中相应地更改构建版本。

    docker build -t casbin/k8s_authz:0.1 .
  3. model.confpolicy.csv文件中定义Casbin策略。 有关这些策略如何工作的更多信息,请参阅文档

  4. 在部署之前,您可以根据您的特定要求,在main.go文件以及验证webhook配置文件中修改端口。

  5. 通过运行以下命令在Kubernetes集群上部署验证控制器和webhook:

    kubectl apply -f deployment.yaml
  6. 对于生产服务器,建议创建一个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
  7. 完成上述步骤后,您需要更新main.gomanifests中的证书目录,以及创建的secret的目录。

现在,服务器应该已经启动并运行,准备验证对K8s资源的请求并相应地执行策略。