Wie behebe ich den Fehler „Ihr aktueller Benutzer oder Ihre aktuelle Rolle hat keinen Zugriff auf Kubernetes-Objekte in diesem EKS-Cluster“ in Amazon EKS?

Lesedauer: 7 Minute
0

Ich erhalte die folgende Fehlermeldung in Amazon Elastic Kubernetes Service (Amazon EKS): „Ihr aktueller Benutzer oder Ihre aktuelle Rolle hat keinen Zugriff auf Kubernetes-Objekte in diesem EKS-Cluster.“

Kurzbeschreibung

Dieser Fehler wird möglicherweise angezeigt, wenn Sie die AWS-Managementkonsole mit einem Benutzer oder einer Rolle für AWS Identity and Access Management (IAM) verwenden. Der Fehler weist darauf hin, dass dem IAM-Benutzer oder der IAM-Rolle die erforderlichen RBAC-Berechtigungen (von der Kubernetes-Website) für den Zugriff auf die Kubernetes-API fehlen. Um Kubernetes-Ressourcen in der AWS-Managementkonsole anzuzeigen, muss Ihr AWS-IAM-Benutzer oder Ihre AWS-IAM-Rolle aws-auth ConfigMap in Ihrem Amazon-EKS-Cluster zugeordnet sein.

Wenn Sie einen Amazon-EKS-Cluster erstellen, werden Ihrem IAM-Benutzer oder Ihrer IAM-Rolle 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.

Zwei verschiedene Autorisierungssysteme werden verwendet. Die AWS-Managementkonsole verwendet IAM. Der EKS-Cluster verwendet das Kubernetes RBAC-System (von der Kubernetes-Website). Die aws-auth ConfigMap des Clusters ordnet IAM-Identitäten (Benutzer oder Rollen) den Cluster-RBAC-Identitäten zu. Das bedeutet, dass die aws-auth ConfigMap IAM-Identitäten mit Kubernetes-Identitäten verknüpft.

Behebung

Voraussetzungen

Bevor Sie beginnen, sammeln Sie die folgenden Informationen.

Benutzer oder Rolle ohne Administratorrechte

Wenn Sie kein Cluster-Admin-IAM-Benutzer oder keine IAM-Rolle sind und Sichtbarkeit auf der Amazon-EKS-Konsole benötigen, führen Sie die folgenden Schritte aus:

1.Rufen Sie den IAM Identity Amazon Resource Name (ARN) des AWS-Managementkonsole-Benutzers ab.

Wenn es sich um eine IAM-Rolle handelt, verwenden Sie das folgende ARN-Format:

arn:aws:iam::111122223333:role/example

**Wichtig:**Verwenden Sie nicht das folgende Format:

arn:aws:iam::111122223333:role/my-team/developers/example

2.Stellen Sie Ihrem Cluster-Administrator den ARN zur Verfügung und fordern Sie den Administrator auf, Sie zur aws-auth ConfigMap hinzuzufügen.

**Hinweis:**Anweisungen zum Zugriff auf Ihren ARN finden Sie im Abschnitt Identifizieren Sie den 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 Clusterrolle gebunden, die den Namen cluster-admin trägt. Diese Clusterrolle 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 finden Sie detaillierte Schritte dazu, wie Cluster-Ersteller und Cluster-Administratoren ihren Administratorstatus identifizieren können.

IAM-Identity-ARN des AWS-Managementkonsole-Benutzers identifizieren

Identifizieren Sie den IAM-Benutzer oder die IAM-Rolle, die Sie für den Zugriff auf die Konsole verwenden. Dies kann sich von der Identität unterscheiden, die Sie mit der AWS-Befehlszeilenschnittstelle (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. Rufen Sie dann den ARN der IAM-Identität ab. Verwenden Sie eine der folgenden Optionen, um auf den ARN zuzugreifen.

Die AWS-CLI verwenden

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 starten

Wenn Sie keinen AWS-CLI-Zugriff haben, führen Sie den folgenden Befehl aus:

aws sts get-caller-identity --query Arn

Die Ausgabe sieht in 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 ARN-Format ähnelt, das Sie im Abschnitt Voraussetzungen erhalten.
  • 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 der Rollen-ARN arn:aws:sts::123456:role/MyRole verknüpft. Sie können diesen Wert in der IAM-Konsole überprüfen.

Cluster-Ersteller identifizieren

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.

**Tipp:**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 bietet nur 90 Tage Verlauf.

Kubernetes RBAC mithilfe von kubectl oder eksctl einen neuen IAM-Benutzer oder eine neue IAM-Rolle hinzufügen

Bevor Sie das Tool kubectl oder eksctl auswählen, um die aws-auth ConfigMap zu bearbeiten, stellen Sie sicher, dass Sie Schritt 1 abgeschlossen haben. Folgen Sie dann den Schritten 2-4, um mit kubectl zu bearbeiten. Um mit eksctl zu bearbeiten, fahren Sie mit Schritt 5 fort.

1.Nachdem Sie den Cluster-Ersteller oder Administrator identifiziert haben, konfigurieren Sie AWS CLI für die Verwendung des Cluster-Ersteller-IAM. Weitere Informationen finden Sie unter Grundlagen der Konfiguration.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob AWS CLI korrekt mit der IAM-Entität konfiguriert ist:

$ aws sts get-caller-identity

Die Ausgabe gibt den ARN des IAM-Benutzers oder der IAM-Rolle zurück. Zum Beispiel:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

**Hinweis:**Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

2.Um die aws-auth ConfigMap mit kubectl zu ändern, müssen Sie Zugriff auf den Cluster haben. Führen Sie den folgenden kubectl-Befehl aus:

$ kubectl edit configmap aws-auth -n kube-system

Die Konsole zeigt die aktuelle ConfigMap.

Wenn Sie keine Verbindung zum Cluster herstellen können, versuchen Sie, Ihre kubeconfig-Datei zu aktualisieren. Führen Sie die Datei mit einer IAM-Identität aus, die Zugriff auf den Cluster hat. Die Identität, die den Cluster erstellt hat, hat immer Clusterzugriff.

aws eks update-kubeconfig --region region_code --name my_cluster

**Hinweis:**Ersetzen Sie region\ _code durch Ihren EKS-Cluster-AWS-Regionscode und my\ _cluster durch Ihren EKS-Clusternamen.

Die kubectl-Befehle müssen eine Verbindung zum EKS-Serverendpunkt herstellen. Wenn der API-Serverendpunkt öffentlich ist, müssen Sie über einen Internetzugang verfügen, um eine Verbindung zum Endpunkt herzustellen. Wenn der API-Serverendpunkt privat ist, müssen Sie von der VPC aus, auf der der EKS-Cluster ausgeführt wird, eine Verbindung zum EKS-Serverendpunkt herstellen.

3.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

4.Einen IAM-Benutzer oder eine IAM-Rolle hinzufügen:

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

Beachten Sie die folgenden Informationen:

  • system:masters ermöglicht den Superuser-Zugriff, um jede Aktion für jede Ressource auszuführen. Dies ist keine bewährte Methode für Produktionsumgebungen.
  • Es hat sich bewährt, erteilte Berechtigungen so gering wie möglich zu halten. Erwägen Sie, eine Rolle zu erstellen, die nur Zugriff auf einen bestimmten Namespace hat. Weitere Informationen finden Sie unter Verwenden der RBAC-Autorisierung auf der Kubernetes-Website. Weitere Informationen finden Sie unter Erforderliche Berechtigungen und im Abschnitt „Kubernetes-Ressourcen in einem bestimmten Namespace anzeigen“, um ein Beispiel für den eingeschränkten Zugriff der Amazon EKS-Konsole zu finden.

5.Mit dem Tool eksctl können Sie die aws-auth ConfigMap mit dem folgenden Befehl aktualisieren:

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 you _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.

Zugriff auf Ihren Amazon-EKS-Cluster überprüfen

1.Öffnen Sie die Amazon-EKS-Konsole.

2.Wählen Sie im Navigationsbereich von Amazon EKS die Option Clusters aus.

3.Wählen Sie Ihren Cluster aus.

4.Ü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 Deployments
deployments.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 auf der Registerkarte Compute oder auf der Registerkarte Resources. In der AWS-Managementkonsole wird eine Fehlermeldung angezeigt.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr