Passer au contenu principal

Authorization of Kubernetes

K8s-authz est un middleware d'autorisation Kubernetes (k8s) basé sur Casbin qui utilise RBAC (Contrôle d'Accès Basé sur les Rôles) et ABAC (Contrôle d'Accès Basé sur les Attributs) pour l'application des politiques. Ce middleware s'intègre avec le webhook d'admission de validation K8s pour valider les politiques définies par Casbin pour chaque requête faite aux ressources K8s. Les contrôleurs d'admission personnalisés sont enregistrés avec Kubernetes en utilisant le ValidatingAdmissionWebhook pour effectuer des validations sur les objets de requête transmis par le serveur API et fournir une réponse indiquant si la requête doit être autorisée ou rejetée.

Pour déterminer quand envoyer les requêtes entrantes au contrôleur d'admission, un webhook de validation a été mis en œuvre. Ce webhook proxy les demandes pour tout type de ressource ou sous-ressource K8s et effectue la vérification des politiques. Les utilisateurs ne sont autorisés à effectuer des opérations sur ces ressources que s'ils sont autorisés par l'exécuteur Casbin. L'exécuteur vérifie les rôles de l'utilisateur tels que définis dans les politiques. Le cluster K8s est la cible de déploiement pour ce middleware.

Exigences

Avant de continuer, assurez-vous d'avoir ce qui suit :

  • Un cluster Kubernetes en cours d'exécution. Vous pouvez configurer un cluster local en utilisant Docker ou configurer un écosystème Kubernetes complet sur votre serveur. Pour des instructions détaillées, reportez-vous à ce guide pour configurer un cluster Kubernetes local sur Windows ou ce guide pour configurer un cluster sur Linux.
  • Kubectl CLI. Les instructions pour installer Kubectl sur Windows se trouvent ici, et pour Linux ici.
  • OpenSSL

Utilisation

Suivez ces étapes pour utiliser K8s-authz :

  1. Générez des certificats et des clés pour chaque utilisateur en utilisant OpenSSL. Exécutez le script ci-dessous :

    ./gen_cert.sh
  2. Construisez l'image Docker à partir du Dockerfile manuellement en exécutant la commande suivante. N'oubliez pas de changer la version de construction dans la commande et dans le fichier de déploiement en conséquence.

    docker build -t casbin/k8s_authz:0.1 .
  3. Définissez les politiques Casbin dans les fichiers model.conf et policy.csv. Pour plus d'informations sur le fonctionnement de ces politiques, reportez-vous à la documentation.

  4. Avant de déployer, vous pouvez modifier les ports dans le fichier main.go, ainsi que dans le fichier de configuration du webhook de validation file, en fonction de vos besoins spécifiques.

  5. Déployez le contrôleur de validation et le webhook sur le cluster Kubernetes en exécutant la commande suivante :

    kubectl apply -f deployment.yaml
  6. Pour un serveur de production, il est recommandé de créer un secret Kubernetes pour sécuriser les certificats :

    kubectl create secret generic casbin -n default \
    --from-file=key.pem=certs/casbin-key.pem \
    --from-file=cert.pem=certs/casbin-crt.pem
  7. Après avoir complété les étapes ci-dessus, vous devez mettre à jour le répertoire des certificats dans main.go et les manifestes avec le répertoire du secret créé.

Maintenant, le serveur devrait être opérationnel, prêt à valider les requêtes faites aux ressources K8s et à appliquer les politiques en conséquence.