Passer au contenu principal

Autorisation de Kubernetes

K8s-authz est un middleware d'autorisation Kubernetes (k8s) RBAC & ABAC basĂ© sur Casbin. Ce middleware utilise le webhook de validation K8s pour vĂ©rifier les politiques dĂ©finies par casbin, pour chaque requĂȘte des ressources k8s. Ces contrĂŽleurs d'admission personnalisĂ©s effectuent une sorte de validation sur l'objet de requĂȘte qui a Ă©tĂ© transfĂ©rĂ© par le serveur api et basĂ© sur une logique, renvoie une rĂ©ponse au serveur api qui contient des informations sur l'autoriser ou rejeter la requĂȘte. Ces contrĂŽleurs sont enregistrĂ©s auprĂšs de Kubernetes en utilisant le ValidatingAdmissionWebhook.

Le serveur API K8s a besoin de savoir quand envoyer la requĂȘte entrante Ă  notre contrĂŽleur d'entrĂ©e. Pour cette partie nous avons dĂ©fini un webhook de validation qui reprĂ©senterait les requĂȘtes pour n'importe quel type de ressource/sous-ressource K8s et effectuerait une vĂ©rification de la politique dessus. L'utilisateur ne serait autorisĂ© Ă  effectuer les opĂ©rations sur ces ressources, que si le responsable de casbin l'autorise. Le policier vĂ©rifie les rĂŽles de l'utilisateur dĂ©finis dans les politiques. Ce middleware serait dĂ©ployĂ© sur le cluster K8s.

Exigences​

Avant de continuer, assurez-vous d'avoir les éléments suivants-

  • Un cluster k8s en cours d'exĂ©cution. Vous pouvez soit exĂ©cuter les clusters via Docker en l'activant sur Docker Desktop ou vous pouvez configurer l'Ă©cosytem K8s complet localement ou sur votre serveur. Vous pouvez suivre ce guide dĂ©taillĂ© pour configurer localement le cluster k8s sous Windows ou ce guide si vous voulez installer Linux.
  • CLI Kubectl Ceci est le guide pour le configurer sur Windows et ce guide pour Linux.
  • OpenSSL

Usage​

  • GĂ©nĂ©rer les certificats et clĂ©s pour chaque utilisateur en utilisant openssl et en exĂ©cutant le script suivant :-
./gen_cert.sh
  • Construire l'image du docker Ă  partir du Dockerfile manuellement en exĂ©cutant la commande suivante, puis changer la version de compilation ici et au fichier de dĂ©ploiement , selon les constructions.
 docker build -t casbin/k8s_authz:0.1 .
  • DĂ©finissez les politiques casbin dans le model.conf et policy.csv. Vous pouvez consulter les documents pour en savoir plus sur le fonctionnement de ces politiques.

  • Avant le dĂ©ploiement, vous pouvez modifier les ports dans main.go et Ă©galement dans le fichier de configuration de webhook de validation selon votre utilisation.

  • DĂ©ployer le contrĂŽleur de validation et le webhook sur le cluster k8s en exĂ©cutant :-

kubectl applique -f deployment.yaml
  • Pour un serveur de production, nous devons crĂ©er un secret k8s pour placer les certificats Ă  des fins de sĂ©curitĂ©.
kubectl crée un casbin générique secret par défaut \
--from-file=key.pem=certs/casbin-key.pem \
--from-file=cert.pem=certs/casbin-crt.pem
  • Une fois, cette partie est faite, nous devons changer le rĂ©pertoire des certificats dans main. o puis dans manifeste avec celui du secret.

Maintenant, le serveur devrait s'exĂ©cuter et ĂȘtre prĂȘt Ă  valider les requĂȘtes pour les opĂ©rations sur les ressources k8s.