RBAC in Kubernetes überprüfen

Ursprünglicher Autor: Tom Gallacher
  • Übersetzung

Das Sichern des Kubernetes-Clusters ist eine Sache, die Aufrechterhaltung der Sicherheit bleibt jedoch eine Herausforderung. Kubernetes wurden jedoch neue Tools hinzugefügt: Jetzt ist es viel einfacher, beides zu tun.


Bild


Mit Kubernetes (seit Version 1.6) wurde das Konzept der rollenbasierten Zugriffssteuerung (RBAC) eingeführt, mit der Administratoren Einschränkungsrichtlinien für Clusterbenutzer definieren können. Das heißt, Sie erstellen einen Benutzer mit eingeschränktem Zugriff: Beschränken Sie den Benutzerzugriff auf Ressourcen wie Geheimnisse oder bestimmte Namespaces.


In diesem Beitrag werden wir nicht verstehen, wie RBAC implementiert wird. Es gibt genügend anständige Quellen, in denen dieses Thema von und nach besprochen wird:



Es ist besser, sich darauf zu konzentrieren, wie Sie sicherstellen, dass die Anforderungen Ihres Unternehmens erfüllt werden, und zu prüfen, ob die ausgeführten RBAC-Objekte überprüft werden müssen, um festzustellen, ob sie ihre Funktionen erfüllen.


Unser Drehbuch


Einige Organisationen akzeptieren mehrere Gruppen, um mit dem neuen Kubernetes-Cluster zu arbeiten. Es gibt eine Anforderung: Sie können sich nicht in die Bereitstellung einer Nachbargruppe einmischen, sodass keine unvorhergesehenen Probleme oder Ausfallzeiten zwischen den Gruppen auftreten.


Der Eigentümer des Clusters hat RBAC in den Cluster implementiert und damit den Zugriff auf einen bestimmten Namespace eingeschränkt. Die erste Überprüfung ergab: Gruppen können die Pods des anderen nicht im Namespace anzeigen.


Eine Woche ist vergangen. Der Besitzer des Clusters hat festgestellt, dass ein Benutzer aus einem isolierten Namespace Geheimnisse aus einem anderen Namespace liest. Wie so Er hat RBAC benutzt!


Ich habe es angewendet, aber wie beim Arbeiten mit Code muss das System auf Übereinstimmung mit dem gewünschten Ergebnis getestet werden. Es ist gut, dass das Kubernetes-CLI-Tool kubectleine Reihe von Tools zum Überprüfen der RBAC-Konfiguration bereitstellt.kubectl auth can-i


Kann ich („
can-iDarf ich?“) Mit Hilfe der API wird einfach geprüft, ob eine Aktion ausgeführt werden kann. Er verwendet die folgenden Parameter: kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL]. Jetzt kann der aktuelle Benutzer prüfen, ob ihm eine bestimmte Aktion zur Verfügung steht. Lass uns gehen:


kubectl auth can-i create pods

Dies sollte eine Ja- oder Nein-Antwort mit dem entsprechenden Beendigungscode zurückgeben.


Wenn wir jedoch versuchen, die Rechte eines anderen Benutzers zu überprüfen, stoßen wir auf ein Problem: Der Benutzer, unter dem wir im Cluster autorisiert sind, wird in der Konfigurationsdatei angegeben ./kube/config, und separate Konfigurationen zum Testen einzelner Benutzer sind unpraktisch. Glücklicherweise kommt Kubernetes wieder zu Hilfe: Es kann Benutzer mit --as=und Tags simulieren --as-group=.


Aktualisieren Sie den Befehl und verwenden Sie die Simulation eines anderen Benutzers:


kubectl auth can-i create pods --as=me

Wir sollten sehen, dass 1"no" mit dem Exit-Code zurückgegeben wird .


Und das ist großartig, da wir jetzt eine Reihe von Befehlen haben, mit denen wir überprüfen können, ob ein Benutzer oder eine Gruppe von Benutzern Zugriff auf Kubernetes-Ressourcen hat - von der Anzeige von Pods bis zum Löschen von Geheimnissen.


Automatisierung


Zum Stoppen ist es jedoch noch zu früh: Jetzt können wir eine Testsequenz implementieren, die die Liste der Anforderungen beschreibt und als Teil der CD-Pipeline ausführt. Zur Sache!


Es gibt eine große Auswahl, es gibt genügend zu implementierende Sprachen: beginnend mit Ava und Mocha in JavaScript und endend mit Rspec. In diesem Fall implementiere ich das Bash-Test-Framework Bats .


Unten sehen Sie ein Beispiel für die Durchführung eines Tests. Es überprüft die Funktionsweise von RBAC-Regeln und ermöglicht einem Benutzer aus einer Gruppe, die Anzahl der ausgeführten Herde im Namespace zu ändern. Es wird ausgeführt, wenn das Attribut "ausführbar" gesetzt wurde. Oder - mit bats filename.


#!/usr/bin/env bats
@test "Team namespaces can scale deployments within their own namespace" {
    run kubectl auth can-i update deployments.apps --subresource="scale" --as-group="$group" --as="$user" -n $ns 
    [ "$status" -eq 0 ]
    [ "$output" == "yes" ]
  done
}

Befehle --asund --as-grouperfordern die Verwendung der folgenden RBAC-Regeln:


rules:
- apiGroups:
  - authorization.k8s.io
  resources:
  - selfsubjectaccessreviews
  - selfsubjectrulesreviews
  verbs:
  - create

Mit der folgenden einfachen Methode können Sie die RBAC-Regeln in Kubernetes überprüfen. Durch die Aufnahme in die Kubernetes-Pipeline werden wir die RBAC-Politik erheblich stärken. Die Methode wurde in der Praxis getestet: Änderungen, die gegen Zugriffsrichtlinien verstoßen, werden viel schneller erkannt!


Vielen Dank, dass Sie sich die Zeit genommen haben, diesen Beitrag zu lesen!


Jetzt auch beliebt: