Wie kann ich bei einer Verbindung mit einem Amazon-EKS-API-Server Fehler aufgrund eines nicht autorisierten Servers beheben?

Zuletzt aktualisiert: 23.06.2022

Wenn ich kubectl-Befehle verwende, um eine Verbindung zum API-Server des Amazon Elastic Kubernetes Service (Amazon EKS) herzustellen, erhalte ich die Fehlermeldung: „error: You must be logged in to the server (Unauthorized)“ (Fehler: Sie müssen beim Server angemeldet sein (Nicht autorisiert)) Wie kann ich dies beheben?

Kurzbeschreibung

Bevor Sie sich mit dem Amazon-EKS-API-Server verbinden, installieren und konfigurieren Sie die neueste Version der AWS Command Line Interface (AWS CLI).

Dann muss der Cluster-Administrator die Schritte in einem der folgenden Abschnitte ausführen:

  • Sie sind der Ersteller des Clusters
  • Sie sind nicht der Ersteller des Clusters.

Schließlich muss die Person, die den Fehler erhalten hat, die Schritte im Abschnitt Sie sind der Benutzer oder die Rolle, die den Fehler erhalten hat ausführen.

Auflösung

Sie sind der Ersteller des Clusters.

1.    Um die Konfiguration Ihres AWS-CLI-Benutzers oder Ihrer AWS-Rolle anzuzeigen, führen Sie den folgenden Befehl aus:

$ aws sts get-caller-identity

Die Ausgabe gibt den Amazon-Ressourcennamen (ARN) des AWS-Identity-and-Access-Management(IAM)-Benutzers oder der AWS-Rolle zurück. Zum Beispiel:

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

2.    Bestätigen Sie, dass der ARN mit dem Ersteller des Clusters übereinstimmt.

3.    Aktualisieren oder generieren Sie die Datei kubeconfig mit einem der folgenden Befehle.

Führen Sie als IAM-Benutzer den folgenden Befehl aus:

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

Hinweis: Ersetzen Sie eks-cluster-name durch Ihren Clusternamen. Ersetzen Sie aws-region durch Ihre AWS-Region.

Führen Sie als IAM-Rolle den folgenden Befehl aus:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole

Hinweis: Ersetzen Sie eks-cluster-name durch Ihren Clusternamen. Ersetzen Sie aws-region durch Ihre AWS-Region.

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 Ihr IAM-Benutzer oder Ihre IAM-Rolle authentifiziert ist:

$ kubectl get svc

Die Ausgabe sollte wie folgt aussehen:

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

Hinweis: EKS ordnet die IAM-Rolle des Cluster-Erstellers auf der Seite der Steuerungsebene als kubernetes-admin zu. Wenn die API-Serverprotokollierung beim Erstellen des Clusters aktiviert wurde, kann der Entitätsersteller abgefragt werden. Führen Sie den folgenden Befehl in CloudWatch Insights aus:

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

Diese Abfrage gibt die IAM-Entität zurück, die als Cluster-Ersteller zugeordnet ist. Nehmen Sie die IAM-Entitätsrolle an, die Sie in der Ausgabe erhalten, und führen Sie erneut kubectl-Aufrufe an den Cluster durch.

Sie sind nicht der Ersteller des Clusters

1.    Um die Konfiguration Ihres AWS-CLI-Benutzers oder Ihrer AWS-Rolle anzuzeigen, führen Sie den folgenden Befehl aus:

$ aws sts get-caller-identity

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

2.    Bitten Sie den Cluster-Besitzer oder -Administrator, Ihren IAM-Benutzer oder Ihre IAM-Rolle zu aws-auth ConfigMap hinzuzufügen.

Hinweis: Wenn Sie über die richtigen IAM-Berechtigungen verfügen, können Sie sich mit AssumeRole als Cluster-Ersteller anmelden.

3.    Um aws-auth ConfigMap in einem Texteditor zu bearbeiten, muss der Cluster-Besitzer oder Administrator den folgenden Befehl ausführen:

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

Hinweis: Entfernen Sie für AWS Single Sign-On RoleARN unbedingt die „/aws-reserved/sso.amazonaws.com/REGION“ aus der rolearn-URL, da der ARN Sie sonst nicht als gültigen Benutzer autorisieren kann.

4.    Führen Sie einen der folgenden Schritte aus, um einen IAM-Benutzer oder eine IAM-Rolle hinzuzufügen.

Fügen Sie den IAM-Benutzer zu mapUsers hinzu. Zum Beispiel:

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

Hinweis: Ersetzen Sie testuser durch Ihren Benutzernamen.

Fügen Sie die IAM-Rolle zu mapRoles hinzu. Zum Beispiel:

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

Hinweis: Ersetzen Sie testrole durch Ihre Rolle.

Der Wert für username im Abschnitt mapRoles akzeptiert nur Kleinbuchstaben. Die IAM-Rolle sollte ohne den Pfad zugeordnet werden. Um mehr über die Anforderungen von Rollenpfaden zu erfahren, erweitern Sie den Abschnitt aws-auth ConfigMap does not grant access to the cluster (aws-auth ConfigMap gewährt keinen Zugriff auf den Cluster) unter Troubleshooting IAM (Fehlerbehebung bei IAM).

Hinweis: Die Gruppe system:masters ermöglicht Superuser-Zugriff zur Ausführung jeder Aktion für jede Ressource. Weitere Informationen finden Sie unter Standardrollen und Rollenbindungen.

Sie sind der Benutzer oder die Rolle, die die Fehlermeldung erhalten hat

1.    Führen Sie einen der folgenden Befehle aus, um die Datei kubeconfig zu aktualisieren oder zu generieren, nachdem aws-auth ConfigMap aktualisiert wurde.

Führen Sie als IAM-Benutzer den folgenden Befehl aus:

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

Hinweis: Ersetzen Sie eks-cluster-name durch Ihren Clusternamen. Ersetzen Sie aws-region durch Ihre AWS-Region.

2.    Führen Sie als IAM-Rolle den folgenden Befehl aus:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole

Hinweis: Ersetzen Sie eks-cluster-name durch Ihren Clusternamen. Ersetzen Sie aws-region durch Ihre AWS-Region.

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

$ kubectl config view --minify

4.    Führen Sie den folgenden Befehl aus, um zu bestätigen, dass Ihr IAM-Benutzer oder Ihre IAM-Rolle authentifiziert ist:

$ kubectl get svc

Sie sollten eine Ausgabe folgender Art sehen:

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

Hinweis: Wenn Sie weiterhin Fehlermeldungen erhalten, lesen Sie die Richtlinien zur Fehlerbehebung unter Verwenden der RBAC-Autorisierung.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?