In diesem Thema wird erläutert, wie Sie die rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) in Tanzu Kubernetes Grid konfigurieren.
Wenn Sie beabsichtigen, standardmäßige, nicht administrative kubeconfig
-Dateien für den Clusterzugriff zu verwenden, müssen Sie die RBAC-Autorisierung konfigurieren, nachdem Sie die Identitätsverwaltung aktiviert und konfiguriert haben. Weitere Informationen zu kubeconfig
-Dateien finden Sie nachstehend unter Administrative und nicht administrative kubeconfig
-Dateien.
Um die RBAC-Autorisierung zu konfigurieren, erstellen Sie eine oder mehrere Rollenbindungen für jeden Verwaltungs- und Arbeitslastcluster, in dem Sie standardmäßige, nicht administrative kubeconfig
-Dateien verwenden möchten:
Weitere Informationen zu Rollenbindungen finden Sie nachstehend unter Rollen und Rollenbindungen.
kubeconfig
-DateienUm Benutzern Zugriff auf einen Verwaltungs- oder Arbeitslastcluster zu gewähren, generieren Sie eine kubeconfig
-Datei und geben Sie die Datei dann für diese Benutzer frei. Wenn Sie ihnen die Admin-kubeconfig
für den Cluster zur Verfügung stellen, haben sie Vollzugriff auf den Cluster und müssen nicht authentifiziert werden. Wenn Sie Benutzern jedoch die standardmäßige, nicht administrative kubeconfig
zur Verfügung stellen, müssen sie über ein Benutzerkonto in Ihrem OIDC- oder LDAP-Identitätsanbieter verfügen, und Sie müssen RBAC im Cluster konfigurieren, um dem vorgesehenen Benutzer Zugriffsberechtigungen zu gewähren.
Um eine kubeconfig
-Datei für einen Verwaltungs- oder Arbeitslastcluster zu generieren, führen Sie tanzu mc kubeconfig get
für den Verwaltungscluster oder tanzu cluster kubeconfig get
für den Arbeitslastcluster aus. Wenn Sie einen dieser Befehle mit oder ohne die Option --admin
ausführen, funktioniert der Befehl wie folgt:
--admin
generiert der Befehl eine Admin-kubeconfig
, die eingebettete Anmeldedaten enthält. Mit dieser admin
-Version der kubeconfig
haben alle Benutzer, für die Sie die Datei freigeben, Vollzugriff auf den Cluster, und die Identitätsanbieter-Authentifizierung wird umgangen.--admin
generiert der Befehl eine standardmäßige, nicht administrative kubeconfig
, die Benutzer zur Authentifizierung bei einem externen Identitätsanbieter auffordert. Der Identitätsanbieter überprüft dann die Identität des Benutzers, bevor der Benutzer auf die Ressourcen des Clusters zugreifen kann.Weitere Informationen zu diesen Befehlen finden Sie unter:
Eine Rolle definiert einen Satz von Berechtigungen. Sie können eine Rolle innerhalb eines bestimmten Namespace definieren, indem Sie eine Role
erstellen, oder eine clusterweite Rolle, indem Sie eine ClusterRole
erstellen. Um einem Benutzer oder einer Benutzergruppe die in dieser Rolle definierten Berechtigungen zu gewähren, müssen Sie eine Rollenbindung erstellen.
Ressource | Geltungsbereich | Beschreibung |
---|---|---|
Role |
Namespace | Definiert Berechtigungen, die in einer Namespace-spezifischen RoleBinding verwendet werden können. |
ClusterRole |
Cluster | Definiert Berechtigungen, die in einer ClusterRoleBinding oder einer Namespace-spezifischen RoleBinding verwendet werden können. |
RoleBinding |
Namespace | Gewährt Berechtigungen innerhalb eines bestimmten Namespace. Kann auf eine Role oder eine ClusterRole verweisen. |
ClusterRoleBinding |
Cluster | Gewährt Berechtigungen für alle Namespaces im Cluster. Kann nur auf eine ClusterRole verweisen. |
Zu den Standardbenutzerrollen gehören:
cluster-admin
: Vollzugriff auf den Cluster. Bei Verwendung in einer RoleBinding
gewährt diese Rolle Vollzugriff auf jede Ressource in dem Namespace, der in der Bindung angegeben ist.admin
: Administratorzugriff auf die meisten Ressourcen in einem Namespace. Kann Rollen und Rollenbindungen innerhalb des Namespace erstellen und ändern.edit
: Lese-/Schreibzugriff auf die meisten Objekte in einem Namespace, z. B. Bereitstellungen, Dienste und Pods. Rollen und Rollenbindungen können nicht angezeigt, erstellt oder geändert werden.view
: Schreibgeschützter Zugriff auf die meisten Objekte in einem Namespace. Rollen und Rollenbindungen können nicht angezeigt, erstellt oder geändert werden.Weitere Informationen zu diesen Rollen finden Sie unter Verwenden der RBAC-Autorisierung in der Kubernetes-Dokumentation.
In diesem Abschnitt wird erläutert, wie Sie Folgendes durchführen:
kubeconfig
-Datei für den Verwaltungsclusterkubeconfig
-Datei für den VerwaltungsclusterMit diesem Verfahren können Sie den Anmeldeschritt des Authentifizierungsvorgangs testen, wenn ein Browser auf dem Computer vorhanden ist, auf dem Sie tanzu
- und kubectl
-Befehle ausführen. Wenn der Computer nicht über einen Browser verfügt, finden Sie weitere Informationen unter Authentifizieren von Benutzern auf einem Computer ohne Browser.
Exportieren Sie die Standard-kubeconfig
für den Verwaltungscluster in eine lokale Datei, z. B. /tmp/id_mgmt_test_kubeconfig
. Beachten Sie, dass der Befehl die Option --admin
nicht enthält. Daher handelt es sich bei der exportierten kubeconfig
um die Standard-kubeconfig
und nicht um die admin
-Version.
tanzu mc kubeconfig get --export-file /tmp/id_mgmt_test_kubeconfig
Ihnen sollte die folgende Bestätigungsmeldung angezeigt werden: You can now access the cluster by specifying '--kubeconfig /tmp/id_mgmt_test_kubeconfig' flag when using 'kubectl' command
.
Stellen Sie mithilfe der neu erstellten kubeconfig
-Datei eine Verbindung zum Verwaltungscluster her:
kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
Für den Authentifizierungsvorgang muss ein Browser auf dem Computer vorhanden sein, über den Benutzer eine Verbindung mit Clustern herstellen, da bei Ausführung von kubectl
-Befehlen automatisch die IdP-Anmeldeseite geöffnet wird, sodass sich Benutzer beim Cluster anmelden können. Ihr Browser sollte öffnen und die Anmeldeseite für Ihren OIDC-Anbieter oder eine LDAPS-Anmeldeseite anzeigen.
LDAPS:
OIDC:
Geben Sie die Anmeldedaten eines Benutzerkontos ein, das in Ihrem OIDC- oder LDAP-Server vorhanden ist. Nach einer erfolgreichen Anmeldung sollte der Browser Folgendes anzeigen:
Wechseln Sie wieder zu dem Terminal, auf dem Sie die tanzu
- und kubectl
-Befehle ausführen:
Wenn Sie bereits eine Rollenbindung im Cluster für den authentifizierten Benutzer konfiguriert haben, wird die Ausgabe von kubectl get pods -A
mit den Pod-Informationen angezeigt.
Wenn Sie keine Rollenbindung im Cluster konfiguriert haben, wird eine Meldung angezeigt, die besagt, dass dem Benutzerkonto der Zugriff auf die Pods verweigert wird: Error from server (Forbidden): pods is forbidden: User "[email protected]" cannot list resource "pods" in API group "" at the cluster scope
. Dies geschieht, weil der Benutzer erfolgreich authentifiziert wurde, aber noch nicht berechtigt ist, auf Ressourcen im Cluster zuzugreifen. Um den Benutzer für den Zugriff auf die Clusterressourcen zu autorisieren, müssen Sie das nachfolgend unter Erstellen einer Rollenbindung im Verwaltungscluster beschriebene Verfahren durchführen.
Um Nicht-Admin-Benutzern Zugriff auf den Verwaltungscluster zu erteilen, generieren und verteilen Sie eine kubeconfig
-Datei wie oben unter Generieren und Testen einer nicht administrativen kubeconfig
-Datei für den Verwaltungscluster beschrieben ist. Damit diese kubeconfig
funktioniert, müssen Sie zuerst RBAC einrichten, indem Sie eine Rollenbindung für den Verwaltungscluster erstellen. Diese Rollenbindung weist einzelnen authentifizierten Benutzern oder Benutzergruppen rollenbasierte Berechtigungen zu.
So erstellen Sie eine Rollenbindung:
Stellen Sie sicher, dass Sie den admin
-Kontext des Verwaltungsclusters verwenden:
kubectl config current-context
Wenn der Kontext nicht der admin
-Kontext des Verwaltungsclusters ist, legen Sie kubectl
für die Verwendung dieses Kontexts fest. Beispiel:
kubectl config use-context id-mgmt-test-admin@id-mgmt-test
Listen Sie Ihre vorhandenen Rollen auf:
Führen Sie folgenden Befehl aus, um die vollständige Liste der Rollen im Geltungsbereich des Namespace anzuzeigen:
kubectl get roles --all-namespaces
Führen Sie folgenden Befehl aus, um die vollständige Liste der Rollen im Geltungsbereich des Clusters anzuzeigen:
kubectl get clusterroles
Um einen bestimmten Benutzer mit einer Rolle zu verknüpfen, erstellen Sie eine Rollenbindung.
RoleBinding
kann auf eine Role
oder eine ClusterRole
verweisen.ClusterRoleBinding
kann nur auf eine ClusterRole
verweisen.Im folgenden Beispiel wird eine Clusterrollenbindung mit dem Namen id-mgmt-test-rb
erstellt, die die Clusterrolle cluster-admin
an den Benutzer [email protected]
bindet:
kubectl create clusterrolebinding id-mgmt-test-rb --clusterrole cluster-admin --user [email protected]
Geben Sie für --user
den OIDC- oder LDAP-Benutzernamen des Benutzers an. Sie haben das Attribut „username“ sowie weitere Identitätsanbieterdetails im Abschnitt „Identitätsverwaltung (Identity Management)“ der Tanzu Kubernetes Grid-Installationsprogramm-Schnittstelle oder durch Festlegen der LDAP_*
- oder OIDC_*
-Variablen konfiguriert:
OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM
festgelegt.LDAP_USER_SEARCH_NAME_ATTRIBUTE
festgelegt.Beispielsweise ist für OIDC der Benutzername oft die E-Mail-Adresse des Benutzers. Bei LDAPS ist es der LDAP-Benutzername, nicht die E-Mail-Adresse.
Versuchen Sie mithilfe der kubeconfig
-Datei, die Sie im vorherigen Verfahren erstellt haben, erneut eine Verbindung mit dem Verwaltungscluster herzustellen:
kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
Da der Benutzer in diesem Verwaltungscluster an die Rolle cluster-admin
gebunden ist, sollte dieses Mal die Liste der Pods angezeigt werden. Sie können die generierte kubeconfig
-Datei für alle Benutzer freigeben, für die Sie Rollenbindungen im Verwaltungscluster konfigurieren.
In diesem Abschnitt wird erläutert, wie Sie Folgendes durchführen:
kubeconfig
-Datei für einen Arbeitslastclusterkubeconfig
-Datei für einen ArbeitslastclusterMit diesem Verfahren können Sie den Anmeldeschritt des Authentifizierungsvorgangs testen, wenn ein Browser auf dem Computer vorhanden ist, auf dem Sie tanzu
- und kubectl
-Befehle ausführen. Wenn der Computer nicht über einen Browser verfügt, finden Sie weitere Informationen unter Authentifizieren von Benutzern auf einem Computer ohne Browser.
Führen Sie die folgenden Schritte aus, um Benutzer auf einem Arbeitslastcluster zu authentifizieren:
Rufen Sie die standardmäßige, nicht administrative kubeconfig
für den Arbeitslastcluster ab und exportieren Sie sie in eine Datei. Im folgenden Beispiel wird die kubeconfig
für den Cluster my-cluster
in die Datei my-cluster-kubeconfig
exportiert.
tanzu cluster kubeconfig get my-cluster --export-file /tmp/my-cluster-kubeconfig
Verwenden Sie die generierte Datei, um zu versuchen, einen Vorgang auf dem Cluster auszuführen. Führen Sie zum Beispiel folgenden Befehl aus:
kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
Sie sollten zur Anmeldeseite für Ihren Identitätsanbieter umgeleitet werden. Wenn Sie bereits eine Rollenbindung im Cluster für den authentifizierten Benutzer erstellt haben, zeigt nach erfolgreicher Anmeldung mit einem Benutzerkonto Ihres Identitätsanbieters die Ausgabe die Pod-Informationen an.
Wenn Sie keine Rollenbindung im Cluster konfiguriert haben, wird die folgende Meldung angezeigt: Error from server (Forbidden): pods is forbidden: User "<user>" cannot list resource "pods" in API group "" at the cluster scope
. Dies geschieht, weil dieser Benutzer noch keine Berechtigungen für den Cluster hat. Um den Benutzer für den Zugriff auf die Clusterressourcen zu autorisieren, müssen Sie eine Rollenbindung in einem Arbeitslastcluster erstellen.
Um die Identitätsverwaltungskonfiguration des Arbeitslastclusters abzuschließen, müssen Sie Rollenbindungen für die Benutzer erstellen, die die im vorherigen Schritt generierte kubeconfig
verwenden.
Legen Sie den kubectl
-Kontext auf die admin
kubeconfig
des Arbeitslastclusters fest. Sie müssen zum admin
-Kontext des Arbeitslastclusters wechseln, damit Sie eine Rollenbindung erstellen können. Führen Sie beispielsweise die folgenden beiden Befehle aus, um zum admin
-Kontext zu wechseln:
kubeconfig
abrufen:
tanzu cluster kubeconfig get my-cluster --admin
Kontext wechseln:
kubectl config use-context my-cluster-admin@my-cluster
So zeigen Sie Ihre vorhandenen Rollen an:
Führen Sie folgenden Befehl aus, um die vollständige Liste der Rollen im Geltungsbereich des Namespace anzuzeigen:
kubectl get roles --all-namespaces
Führen Sie folgenden Befehl aus, um die vollständige Liste der Rollen im Geltungsbereich des Clusters anzuzeigen:
kubectl get clusterroles
Um einen bestimmten Benutzer mit einer Rolle zu verknüpfen, erstellen Sie eine Rollenbindung.
RoleBinding
kann auf eine Role
oder eine ClusterRole
verweisen.ClusterRoleBinding
kann nur auf eine ClusterRole
verweisen.Im folgenden Beispiel wird eine Clusterrollenbindung mit dem Namen workload-test-rb
erstellt, die die Clusterrolle cluster-admin
an den Benutzer [email protected]
bindet:
kubectl create clusterrolebinding workload-test-rb --clusterrole cluster-admin --user [email protected]
Geben Sie für --user
den OIDC- oder LDAP-Benutzernamen des Benutzers an. Sie haben das Attribut „username“ sowie weitere Identitätsanbieterdetails im Abschnitt „Identitätsverwaltung (Identity Management)“ der Tanzu Kubernetes Grid-Installationsprogramm-Schnittstelle oder durch Festlegen der LDAP_*
- oder OIDC_*
-Variablen konfiguriert:
OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM
festgelegt.LDAP_USER_SEARCH_NAME_ATTRIBUTE
festgelegt.Beispielsweise ist für OIDC der Benutzername oft die E-Mail-Adresse des Benutzers. Bei LDAPS ist es der LDAP-Benutzername, nicht die E-Mail-Adresse.
Verwenden Sie die oben generierte kubeconfig
-Standarddatei, um erneut einen Vorgang im Cluster auszuführen. Führen Sie zum Beispiel folgenden Befehl aus:
kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
Dieses Mal sollte die Liste der Pods angezeigt werden, die im Arbeitslastcluster ausgeführt werden. Dies liegt daran, dass der Benutzer der Datei my-cluster-kubeconfig
sowohl von Ihrem Identitätsanbieter authentifiziert wurde als auch über die erforderlichen Berechtigungen für den Cluster verfügt. Sie können die Datei my-cluster-kubeconfig
für alle Benutzer freigeben, für die Sie Rollenbindungen im Cluster konfigurieren.
Geben Sie die generierten kubeconfig
-Dateien für andere Benutzer frei, um ihnen den Zugriff auf die Cluster zu gewähren.