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 :
Générez des certificats et des clés pour chaque utilisateur en utilisant OpenSSL. Exécutez le script ci-dessous :
./gen_cert.sh
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 .
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.
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.
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
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.pemAprè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.