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.