Wie behebe ich den Fehler „Du musst beim Server angemeldet sein (nicht autorisiert)“, wenn ich eine Verbindung zum Amazon-EKS-API-Server herstelle?
Ich verwende kubectl-Befehle, um eine Verbindung zum Amazon Elastic Kubernetes Service (Amazon EKS) API-Server herzustellen. Ich erhalte die Meldung „Fehler: Du musst am Server angemeldet sein (nicht autorisiert).“
Kurzbeschreibung
Du erhältst diesen Fehler, wenn die in kubectl konfigurierte AWS-Identity-and-Access-Management-Entität (IAM) nicht von Amazon EKS authentifiziert wird. Du bist authentifiziert und berechtigt, auf deinen Amazon-EKS-Cluster zuzugreifen, basierend auf der IAM-Entität (Benutzer oder Rolle), die du verwendest. Dieser Fehler wird normalerweise durch eine der folgenden Konfigurationen verursacht:
- Du hast das kubectl-Tool so konfiguriert, dass es deinen IAM-Benutzer oder -Rolle verwendet.
- Du hast deine IAM-Entität der aws-auth ConfigMap zugeordnet.
Um dieses Problem zu beheben, führe je nach Anwendungsfall die Schritte in einem der folgenden Abschnitte aus:
- Du bist der Cluster-Ersteller
- Du bist nicht der Cluster-Ersteller
- Zugangseinträge verwenden
Behebung
**Anmerkung:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, findest du weitere Informationen unter Troubleshoot AWS CLI errors. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Du bist der Cluster-Ersteller
Wenn deine IAM-Entität zum Erstellen des Amazon-EKS-Clusters verwendet wurde, bist du der Cluster-Ersteller. Gehe wie folgt vor, um den Fehler als Cluster-Ersteller zu beheben:
-
Wähle in Amazon CloudWatch Log Insights die Protokollgruppe für den Amazon EKS-Cluster aus. Zum Beispiel /aws/eks/my-cluster/cluster. Führe dann die folgende Abfrage aus:
fields @logstream, @timestamp, @message| sort @timestamp desc | filter @logStream like /authenticator/ | filter @message like "username=kubernetes-admin" | limit 50Hinweis: Aktiviere die Amazon EKS-Authentifikator-Protokolle.
Die Abfrage gibt die IAM-Entität zurück, die als Cluster-Ersteller zugeordnet ist:@messagetime="2022-05-26T18:55:30Z" level=info msg="access granted" arn="arn:aws:iam::123456789000:user/testuser" client="127.0.0.1:57586" groups="[system:masters]" method=POST path=/authenticate uid="aws-iam-authenticator:123456789000:AROAFFXXXXXXXXXX" username=kubernetes-admin -
Überprüfe die Cluster-Ersteller-IAM-Entität für die AWS-CLI. Um zu überprüfen, ob die IAM-Entität für AWS CLI in deiner Shell-Umgebung konfiguriert ist, führe den folgenden Befehl aus:
$ aws sts get-caller-identityDu kannst auch ein bestimmtes Profil verwenden, um diesen Befehl auszuführen:
$ aws sts get-caller-identity --profile MY-PROFILEDie Ausgabe gibt den Amazon-Ressourcennamen (ARN) der IAM-Entität zurück, die für AWS CLI konfiguriert ist.
Beispiel:{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }Stelle sicher, dass die zurückgegebene IAM-Entität mit der IAM-Entität des Cluster-Erstellers übereinstimmt. Wenn die zurückgegebene IAM-Entität nicht der Cluster-Ersteller ist, aktualisiere die AWS-CLI-Konfiguration, um die IAM-Entität des Cluster-Erstellers zu verwenden.
-
Um die Datei kubeconfig zu aktualisieren oder erstellen, führe den folgenden Befehl aus:
$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region**Hinweis:**Ersetze eks-cluster-name durch den Namen deines Clusters. Ersetze aws-region durch den Namen deiner AWS-Region.
Um ein AWS-CLI-Profil für die kubeconfig-Datei anzugeben, führe den folgenden Befehl aus:$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --profile my-profile**Hinweis:**Ersetze eks-cluster-name durch den Namen deines Clusters. Ersetze aws-region durch den Namen deiner Region. Ersetze my-profile durch den Namen deines Profils.
-
Führe den folgenden Befehl aus, um zu bestätigen, dass die Datei kubeconfig aktualisiert wurde:
$ kubectl config view --minify -
Führe den folgenden Befehl aus, um zu bestätigen, dass deine IAM-Entität authentifiziert ist und du auf deinen EKS-Cluster zugreifen kannst:
$ kubectl get svcBeispielausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 77d
Du bist nicht der Cluster-Ersteller
Wenn deine IAM-Entität nicht zum Erstellen des Clusters verwendet wurde, bist du nicht der Cluster-Ersteller. Führe in diesem Fall die folgenden Schritte aus, um deine IAM-Entität der aws-auth ConfigMap zuzuordnen, um den Zugriff auf den Cluster zu ermöglichen:
-
Überprüfe die Cluster-Ersteller-IAM-Entität für die AWS-CLI. Führe den folgenden Befehl aus, um die IAM-Entität anzuzeigen, die für AWS CLI in deiner Shell-Umgebung konfiguriert ist:
$ aws sts get-caller-identityDu kannst auch ein bestimmtes Profil verwenden, um diesen Befehl auszuführen:
$ aws sts get-caller-identity --profile my-profileDie Ausgabe gibt den ARN der IAM-Entität zurück, die für AWS CLI konfiguriert ist.
Beispiel:{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }Stelle sicher, dass die zurückgegebene IAM-Entität mit der IAM-Entität des Cluster-Erstellers übereinstimmt. Wenn die zurückgegebene IAM-Entität nicht der Cluster-Ersteller ist, aktualisiere die AWS-CLI-Konfiguration, um die IAM-Entität des Cluster-Erstellers zu verwenden. Verwende dann kubectl, um erneut zu versuchen, auf deinen Cluster zuzugreifen. Wenn das Problem weiterhin besteht, fahre mit dem nächsten Schritt fort.
-
Wenn die zurückgegebene IAM-Entität nicht der Cluster-Ersteller ist, füge deine Entität zur aws-auth ConfigMap hinzu, damit die Entität auf den Cluster zugreifen kann. Führe folgenden Befehl aus:
Führe die Schritte im Abschnitt Du bist ein Cluster-Ersteller aus, um die IAM-Entität des Cluster-Erstellers für den Zugriff auf den Cluster zu verwenden.
Oder bitte den Cluster-Administrator, diese Aktion auszuführen. -
Um zu überprüfen, ob sich deine IAM-Entität in der aws-auth ConfigMap befindet, führe den folgenden Befehl aus:
eksctl get iamidentitymapping --cluster cluster-name-oder-
kubectl describe configmap aws-auth -n kube-systemWenn sich deine IAM-Entität in der aws-auth ConfigMap befindet, fahre mit dem nächsten Schritt fort. Wenn sich deine IAM-Entität nicht in der aws-auth ConfigMap befindet, führe den folgenden Befehl aus, um deine IAM-Entität automatisch zuzuordnen:
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::XXXXXXXXXXXX:user/testuser \ --group system:masters \ --no-duplicate-arns \ --username admin-user1Oder bearbeite die aws-auth ConfigMap, um deine IAM-Entität manuell zuzuordnen:
$ kubectl edit configmap aws-auth -namespace kube-systemFüge den IAM-Benutzer- oder Rollen-ARN zu mapUsers hinzu, um der aws-auth ConfigMap eine IAM-Entität hinzuzufügen.
Beispiel für einen IAM-Benutzer:mapUsers: | - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser username: testuser groups: - system:mastersBeispiel für eine IAM-Rolle:
mapRoles: | - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole username: testrole groups: - system:mastersWichtig:
Die IAM-Rolle muss ohne den Pfad zugeordnet werden. Weitere Informationen zu den Anforderungen an den rolearn-Pfad findest du im Abschnitt aws-auth ConfigMap gewährt keinen Zugriff auf den Cluster.
Um rolearn für eine IAM-Rolle im AWS IAM Identity Center anzugeben, entferne den Pfad „/aws-reserved/sso.amazonaws.com/REGION“ aus dem Rollen-ARN. Andernfalls kann dich der Eintrag in der ConfigMap nicht als gültigen Benutzer autorisieren.
Die Gruppe system:masters ermöglicht den Superuser-Zugriff, um eine beliebige Aktion für eine beliebige Ressource auszuführen. Weitere Informationen findest du unter Default roles and role bindings (Standardrollen und Rollenbindungen) auf der Kubernetes-Website. Um den Zugriff für diesen Benutzer einzuschränken, erstelle eine Amazon-EKS-Rolle und eine Rollenbindungsressource. Weitere Informationen findest du unter Erforderliche Berechtigungen. -
Führe den folgenden Befehl aus, um die Datei kubeconfig zu aktualisieren oder zu erstellen. Stelle sicher, dass die AWS CLI mit deiner IAM-Entität konfiguriert ist.
$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region**Hinweis:**Ersetze eks-cluster-name durch den Namen deines Clusters. Ersetze aws-region durch den Namen deiner Region.
Du kannst auch ein bestimmtes Profil verwenden, um diesen Befehl auszuführen:$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --profile my-profile**Hinweis:**Ersetze eks-cluster-name durch den Namen deines Clusters. Ersetze aws-region durch den Namen deiner Region. Ersetze my-profile durch den Namen deines Profils.
-
Führe den folgenden Befehl aus, um zu bestätigen, dass die Datei kubeconfig aktualisiert wurde:
$ kubectl config view --minify -
Um zu bestätigen, dass dein IAM-Benutzer oder -Rolle authentifiziert ist, greife erneut auf den Cluster zu. Du kannst beispielsweise den folgenden Befehl ausführen, um zu bestätigen, dass der Fehler behoben wurde:
$ kubectl get svcBeispielausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 77d
Verwende Zugriffseinträge, um wieder Zugriff auf den Cluster zu erhalten
Verwende die CreateAccessEntry-API, um den Zugriff auf den Amazon EKS-Cluster bereitzustellen oder wiederherzustellen. Weitere Informationen findest du unter Wie kann ich die Amazon EKS Access Entry API verwenden, um den Zugriff auf einen EKS-Cluster wiederherzustellen?
Fehlerbehebung
Wenn du einen kubectl-Befehl ausführst, wird eine Anfrage an den Amazon-EKS-Cluster-API-Server gesendet. Anschließend versucht der Amazon-EKS-Authentifikator, diese Anfrage zu authentifizieren. Wenn der Amazon EKS-Authenticator die Anfrage nicht authentifizieren kann, überprüfe die EKS-Authentifikator-Protokolle in CloudWatch. Verwende die folgenden Tipps zur Problembehandlung, um das Problem zu identifizieren.
Greife auf deine EKS-Authenticator-Protokolle zu
- Schalte die Protokollierung für deinen Amazon EKS-Cluster ein.
- Öffne CloudWatch Log Insights.
- Wähle die Protokollgruppe für deinen Cluster aus. Beispiel: „/aws/eks/example-cluster/cluster“.
- Führe die folgende Abfrage aus:
Um die Protokollzeilen für dasselbe Zeitintervall zu identifizieren, in dem der Fehler aufgetreten ist, führe kubectl-Befehle aus.fields @timestamp, @message| filter @logStream like /authenticator/ | sort @timestamp desc | limit 1000
Überprüfe deine EKS-Authenticator-Protokolle
Führe je nach Fehlerursache die folgenden Aufgaben aus:
-
Wenn das Problem von der Verwendung der falschen IAM-Entität für kubectl herrührt, überprüfe die kubectl kubeconfig- und AWS-CLI-Konfiguration. Stelle sicher, dass du die richtige AIM-Entität verwendest. Im folgenden Ausgabebeispiel kann die von kubectl verwendete IAM-Entität nicht validiert werden. Überprüfe die IAM-Entität, die kubectl verwendet, und stelle sicher, dass die Entität in IAM existiert und der programmatische Zugriff auf die Entität aktiviert ist.
Beispielausgabe:time="2022-12-26T20:46:48Z" level=warning msg="access denied" client="127.0.0.1:43440" error="sts getCallerIdentity failed: error from AWS (expected 200, got 403). Body: {\"Error\":{\"Code\":\"InvalidClientTokenId\",\"Message\":\"The security token included in the request is invalid.\",\"Type\":\"Sender\"},\"RequestId\":\"a9068247-f1ab-47ef-b1b1-cda46a27be0e\"}" method=POST path=/authenticate -
Wenn das Problem darauf zurückzuführen ist, dass deine IAM-Entität in aws-auth ConfigMap nicht oder falsch zugeordnet ist, überprüfe die aws-auth ConfigMap. Stelle sicher, dass die IAM-Entität korrekt zugeordnet ist und die Anforderungen erfüllt, die im Abschnitt Du bist kein Cluster-Ersteller aufgeführt sind. Für falsch zugeordnete oder fehlende IAM-Entitäten sehen die EKS-Authenticator-Logs ähnlich aus wie im folgenden Ausgabebeispiel:
time="2022-12-28T15:37:19Z" level=warning msg="access denied" arn="arn:aws:iam::XXXXXXXXXX:role/admin-test-role" client="127.0.0.1:33384" error="ARN is not mapped" method=POST path=/authenticate -
Wenn die aws-auth ConfigMap aktualisiert wurde und du den Zugriff auf den Cluster verloren hast, verwende den IAM-Entität Cluster-Ersteller für den Zugriff auf den Cluster. Da der Cluster-Ersteller nicht in der aws-auth ConfigMap zugeordnet werden muss, verwende diese IAM-Entität, um auf den Cluster zuzugreifen.
-
Wenn die Cluster-Ersteller-IAM-Entität gelöscht wurde, erstelle dieselbe IAM-Entität mit derselben Namenskonvention erneut. Dann kann diese neu erstellte Cluster-Ersteller-IAM-Entität denselben ARN wie die IAM-Entität haben. Führe dann die Schritte im Abschnitt Du bist der Cluster-Ersteller aus, um die IAM-Entität für den Zugriff auf den Cluster zu verwenden.
-
Wenn der Cluster-Ersteller eine IAM-Rolle ist, die für einen SSO-Benutzer erstellt wurde, der entfernt wurde, kannst du diese IAM-Rolle nicht erstellen. Wende dich in diesem Fall an den AWS Support, um Unterstützung zu erhalten.
Ähnliche Informationen
Wie gewähre ich anderen IAM-Benutzern und -Rollen nach der Cluster-Erstellung in Amazon EKS Zugriff?
Verwenden der RBAC-Autorisierung auf der Kubernetes-Website
IAM-Benutzern Zugriff auf Kubernetes mit EKS-Zugriffseinträgen gewähren
EKS Access-Einträge auf der eksctl-Website
- Themen
- Containers
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 3 Jahren