Wie behebe ich den Fehler „Sie müssen beim Server angemeldet sein (nicht autorisiert)“, wenn ich eine Verbindung zum Amazon-EKS-API-Server herstelle?

Lesedauer: 9 Minute
0

Ich verwende kubectl-Befehle, um eine Verbindung zum Amazon-Elastic-Kubernetes-Service-Anwendungsprogrammierschnittstellen-Server (Amazon EKS) herzustellen. Ich habe die Meldung „Fehler: Sie müssen am Server angemeldet sein (nicht autorisiert).“

Kurzbeschreibung

Sie erhalten diesen Fehler, wenn die in kubectl konfigurierte AWS-Identity-and-Access-Management-Entität (IAM) nicht von Amazon EKS authentifiziert wird.

Sie sind authentifiziert und berechtigt, auf Ihren Amazon-EKS-Cluster zuzugreifen, basierend auf der IAM-Entität (Benutzer oder Rolle), die Sie verwenden. Stellen Sie daher Folgendes sicher:

  • Sie haben das kubectl-Tool so konfiguriert, dass es Ihren IAM-Benutzer oder -Rolle verwendet.
  • Ihre IAM-Entität ist der aws-auth ConfigMap zugeordnet.

Um dieses Problem zu beheben, müssen Sie je nach Anwendungsfall die Schritte in einem der folgenden Abschnitte ausführen:

  • Sie sind der Cluster-Ersteller
  • Sie sind nicht der Cluster-Ersteller

Lösung

Wenn beim Ausführen von Befehlen in AWS Command Line Interface (AWS CLI) Fehler auftreten, vergewissern Sie sich, dass Sie eine aktuelle Version von AWS CLI verwenden.

Sie sind der Cluster-Ersteller

Sie sind der Cluster-Ersteller, wenn Ihre IAM-Entität zum Erstellen des Amazon-EKS-Clusters verwendet wurde.

1.    Führen Sie die folgende Abfrage in Amazon CloudWatch Log Insights aus, um den ARN des Cluster-Erstellers zu identifizieren:

Wählen Sie zunächst die Protokollgruppe für Ihren Amazon-EKS-Cluster aus (Beispiel: /aws/eks/my-cluster/cluster). Führen Sie dann die folgende Abfrage aus:

fields @logstream, @timestamp, @message
| sort @timestamp desc
| filter @logStream like /authenticator/
| filter @message like "username=kubernetes-admin"
| limit 50

Hinweis: Stellen Sie sicher, dass Sie die Amazon-EKS-Authentifizierungsprotokolle aktiviert haben.

Diese Abfrage gibt die IAM-Entität zurück, die als Cluster-Ersteller zugeordnet ist:

@message
time="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

2.    Stellen Sie sicher, dass Sie die AWS-CLI mit der IAM-Entität des Erstellers des Clusters konfiguriert haben. Um zu überprüfen, ob die IAM-Entität für AWS CLI in Ihrer Shell-Umgebung konfiguriert ist, führen Sie den folgenden Befehl aus:

$ aws sts get-caller-identity

Sie können diesen Befehl auch mit einem bestimmten Profil ausführen:

$ aws sts get-caller-identity --profile MY-PROFILE

Die 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"
}

Stellen Sie 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, aktualisieren Sie die AWS-CLI-Konfiguration, um die IAM-Entität des Cluster-Erstellers zu verwenden.

3.    Aktualisieren oder generieren Sie die Datei kubeconfig mit dem folgenden Befehl:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Hinweis:

  • Ersetzen Sie eks-cluster-name durch den Namen Ihres Clusters.
  • Ersetzen Sie aws-region durch den Namen Ihrer AWS-Region.

Führen Sie den folgenden Befehl aus, um ein AWS-CLI-Profil anzugeben:

$ aws eks update-kubeconfig --name eks-cluster-name —region aws-region —profile my-profile

Hinweis:

  • Ersetzen Sie eks-cluster-name durch den Namen Ihres Clusters.
  • Ersetzen Sie aws-region durch den Namen Ihrer Region.
  • Ersetzen Sie my-profile durch den Namen Ihres Profils.

4.    Führen Sie den folgenden Befehl aus, um zu bestätigen, dass die Datei kubeconfig aktualisiert wurde:

$ kubectl config view --minify

5.    Führen Sie den folgenden Befehl aus, um zu bestätigen, dass Ihre IAM-Entität authentifiziert ist und Sie auf Ihren EKS-Cluster zugreifen können:

$ kubectl get svc

Beispiel für eine Ausgabe:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

Sie sind nicht der Cluster-Ersteller

Sie sind nicht der Cluster-Ersteller, wenn Ihre IAM-Entität nicht zum Erstellen des Clusters verwendet wurde. In diesem Fall müssen Sie Ihre IAM-Entität der aws-auth ConfigMap zuordnen, um den Zugriff auf den Cluster zu ermöglichen.

1.    Stellen Sie sicher, dass Sie die AWS-CLI mit Ihrer IAM-Entität konfiguriert haben. Führen Sie den folgenden Befehl aus, um die IAM-Entität anzuzeigen, die für AWS CLI in Ihrer Shell-Umgebung konfiguriert ist:

$ aws sts get-caller-identity

Sie können diesen Befehl auch mit einem bestimmten Profil ausführen:

$ aws sts get-caller-identity --profile my-profile

Die 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"
}

Vergewissern Sie sich, dass es sich bei der zurückgegebenen IAM-Entität um Ihre IAM-Entität handelt. Wenn die zurückgegebene IAM-Entität nicht diejenige ist, die für die Interaktion mit Ihrem Cluster verwendet wird, aktualisieren Sie zuerst die AWS-CLI-Konfiguration, um die richtige IAM-Entität zu verwenden. Versuchen Sie dann erneut, mit kubectl auf Ihren Cluster zuzugreifen. Wenn das Problem weiterhin besteht, fahren Sie mit Schritt 2 fort.

2.    Wenn die zurückgegebene IAM-Entität nicht der Cluster-Ersteller ist, fügen Sie Ihre IAM-Entität zur aws-auth ConfigMap hinzu. Dadurch kann die IAM-Entität auf den Cluster zugreifen.

Nur der Cluster-Administrator kann aws-auth ConfigMap ändern. Führen Sie daher einen der folgenden Schritte aus:

  • Folgen Sie den Anweisungen im Abschnitt Sie sind Cluster-Ersteller, um mithilfe der IAM-Entität des Cluster-Erstellers auf den Cluster zuzugreifen.
  • Bitten Sie den Cluster-Administrator, diese Aktion auszuführen.

Überprüfen Sie, ob sich Ihre IAM-Entität in der aws-auth ConfigMap befindet, indem Sie den folgenden Befehl ausführen:

eksctl get iamidentitymapping --cluster cluster-name

-oder-

kubectl describe configmap aws-auth -n kube-system

Wenn sich Ihre IAM-Entität in der aws-auth ConfigMap befindet, können Sie mit Schritt 3 fortfahren.

Ordnen Sie Ihre IAM-Entität automatisch zu, indem Sie den folgenden Befehl ausführen:

eksctl create iamidentitymapping \
    --cluster $CLUSTER-NAME \
    --region $REGION \
    --arn arn:aws:iam::XXXXXXXXXXXX:user/testuser \
    --group system:masters \
    --no-duplicate-arns \
    --username admin-user1

Sie können Ihre IAM-Entität auch manuell zuordnen, indem Sie die aws-auth ConfigMap bearbeiten:

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

Um einen IAM-Benutzer hinzuzufügen, fügen Sie den IAM-Benutzer-ARN zu mapUsers hinzu.

Beispiel:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
    username: testuser
    groups:
      - system:masters

Um eine IAM-Rolle hinzuzufügen, fügen Sie den IAM-Rollen-ARN zu mapRoles hinzu.

Beispiel:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole
    groups:
      - system:masters

Wichtig:

  • Die IAM-Rolle muss ohne den Pfad zugeordnet werden. Um mehr über die Anforderungen an den rolearn-Pfad zu erfahren, erweitern Sie den Abschnitt aws-auth ConfigMap gewährt keinen Zugriff auf den Cluster unter Problembehebung bei IAM.
  • Um rolearn für eine IAM-Rolle im AWS IAM Identity Center (Nachfolger von AWS Single Sign-On) anzugeben, entfernen Sie den Pfad „/aws-reserved/sso.amazonaws.com/REGION“ aus dem Rollen-ARN. Andernfalls kann Sie der Eintrag in der ConfigMap nicht als gültigen Benutzer autorisieren.
  • Die Gruppe system:masters ermöglicht den Superuser-Zugriff, um jede Aktion für jede Ressource auszuführen. Weitere Informationen finden Sie unter Standardrollen und Rollenbindungen. Um den Zugriff für diesen Benutzer einzuschränken, können Sie eine Amazon-EKS-Rolle und eine Rollenbindungsressource erstellen. Ein Beispiel für eingeschränkten Zugriff für Benutzer, die Ressourcen in der Amazon-EKS-Konsole anzeigen, finden Sie in den Schritten 2 und 3 unter Erforderliche Berechtigungen.

3.    Aktualisieren oder generieren Sie die Datei kubeconfig, indem Sie den folgenden Befehl ausführen. Stellen Sie sicher, dass die AWS-CLI mit Ihrer IAM-Entität konfiguriert ist, die in Schritt 1 zurückgegeben wurde.

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Hinweis:

  • Ersetzen Sie eks-cluster-name durch den Namen Ihres Clusters.
  • Ersetzen Sie aws-region durch den Namen Ihrer AWS-Region.

Sie können diesen Befehl auch mit einem bestimmten Profil ausführen:

$ aws eks update-kubeconfig --name eks-cluster-name —region aws-region —profile my-profile

Hinweis:

  • Ersetzen Sie eks-cluster-name durch den Namen Ihres Clusters.
  • Ersetzen Sie aws-region durch den Namen Ihrer AWS-Region.
  • Ersetzen Sie my-profile durch den Namen Ihres Profils.

4.    Führen Sie den folgenden Befehl aus, um zu bestätigen, dass die Datei kubeconfig aktualisiert wurde:

$ kubectl config view --minify

5.    Um zu bestätigen, dass Ihr IAM-Benutzer oder -Rolle authentifiziert ist, versuchen Sie erneut, auf den Cluster zuzugreifen. Sie können beispielsweise den folgenden Befehl ausführen, um zu bestätigen, dass der Fehler behoben wurde:

$ kubectl get svc

Beispiel für eine Ausgabe:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

Zusätzliche Tipps zur Problembehebung

Wenn der Fehler weiterhin besteht, verwenden Sie die folgenden Tipps zur Fehlerbehebung, um das Problem zu identifizieren.

Wenn Sie einen kubectl-Befehl ausführen, wird eine Anfrage an den Amazon-EKS-Cluster-API-Server gesendet. Anschließend versucht der Amazon-EKS-Authentifikator, diese Anfrage zu authentifizieren. Überprüfen Sie daher die EKS-Authentifikator-Protokolle in CloudWatch, um das Problem zu identifizieren.

1.    Stellen Sie sicher, dass Sie die Protokollierung für Ihren Amazon-EKS-Cluster aktiviert haben.

2.    Öffnen Sie CloudWatch Log Insights.

3.    Wählen Sie die Protokollgruppe für Ihren Cluster aus. Beispiel: „/aws/eks/example-cluster/cluster“.

4.    Führen Sie die folgende Abfrage aus:

fields @timestamp, @message
| filter @logStream like /authenticator/
| sort @timestamp desc
| limit 1000

Identifizieren Sie Protokollzeilen für dasselbe Zeitintervall, in dem der Fehler aufgetreten ist, indem Sie kubectl-Befehle ausführen. Weitere Informationen zur Fehlerursache finden Sie in den Amazon-EKS-Authentifikator-Protokollen.

  • Wenn das Problem durch die Verwendung der falschen IAM-Entität für kubectl verursacht wird, überprüfen Sie die kubectl kubeconfig- und AWS-CLI-Konfiguration. Stellen Sie sicher, dass Sie die richtige IAM-Rolle verwenden. Nehmen wir beispielsweise an, dass die Protokolle wie folgt aussehen. Diese Ausgabe bedeutet, dass die von kubectl verwendete IAM-Entität nicht validiert werden kann. Stellen Sie sicher, dass die von kubectl verwendete IAM-Entität in IAM existiert und der programmatische Zugriff der Entität aktiviert ist.
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 Ihre IAM-Entität in aws-auth ConfigMap nicht oder falsch zugeordnet ist, überprüfen Sie die aws-auth ConfigMap. Stellen Sie sicher, dass die IAM-Entität korrekt zugeordnet ist und die Anforderungen erfüllt, die im Abschnitt Sie sind kein Cluster-Ersteller aufgeführt sind. In diesem Fall sehen die EKS-Authentifikator-Protokolle ähnlich wie folgt aus:
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 Sie den Zugriff auf den Cluster verloren haben, können Sie mithilfe der IAM-Entität des Cluster-Erstellers auf den Cluster zugreifen. Dies liegt daran, dass der Cluster-Ersteller nicht in der aws-auth ConfigMap zugeordnet werden muss.
  • Wenn die IAM-Entität zum Erstellen des Clusters gelöscht wurde, erstellen Sie zunächst denselben IAM-Benutzer oder dieselbe -Rolle erneut. Greifen Sie dann mithilfe dieser IAM-Entität auf den Cluster zu, indem Sie die Schritte im Abschnitt Sie sind der Cluster-Ersteller ausführen.
  • Wenn der Cluster-Ersteller eine IAM-Rolle ist, die für einen SSO-Benutzer erstellt wurde, der entfernt wurde, können Sie diese IAM-Rolle nicht erneut erstellen. Wenden Sie sich in diesem Fall an den AWS Support, um Unterstützung zu erhalten.

Ähnliche Informationen

IAM-Benutzer- und Rollenzugriff auf Ihren Cluster aktivieren

Wie gewähre ich anderen IAM-Benutzern und -Rollen nach der Cluster-Erstellung in Amazon EKS Zugriff?

Amazon-EKS-Fehlerbehebung

Verwenden der RBAC-Autorisierung auf der Kubernetes-Website

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr