Ir al contenido principal

Authorization of Kubernetes

K8s-authz es un middleware de autorización de Kubernetes (k8s) basado en Casbin que utiliza RBAC (Control de Acceso Basado en Roles) y ABAC (Control de Acceso Basado en Atributos) para la aplicación de políticas. Este middleware se integra con el webhook de admisión de validación de K8s para validar las políticas definidas por Casbin para cada solicitud hecha a los recursos de K8s. Los controladores de admisión personalizados se registran en Kubernetes utilizando el ValidatingAdmissionWebhook para realizar validaciones en los objetos de solicitud reenviados por el servidor API y proporcionar una respuesta que indica si la solicitud debe ser permitida o rechazada.

Para determinar cuándo enviar solicitudes entrantes al controlador de admisión, se ha implementado un webhook de validación. Este webhook reenvía solicitudes para cualquier tipo de recurso o sub-recurso de K8s y realiza la verificación de políticas. Los usuarios solo están autorizados a realizar operaciones en estos recursos si están autorizados por el ejecutor de Casbin. El ejecutor verifica los roles del usuario según se definen en las políticas. El clúster de K8s es el objetivo de despliegue para este middleware.

Requisitos

Antes de continuar, asegúrese de tener lo siguiente:

  • Un clúster de Kubernetes en funcionamiento. Puede configurar un clúster local usando Docker o configurar un ecosistema completo de Kubernetes en su servidor. Para instrucciones detalladas, consulte esta guía para configurar un clúster local de Kubernetes en Windows o esta guía para configurar un clúster en Linux.
  • CLI de Kubectl. Las instrucciones para instalar Kubectl en Windows se pueden encontrar aquí, y para Linux aquí.
  • OpenSSL

Uso

Siga estos pasos para usar K8s-authz:

  1. Genere certificados y claves para cada usuario utilizando OpenSSL. Ejecute el siguiente script:

    ./gen_cert.sh
  2. Construya la imagen de Docker desde el Dockerfile manualmente ejecutando el siguiente comando. Recuerde cambiar la versión de construcción en el comando y en el archivo de despliegue file correspondientemente.

    docker build -t casbin/k8s_authz:0.1 .
  3. Defina las políticas de Casbin en los archivos model.conf y policy.csv. Para obtener más información sobre cómo funcionan estas políticas, consulte la documentación.

  4. Antes de desplegar, puede modificar los puertos en el archivo main.go, así como en la configuración del webhook de validación file, basado en sus requisitos específicos.

  5. Despliegue el controlador de validación y el webhook en el clúster de Kubernetes ejecutando el siguiente comando:

    kubectl apply -f deployment.yaml
  6. Para un servidor de producción, se recomienda crear un secret de Kubernetes para asegurar los certificados:

    kubectl create secret generic casbin -n default \
    --from-file=key.pem=certs/casbin-key.pem \
    --from-file=cert.pem=certs/casbin-crt.pem
  7. Después de completar los pasos anteriores, necesita actualizar el directorio de certificados en main.go y los manifests con el directorio del secret creado.

Ahora, el servidor debería estar en funcionamiento, listo para validar solicitudes hechas a los recursos de K8s y aplicar las políticas correspondientemente.