Zum Hauptinhalt springen

Authorization of Kubernetes

K8s-authz ist eine auf Casbin basierende Kubernetes (k8s) Autorisierungsmiddleware, die RBAC (Role-Based Access Control) und ABAC (Attribute-Based Access Control) zur Durchsetzung von Richtlinien nutzt. Diese Middleware integriert sich mit dem K8s Validierungs-Admission-Webhook, um die von Casbin definierten Richtlinien für jede Anfrage an K8s-Ressourcen zu validieren. Benutzerdefinierte Zulassungscontroller werden mit Kubernetes unter Verwendung des ValidatingAdmissionWebhook registriert, um Validierungen an Anfrageobjekten durchzuführen, die vom API-Server weitergeleitet wurden, und eine Antwort zu liefern, ob die Anfrage zugelassen oder abgelehnt werden soll.

Um zu bestimmen, wann eingehende Anfragen an den Zulassungscontroller gesendet werden sollen, wurde ein Validierungs-Webhook implementiert. Dieser Webhook leitet Anfragen für jede Art von K8s-Ressource oder Unterressource weiter und führt eine Richtlinienüberprüfung durch. Benutzer dürfen nur dann Operationen an diesen Ressourcen durchführen, wenn sie vom Casbin-Durchsetzer autorisiert sind. Der Durchsetzer überprüft die Rollen des Benutzers, wie sie in den Richtlinien definiert sind. Das K8s-Cluster ist das Einsatzziel für diese Middleware.

Anforderungen

Stellen Sie vor dem Fortfahren sicher, dass Sie folgendes haben:

  • Ein laufendes Kubernetes-Cluster. Sie können ein lokales Cluster mit Docker einrichten oder ein komplettes Kubernetes-Ökosystem auf Ihrem Server einrichten. Für detaillierte Anweisungen, beziehen Sie sich auf diesen Leitfaden zur Einrichtung eines lokalen Kubernetes-Clusters auf Windows oder diesen Leitfaden zur Einrichtung eines Clusters auf Linux.
  • Kubectl CLI. Anweisungen zur Installation von Kubectl auf Windows finden Sie hier, und für Linux hier.
  • OpenSSL

Verwendung

Befolgen Sie diese Schritte, um K8s-authz zu verwenden:

  1. Generieren Sie Zertifikate und Schlüssel für jeden Benutzer mit OpenSSL. Führen Sie das untenstehende Skript aus:

    ./gen_cert.sh
  2. Erstellen Sie das Docker-Image aus der Dockerfile manuell, indem Sie den folgenden Befehl ausführen. Vergessen Sie nicht, die Build-Version im Befehl und in der Bereitstellungs-Datei entsprechend zu ändern.

    docker build -t casbin/k8s_authz:0.1 .
  3. Definieren Sie die Casbin-Richtlinien in den model.conf und policy.csv Dateien. Für weitere Informationen darüber, wie diese Richtlinien funktionieren, verweisen Sie auf die Dokumentation.

  4. Vor der Bereitstellung können Sie die Ports in der main.go Datei sowie in der Validierungs-Webhook-Konfigurations-Datei basierend auf Ihren spezifischen Anforderungen ändern.

  5. Bereitstellen des Validierungscontrollers und des Webhooks auf dem Kubernetes-Cluster durch Ausführen des folgenden Befehls:

    kubectl apply -f deployment.yaml
  6. Für einen Produktionsserver wird empfohlen, ein Kubernetes secret zu erstellen, um die Zertifikate zu sichern:

    kubectl create secret generic casbin -n default \
    --from-file=key.pem=certs/casbin-key.pem \
    --from-file=cert.pem=certs/casbin-crt.pem
  7. Nach Abschluss der oben genannten Schritte müssen Sie das Zertifikatsverzeichnis in main.go und den Manifesten mit dem Verzeichnis des erstellten secret aktualisieren.

Jetzt sollte der Server hochgefahren und betriebsbereit sein, bereit, Anfragen an K8s-Ressourcen zu validieren und Richtlinien entsprechend durchzusetzen.