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.
Ähnliche Informationen
War dieser Artikel hilfreich?
Benötigen Sie Hilfe zur Fakturierung oder technischen Support?