Wie behebe ich den Fehler „Unauthorized“, wenn ich kubectl-Befehle verwende, um auf meinen Amazon EKS-Cluster zuzugreifen?
Wenn ich kubectl-Befehle verwende, um auf einen Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster zuzugreifen, erhalte ich die Fehlermeldung: „error: You must be logged in to the server (Unauthorized)“.
Kurzbeschreibung
Der Fehler „Unauthorized“ tritt auf, wenn ein AWS Identity and Access Management (IAM)-Benutzer oder eine IAM-Rolle einen Amazon EKS-Cluster erstellt, der sich vom aws-iam-authenticator-Cluster unterscheidet. Um dieses Problem zu beheben, konfiguriere die rollenbasierte Zugriffskontrolle (RBAC) deines Amazon EKS-Clusters, um die IAM-Entität zu autorisieren. Weitere Informationen findest du unter Using RBAC authorization (Verwendung der RBAC-Autorisierung) auf der Kubernetes-Website.
Nur der Ersteller des Amazon EKS-Clusters verfügt über die Berechtigungen system:masters, um den Cluster zu konfigurieren. Es gibt zwei Möglichkeiten, system:masters-Berechtigungen auf andere IAM-Benutzer und -Rollen auszuweiten. Du kannst die Anmeldeinformationen des Clustererstellers übernehmen und dann die IAM-Rolle im Abschnitt mapRoles der aws-auth ConfigMap hinzufügen. Oder du kannst Amazon EKS-Zugriffseinträge verwenden.
Wichtig: Es wird empfohlen, cluster_creator nicht zur ConfigMap hinzuzufügen. Wenn du die ConfigMap falsch konfigurierst, verlieren alle IAM-Benutzer und -Rollen, einschließlich cluster_creator, möglicherweise dauerhaft den Zugriff auf den Amazon EKS-Cluster. Standardmäßig hat der cluster_creator Admin-Zugriff auf den Cluster, den er erstellt hat. Das bedeutet, dass du den cluster_creator nicht zur aws-auth ConfigMap hinzufügen musst.
Hinweis: In der folgenden Lösung ist cluster_creator die IAM-Entität, die den Cluster in Amazon EKS erstellt. Der Benutzer, dem du Zugriff gewährst, ist der designated_user.
Lösung
Hinweis: Wenn du Fehler bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen erhältst, lies Fehlerbehebung AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Wichtig: Die aws-auth ConfigMap ist veraltet. Die empfohlene Methode zum Verwalten des Zugriffs auf Kubernetes-APIs findest du unter IAM-Benutzern mit EKS-Zugriffseinträgen Zugriff auf Kubernetes gewähren.
Identifiziere den IAM-Benutzer oder die IAM-Rolle für den Clusterersteller
Um die IAM-Entität für den Clusterersteller zu identifizieren, der primären Zugriff zur Konfiguration deines Amazon EKS-Clusters hat, führe die folgenden Schritte aus:
- Suche nach dem CreateCluster-API-Aufruf in AWS CloudTrail.
- Überprüfe den Abschnitt userIdentity des API-Aufrufs.
- Identifiziere die IAM-Entität, der du nach der Erstellung des Clusters die Autorisierung erteilst.
Verwende aws-auth ConfigMap, um Cluster-Zugriff zu gewähren, wenn der Clusterersteller ein IAM-Benutzer ist
Führe die folgenden Schritte aus:
-
Installiere kubectl auf deiner lokalen Host-Maschine. Oder, wenn du über eine dedizierte Amazon Elastic Compute Cloud (Amazon EC2)-Instance mit einem installierten kubectl-Paket verfügst, verwende SSH, um eine Verbindung zur Instance herzustellen.
-
Führe auf der Host-Maschine, auf der kubectl installiert ist, den folgenden Befehl aus, um die AWS CLI mit den Anmeldeinformationen des designated_user zu konfigurieren:
aws configure -
Um deine AWS-Identität zu überprüfen, führe den folgenden get-caller-identity-Befehl aus:
aws sts get-caller-identityDie folgende Beispielausgabe gibt die IAM-Benutzerdetails für den designated_user zurück:
{ "UserId": "YOUR_USER_ID", "Account": "YOUR_ACCOUNT_NUMBER", "Arn": "arn:aws:iam::YOUR_ACCOUNT_NUMBER:user/YOUR_IAM_USERNAME" } -
Um die Pods aufzulisten, die im Cluster des Standard-Namespace ausgeführt werden, führe den folgenden Befehl aus:
kubectl get pods --namespace defaultHinweis: Die Ausgabe zeigt die Fehlermeldung „Unauthorized“, da der designated_user keine Autorisierung für den Zugriff auf den Amazon EKS-Cluster hat.
-
Um die AWS CLI-Anmeldeinformationen für die IAM-Entität cluster_creator zu konfigurieren, führe den folgenden Befehl aus:
aws configureHinweis: Konfiguriere die AWS CLI mit den Anmeldeinformationen für den IAM-Benutzer oder die IAM-Rolle, der bzw. die den Cluster erstellt hat. Standardmäßig hat nur der Clusterersteller Admin-Zugriff auf den Amazon EKS-Cluster. Wenn du den Cluster in der Amazon EKS-Konsole erstellt hast, konfiguriere die AWS CLI mit derselben IAM-Entität, mit der du dich an der Konsole angemeldet hast. Wenn du den Cluster mit eksctl erstellt hast, konfiguriere die AWS CLI mit der IAM-Entität, die über aktive Anmeldeinformationen verfügte, als du eksctl ausgeführt hast.
-
Um zu überprüfen, ob der cluster_creator Zugriff auf den Cluster hat, führe den folgenden Befehl aus:
kubectl get podsHinweis: Du erhältst nicht die Fehlermeldung „Unauthorized“, und die Ausgabe listet alle Pods auf, die im Standard-Namespace ausgeführt werden. Wenn die Ausgabe keine Ressourcen anzeigt, werden im Standard-Namespace keine Pods ausgeführt.
-
Um dem designated_user Zugriff auf den Cluster zu gewähren, füge den Abschnitt mapUsers deiner aws-auth.yaml-Datei hinzu. Weitere Informationen findest du unter Hinzufügen von IAM-Prinzipal zu Ihrem Amazon EKS-Cluster.
-
Füge den designated_user dem Abschnitt mapUsers der Datei aws-auth.yaml hinzu, und speichere anschließend die Datei.
-
Um die neue ConfigMap auf die RBAC-Konfiguration des Clusters anzuwenden, führe den folgenden Befehl aus:
kubectl apply -f aws-auth.yaml -
Um die AWS CLI-Konfiguration zu ändern, sodass die Anmeldeinformationen des designated_user verwendet werden, führe den folgenden Befehl aus:
aws configure
- Um zu überprüfen, ob der designated_user Zugriff auf den Cluster hat, führe den folgenden Befehl aus:
kubectl get pods
Hinweis: Du erhältst nicht die Fehlermeldung „Unauthorized“, und die Ausgabe listet alle Pods auf, die im Standard-Namespace ausgeführt werden. Wenn die Ausgabe keine Ressourcen anzeigt, werden im Standard-Namespace keine Pods ausgeführt.
Verwende aws-auth ConfigMap, um Cluster-Zugriff zu gewähren, wenn der Clusterersteller eine IAM-Rolle ist
Wenn eine IAM-Rolle den Cluster anstelle eines IAM-Benutzers erstellt hat, kannst du keine Anmeldeinformationen verwenden. Stattdessen musst du die IAM-Rolle übernehmen, die den Cluster erstellt hat, um dem designated_user Zugriff zu gewähren.
Führe die folgenden Schritte aus:
-
Um die IAM-Benutzerdetails des assume_role_user abzurufen, führe den folgenden get-caller-identity-Befehl aus:
aws sts get-caller-identity -
Um zu überprüfen, ob der assume_role_user Zugriff auf den Cluster hat, führe den folgenden Befehl aus:
kubectl get podsHinweis: Die Ausgabe zeigt die Fehlermeldung „Unauthorized“, da der designated_user keine Autorisierung für den Zugriff auf den Amazon EKS-Cluster hat.
-
Damit der assume_role_user die Rolle des cluster_creator übernehmen kann, führe den folgenden assume-role-Befehl aus:
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/cluster_creator --role-session-name testHinweis: Ersetze 123456789012 durch deine AWS-Kontonummer, cluster_creator durch deinen Rollennamen und test durch deinen Sitzungsnamen. Die Ausgabe gibt temporäre Anmeldeinformationen zurück:
{ "Credentials": { "AccessKeyId": "YOUR_ACCESS_KEY_ID", "SecretAccessKey": "YOUR_SECRET_ACCESS_KEY", "SessionToken": "YOUR_SESSION_TOKEN", "Expiration": "2026-03-31T18:20:00Z" }, "AssumedRoleUser": { "AssumedRoleId": "AROA1234567890EXAMPLE:test", "Arn": "arn:aws:sts::123456789012:assumed-role/cluster_creator/test" } } -
Um mithilfe der temporären IAM-Anmeldeinformationen die Umgebungsvariablen AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY und AWS_SESSION_TOKEN festzulegen, führe die folgenden Befehle aus:
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY export AWS_SESSION_TOKEN=YOUR_SESSION_TOKENHinweis: Die AWS CLI stuft die in den Umgebungsvariablen festgelegten Anmeldeinformationen ein und verwendet sie, um AWS-Services aufzurufen.
-
Um zu überprüfen, ob die AWS CLI die übernommene Rolle für den cluster_creator verwendet, führe den folgenden Befehl aus:
aws sts get-caller-identity -
Um dem designated_user Zugriff auf den Cluster zu gewähren, füge den Abschnitt mapUsers deiner aws-auth.yaml-Datei hinzu.
-
Füge den designated_user dem Abschnitt mapUsers der Datei aws-auth.yaml hinzu, und speichere anschließend die Datei.
-
Um die neue Konfiguration auf die RBAC-Konfiguration des Amazon EKS-Clusters anzuwenden, führe den folgenden Befehl aus:
kubectl apply -f aws-auth.yaml -
Um die Umgebungsvariablen zu entfernen, führe die folgenden Befehle aus:
unset AWS_ACCESS_KEY_ID unset AWS_SESSION_TOKEN unset AWS_SECRET_ACCESS_KEY -
Um die IAM-Benutzerdetails für den designated_user abzurufen, führe den folgenden Befehl aus:
aws sts get-caller-identity
- Um zu überprüfen, ob der designated_user Zugriff auf den Cluster hat, führe den folgenden Befehl aus:
kubectl get pods
Hinweis: Du erhältst nicht die Fehlermeldung „Unauthorized“, und die Ausgabe listet alle Pods auf, die im Standard-Namespace ausgeführt werden. Wenn die Ausgabe keine Ressourcen anzeigt, werden im Standard-Namespace keine Pods ausgeführt. Wenn du eksctl verwendest, siehe IAM-Benutzer und -Rollen verwalten.
Verwende Amazon EKS-Zugriffseinträge, um IAM-Benutzern und -Rollen Zugriff auf den Cluster zu gewähren
Hinweis: Weitere Informationen zur Verwendung von eksctl zur Verwaltung von Zugriffseinträgen findest du unter EKS Access-Einträge in eksctl.
Erstelle Zugriffseinträge
Erstelle Zugriffseinträge, die deinen IAM-Benutzern und -Rollen Zugriff auf den Cluster gewähren.
Hinweis: Um auf einen Cluster zuzugreifen, empfiehlt es sich, IAM-Rollen mit kurzfristigen Anmeldeinformationen anstelle von IAM-Benutzern mit langfristigen Anmeldeinformationen zu verwenden.
Amazon EKS unterstützt drei Authentifizierungsmodi für Zugriffseinträge:
- CONFIG_MAP, um nur aws-auth ConfigMap zu verwenden.
- API_AND_CONFIG_MAP, um sowohl Amazon EKS-Zugriffseintrag-APIs als auch aws-auth ConfigMap zu verwenden. Verwende diesen Modus, um vorhandene aws-auth-Berechtigungen in Amazon EKS-Zugriffseinträge zu migrieren. Dieser Modus priorisiert die Authentifizierung über Amazon EKS-Zugriffseinträge.
- API, um nur Amazon EKS-Zugriffseintrag-APIs zu verwenden.
Weitere Informationen findest du unter Gewähren Sie IAM-Benutzern und -Rollen Zugriff auf Kubernetes-APIs.
Konfiguriere deinen Cluster mit Zugriffseinträgen
Führe die folgenden Schritte aus, um die Amazon EKS-Konsole zur Konfiguration deines Clusters zu verwenden:
- Öffne die Amazon EKS-Konsole.
- Wähle die Registerkarte Access (Zugriff) aus.
- Überprüfe unter Access configuration (Zugriffskonfiguration) die aktuelle Einstellung von Authentication mode (Authentifizierungsmodus).
- Setze den Cluster-Authentifizierungsmodus auf EKS API oder API_AND_CONFIG_MAP.
Um die AWS CLI zur Konfiguration deines Clusters zu verwenden, führe den Befehl describe-cluster aus:
aws eks describe-cluster --name CLUSTER_NAME --query 'cluster.accessConfig.authenticationMode' --region REGION
Hinweis: Ersetze CLUSTER_NAME durch den Namen deines Clusters und REGION durch deine AWS-Region.
Wenn der Authentifizierungsmodus des Clusters EKS API oder API_AND_CONFIG_MAP ist, kannst du den Cluster für die Verwendung von Zugriffseinträgen konfigurieren. Falls nicht, findest du weitere Informationen unter Ändern des Authentifizierungsmodus, um Zugriffseinträge zu verwenden.
Um die AWS CLI zur Änderung des Authentifizierungsmodus zu verwenden, führe den folgenden update-cluster-config-Befehl aus:
aws eks update-cluster-config \ --name CLUSTER_NAME \ --access-config authenticationMode=API_AND_CONFIG_MAP
Hinweis: Ersetze CLUSTER_NAME durch den Namen deines Clusters. Wenn du die ConfigMap-Methode dauerhaft deaktivieren möchtest, ersetze API_AND_CONFIG_MAP durch API. Du kannst vom CONFIG_MAP-Authentifizierungsmodus in den API-Modus wechseln, aber du kannst nicht vom API- oder API_AND_CONFIG_MAP-Modus in den CONFIG_MAP-Modus wechseln. Weitere Informationen findest du unter Identitäts- und Zugriffsverwaltung.
Weitere Informationen
Verwenden einer IAM-Rolle in der AWS CLI
Migrieren vorhandener aws-auth ConfigMap-Einträge zu Zugriffseinträgen
- Themen
- Containers
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 4 Jahren
AWS OFFICIALAktualisiert vor einem Jahr