Wie behebe ich den Fehler „Your current user or role does not have access to Kubernetes objects on this EKS cluster“ in Amazon EKS?
Ich erhalte die folgende Fehlermeldung in Amazon Elastic Kubernetes Service (Amazon EKS): „Your current user or role does not have access to Kubernetes objects on this EKS cluster."
Kurzbeschreibung
Dieser Fehler wird möglicherweise angezeigt, wenn Sie die AWS-Managementkonsole mit einer AWS Identity and Access Management (IAM)-Identität (Benutzer oder Rolle) verwenden. Der Fehler weist darauf hin, dass dem IAM-Benutzer oder der IAM-Rolle die erforderlichen RBAC-Berechtigungen für den Zugriff auf die Kubernetes-API fehlen. Um Kubernetes-Ressourcen in der AWS-Managementkonsole anzuzeigen, muss Ihre AWS-IAM-Identität der aws-auth-ConfigMap in Ihrem Amazon-EKS-Cluster zugeordnet sein. Weitere Informationen finden Sie unter Using RBAC authorization auf der Kubernetes-Website.
Wenn Sie einen Amazon-EKS-Cluster erstellen, werden Ihrer IAM-Identität automatisch system:masters-Berechtigungen in der RBAC-Konfiguration des Clusters erteilt. Auf diese Weise können Sie Kubernetes-Ressourcen über die Amazon-EKS-Konsole anzeigen. Außerdem können Sie damit die aws-auth-ConfigMap in Kubernetes bearbeiten und zusätzlichen AWS-Benutzern oder -Rollen die Möglichkeit gewähren, mit dem Cluster zu interagieren. Die AWS-Managementkonsole verwendet IAM zur Autorisierung, und der EKS-Cluster verwendet das RBAC-System von Kubernetes. Da die aws-auth-ConfigMap des Clusters IAM-Identitäten mit Cluster-RBAC-Identitäten verknüpft, verknüpft die aws-auth-ConfigMap IAM-Identitäten mit Kubernetes-Identitäten.
Behebung
Voraussetzungen
Erfassen Sie je nach Ihrer Situation die folgenden Informationen.
Benutzer oder Rolle ohne Administratorrechte
Wenn Sie ein IAM-Benutzer oder eine IAM-Rolle ohne Administratorrechte für den Cluster sind und Sichtbarkeit auf der Amazon-EKS-Konsole benötigen, führen Sie die folgenden Schritte aus:
- Verschaffen Sie sich den ARN der IAM-Identität des Benutzers der AWS-Managementkonsole. AWS IAM Authenticator erlaubt im ARN der Rolle keinen Pfad, der in der ConfigMap verwendet wird. Wenn es sich um eine IAM-Rolle handelt, verwenden Sie das folgende ARN-Format:
arn:aws:iam::111122223333:role/example
Hinweis: Verwenden Sie nicht das folgende Format, da es unnötige Informationen enthält:
arn:aws:iam::111122223333:role/my-team/developers/example - Stellen Sie Ihrem Cluster-Administrator den ARN zur Verfügung und bitten Sie ihn, Sie zur aws-auth-ConfigMap hinzuzufügen.
Hinweis: Anweisungen zum Zugriff auf Ihren ARN finden Sie im Abschnitt Identifizieren des IAM-Identitäts-ARN des Benutzers der AWS-Managementkonsole.
Cluster-Ersteller oder Cluster-Administrator, Benutzer oder Rolle
Wenn Sie der Cluster-Ersteller oder Cluster-Administrator sind, verwenden Sie das Tool kubectl oder das Tool eksctl, um die aws-auth-ConfigMap zu verwalten.
Hinweis: Standardmäßig ist die Gruppe system:masters an die Cluster-Rolle gebunden, die den Namen cluster-admin trägt. Diese Cluster-Rolle verwendet den Platzhalter ("*") für Ressourcen und Verben in ihrer PolicyRule. Das bedeutet, dass jeder Benutzer, der der Gruppe system:masters zugewiesen ist, vollen Zugriff auf alle Kubernetes-Ressourcen innerhalb des Clusters hat.
Im Abschnitt Identifizieren des Cluster-Erstellers erfahren Sie die genauen Schritte, über die Cluster-Ersteller und Cluster-Administratoren ihren Administratorstatus identifizieren können.
Identifizieren des ARN der IAM-Identität des Benutzers der AWS-Managementkonsole
Identifizieren Sie den IAM-Benutzer oder die IAM-Rolle, die Sie für den Zugriff auf die Konsole verwenden. Diese Identität kann sich von derjenigen unterscheiden, die Sie mit AWS Command Line Interface (AWS CLI) verwenden. Vergewissern Sie sich, dass der identifizierte IAM-Benutzer oder die identifizierte IAM-Rolle berechtigt ist, Knoten und Workloads für alle Cluster in der AWS-Managementkonsole anzuzeigen. Verwenden Sie eine der folgenden Optionen, um auf den ARN zuzugreifen.
Hinweis: Wenn Sie beim Ausführen von Befehlen in AWS CLI Fehlermeldungen erhalten, finden Sie weitere Informationen unter Troubleshoot AWS CLI errors. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.
AWS CLI
Wenn Sie AWS-CLI-Zugriff auf den IAM-Benutzer oder die IAM-Rolle haben, führen Sie den folgenden Befehl aus:
aws sts get-caller-identity --query Arn
CloudShell
Wenn Sie keinen AWS-CLI-Zugriff haben, führen Sie über AWS CloudShell den folgenden Befehl aus:
aws sts get-caller-identity --query Arn
Die Ausgabe sieht etwa wie folgt aus:
"arn:aws:iam::111122223333:role/testrole"
-oder-
"arn:aws:iam::111122223333:user/testuser"
Hinweis:
- Wenn es sich um einen IAM-Rollen-ARN handelt, stellen Sie sicher, dass das Format dem im Abschnitt Voraussetzungen genannten ARN-Format ähnelt.
- Wenn der ARN eine assumed-role enthält, müssen Sie den ARN der Rolle abrufen. Beispielsweise ist der angenommene Rollen-ARN von arn:aws:sts::123456:assumed-role/MyRole/aadams mit dem Rollen-ARN arn:aws:sts::123456:role/MyRole verknüpft. Überprüfen Sie diesen Wert in der IAM-Konsole.
Identifizieren des Cluster-Erstellers
Suchen Sie in AWS CloudTrail nach dem API-Aufruf CreateCluster, um den Cluster-Ersteller oder die Administratorrolle mit den primären Berechtigungen zur Konfiguration Ihres Clusters zu finden. Überprüfen Sie dann den Abschnitt userIdentity des API-Aufrufs. Wenn Sie den Namen des Cluster-Erstellers in CloudTrail finden, dieser aber gelöscht wurde, erstellen Sie einen neuen IAM-Benutzer oder eine neue IAM-Rolle mit demselben Namen. Da diese neue IAM-Entität denselben ARN wie der ursprüngliche Cluster-Ersteller hat, erbt sie denselben Administratorzugriff auf den Cluster.
Hinweis: CloudTrail hält nur 90 Tage Verlauf vor.
Hinzufügen des neuen IAM-Benutzer oder der neuen IAM-Rolle zum Kubernetes-RBAC
Um den neuen IAM-Benutzer oder die neue IAM-Rolle zum Kubernetes-RBAC hinzuzufügen, konfigurieren Sie zunächst AWS CLI zur Verwendung des IAM des Cluster-Erstellers. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob AWS CLI korrekt mit der IAM-Identität konfiguriert ist:
$ aws sts get-caller-identity
Die Ausgabe enthält den ARN des IAM-Benutzers oder der IAM-Rolle. Zum Beispiel:
{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }
Verwenden Sie dann kubectl oder eksctl, um die aws-auth-ConfigMap zu ändern.
**kubectl **
-
Um kubectl zum Ändern der aws-auth-ConfigMap zu verwenden, verschaffen Sie sich mit folgendem kubectl-Befehl Zugriff auf den Cluster:
$ kubectl edit configmap aws-auth -n kube-system
Die Konsole zeigt die aktuelle ConfigMap. Wenn Sie keine Verbindung zum Cluster herstellen können, aktualisieren Sie Ihre kubeconfig-Datei. Da die Identität, die den Cluster erstellt, immer Zugriff auf den Cluster hat, führen Sie den Befehl mit einer IAM-Identität aus, die Zugriff auf den Cluster hat:
aws eks update-kubeconfig --region region_code --name my_cluster
Hinweis: Ersetzen Sie region_code durch den Code der AWS-Region Ihres EKS-Clusters und my_cluster durch den Namen Ihres EKS-Clusters.
Die kubectl-Befehle müssen eine Verbindung zum EKS-Serverendpunkt herstellen. Wenn der API-Server-Endpunkt öffentlich ist, benötigen Sie Internetzugang, um eine Verbindung zum Endpunkt herzustellen. Wenn der API-Server-Endpunkt privat ist, stellen Sie eine Verbindung zum Endpunkt des EKS-Servers von der Virtual Private Cloud (VPC) aus her, auf welcher der EKS-Cluster ausgeführt wird. -
Führen Sie den folgenden Befehl aus, um die aws-auth-ConfigMap im Texteditor als Cluster-Ersteller oder -Administrator zu bearbeiten:
$ kubectl edit configmap aws-auth -n kube-system
-
Fügen Sie einen IAM-Benutzer oder eine IAM-Rolle hinzu:
mapUsers: | - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser username: testuser groups: - system:bootstrappers - system:nodes
Oder fügen Sie die IAM-Rolle zu mapRoles hinzu. Zum Beispiel:
mapRoles: | - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole username: testrole groups: - system:bootstrappers - system:nodes
Es hat sich bewährt, system:masters nicht für Produktionsumgebungen zu verwenden, da system:masters einem Superuser einen Zugriff ermöglicht, mit dem sich jede Aktion an jeder Ressource ausführen lässt. Ebenso hat sich bewährt, Berechtigungen so sparsam wie möglich zu erteilen. Erstellen Sie eine Rolle mit Zugriff nur auf einen bestimmten Namespace. Beachten Sie den Abschnitt View Kubernetes resources in a specific namespace unter Required Permissions.
eksctl
Führen Sie den folgenden Befehl aus, um das Tool eksctl zum Aktualisieren der aws-auth-ConfigMap zu verwenden:
eksctl create iamidentitymapping --cluster your_cluster_Name --region=your_region --arn YOUR_IAM_ARN <arn:aws:iam::123456:role testing=""> --group system:masters --username admin</arn:aws:iam::123456:role>
Hinweis: Ersetzen Sie your_cluster_Name durch Ihren EKS-Clusternamen, your_region durch Ihre EKS-Cluster-Region und YOUR_IAM_ARN durch Ihre IAM-Rolle oder verwenden Sie ARN.
Überprüfen des Zugriffs auf Ihren Amazon-EKS-Cluster
Führen Sie die folgenden Schritte aus:
- Öffnen Sie die Amazon-EKS-Konsole.
- Wählen Sie im Navigationsbereich die Option Cluster aus.
- Wählen Sie Ihren Cluster aus.
- Überprüfen Sie die Registerkarten Übersicht und Workloads auf Fehler.
Wenn Sie für einen bestimmten Namespace konfiguriert haben, wird in der Amazon-EKS-Konsole die folgende Fehlermeldung angezeigt:
„Error loading Deploymentsdeployments.apps is forbidden: User "xxxxxx" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "xxxxxxx"“
Der Fehler wird für den spezifischen Namespace nicht angezeigt. Informationen zur Behebung von Fehlermeldungen finden Sie unter Can't see Nodes on the Compute tab or anything on the Resources tab and you receive an error in the AWS Management Console.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 6 Monaten
- AWS OFFICIALAktualisiert vor 8 Monaten