Wie gewähre ich anderen IAM-Benutzern und -Rollen nach der Cluster-Erstellung in Amazon EKS Zugriff?
Wenn ich versuche, über kubectl-Befehle auf den Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster zuzugreifen, erhalte ich den folgenden Autorisierungsfehler: „Fehler: Sie müssen am Server angemeldet sein (nicht autorisiert).“
Kurzbeschreibung
Sie erhalten einen Autorisierungsfehler, wenn Ihre AWS Identity and Access Management (IAM)-Entität nicht durch die rollenbasierte Zugriffskontrolle (RBAC) des Amazon EKS-Clusters autorisiert ist. Dies passiert, wenn ein IAM-Benutzer oder eine IAM-Rolle einen Amazon EKS-Cluster erstellt, der sich von dem unterscheidet, der von aws-iam-authenticator verwendet wird.
Anfänglich verfügt nur der Ersteller des Amazon EKS-Clusters über system:masters-Berechtigungen zur Konfiguration des Clusters. Um die system:masters-Berechtigungen auf andere Benutzer und Rollen auszudehnen, müssen Sie die aws-auth ConfigMap zur Konfiguration des Amazon EKS-Clusters hinzufügen. Die ConfigMap ermöglicht anderen IAM-Entitäten, wie Benutzern und Rollen, den Zugriff auf den Amazon EKS-Cluster.
Um Zugriff auf eine IAM-Rolle zu gewähren, müssen Sie die Anmeldeinformationen des Clustererstellers annehmen. Fügen Sie dann die IAM-Rolle im Bereich mapRoles der aws-auth ConfigMap hinzu.
Wichtig:
- Vermeiden Sie Syntaxfehler wie etwa Tippfehler, wenn Sie die aws-auth ConfigMap aktualisieren. Diese Fehler können sich auf die Berechtigungen aller IAM-Benutzer und -Rollen auswirken, die in der ConfigMap des Amazon EKS-Clusters aktualisiert werden.
- Es ist eine bewährte Methode, das Hinzufügen von cluster_creator zur ConfigMap zu vermeiden. Eine fehlerhafte Änderung der ConfigMap kann dazu führen, dass alle IAM-Benutzer und -Rollen, einschließlich cluster_creator, dauerhaft den Zugriff auf den Amazon EKS-Cluster verlieren.
- cluster_creator muss nicht zur aws-auth ConfigMap hinzugefügt werden, um Administratorzugriff auf den Amazon EKS-Cluster zu erhalten. Standardmäßig hat der cluster_creator Administratorzugriff auf den Amazon EKS-Cluster, den er erstellt hat.
Hinweis: Wenn Sie beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.
Lösung
Hinweis: In den folgenden Schritten ist cluster_creator der Clusterersteller. Der Benutzer, der derzeit keinen Zugriff auf den Cluster hat, aber Zugriff benötigt, wird als designated_user bezeichnet.
Identifizieren Sie den IAM-Benutzer oder die IAM-Rolle für den Clusterersteller
1.Geben Sie den IAM-Benutzer oder die IAM-Rolle für den Clusterersteller an, der über primären Zugriff zur Konfiguration Ihres Amazon EKS-Clusters verfügt.
2.Geben Sie den IAM-Benutzer an, dem der Clusterersteller nach der Clustererstellung die Autorisierung erteilt. Um den Clusterersteller zu identifizieren, suchen Sie in AWS CloudTrail nach dem API-Aufruf CreateCluster und überprüfen Sie dann den Abschnitt userIdentity des API-Aufrufs.
Fügen Sie der ConfigMap den designated_user hinzu, wenn der cluster_creator ein IAM-Benutzer ist
1.Installieren Sie kubectl auf Ihrem lokalen Host-Computer. Oder, wenn eine dedizierte Amazon Elastic Compute Cloud (Amazon EC2)-Instance vorliegt, auf der ein kubectl-Paket installiert ist, verwenden Sie SSH, um eine Verbindung zur Instance herzustellen.
2.Konfigurieren Sie auf demselben Host-Computer, auf dem kubectl installiert ist, die AWS-CLI mit den Anmeldeinformationen des designated_user:
aws configure
3.Führen Sie in der AWS-CLI den folgenden Befehl aus:
aws sts get-caller-identity
Die Ausgabe sollte die IAM-Benutzerdetails für den designated_user zurückgeben.
Zum Beispiel:
{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/designated_user" }
4.Listet die Pods auf, die im Cluster des Standard-Namespaces laufen:
kubectl get pods --namespace default
Die Ausgabe zeigt Folgendes an: „Fehler: Sie müssen am Server angemeldet sein (nicht autorisiert).“ Dieser Fehler bedeutet, dass der designated_user nicht autorisiert ist, auf den Amazon EKS-Cluster zuzugreifen.
5.Konfigurieren Sie die AWS-Zugriffsschlüssel-ID und den geheimen AWS-Zugriffsschlüssel von cluster_creator.
Wenn der Cluster mit der AWS-Managementkonsole erstellt wurde, geben Sie die IAM-Rolle oder den Benutzer an, der den Cluster erstellt hat. Konfigurieren Sie auf dem Host-Computer, auf dem kubectl installiert ist, den/die cluster_creator-IAM-Benutzer/-Rolle in der AWS-CLI:
aws configure
Wenn eksctl verwendet wurde, um den Cluster zu erstellen, verwenden Sie die standardmäßigen oder angegebenen Anmeldeinformationen für das AWS-CLI-Profil, um die AWS-CLI für die Ausführung von kubectl-Befehlen zu konfigurieren.
6.Stellen Sie sicher, dass der cluster_creator Zugriff auf den Cluster hat:
kubectl get pods
Wenn alles richtig eingerichtet ist, erhalten Sie keine „Nicht autorisiert“-Fehlermeldung. Die Ausgabe sollte alle Pods auflisten, die im Standard-Namespace laufen. Wenn die Ausgabe zeigt, dass keine Ressourcen gefunden wurden, werden keine Pods im Standard-Namespace ausgeführt.
7.Um dem designated_user Zugriff auf den Cluster zu gewähren, fügen Sie den Abschnitt mapUsers Ihrer aws-auth.yaml-Datei hinzu. Sehen Sie sich die Beispieldatei aws-auth.yaml unter Gewährung des Zugriffs auf Ihren Cluster für IAM-Benutzer und -Rollen an.
8.Fügen Sie den designated_user zum Abschnitt mapUsers der Datei aws-auth.yaml aus Schritt 7 hinzu und speichern Sie anschließend die Datei.
9.Wenden Sie die neue ConfigMap auf die RBAC-Konfiguration des Clusters an:
kubectl apply -f aws-auth.yaml
10.Ändern Sie die AWS-CLI-Konfiguration erneut, um die Anmeldeinformationen des designated_user zu verwenden:
aws configure
11.Stellen Sie sicher, dass der designated_user Zugriff auf den Cluster hat:
kubectl get pods
Wenn alles richtig eingerichtet ist, erhalten Sie keine „Nicht autorisiert“-Fehlermeldung. Die Ausgabe listet alle Pods auf, die im Standard-Namespace laufen. Wenn die Ausgabe zeigt, dass keine Ressourcen gefunden wurden, werden keine Pods im Standard-Namespace ausgeführt.
Fügen Sie den designated_user der ConfigMap hinzu, wenn der cluster_creator eine IAM-Rolle ist
In den vorherigen Schritten haben Sie die Anmeldeinformationen des cluster_creator verwendet, um einem designated_user Zugriff zu gewähren. Wenn jedoch statt eines IAM-Benutzers eine IAM-Rolle den Cluster erstellt hat, gibt es keine Anmeldeinformationen, die Sie verwenden können. In diesem Fall müssen Sie die IAM-Rolle übernehmen, die den Cluster erstellt hat, um dem designated_user Zugriff zu gewähren. Wenn der Clusterersteller keine IAM-Rolle ist, müssen Sie die folgenden Schritte nicht ausführen.
Hinweis: In den folgenden Schritten ist assume_role_user derjenige Benutzer, der die Rolle cluster_creator annimmt. Der Benutzer, der derzeit keinen Zugriff auf den Cluster hat, aber Zugriff benötigt, wird als designated_user bezeichnet.
Gehen Sie wie folgt vor, um die IAM-Rolle zu übernehmen und die aws-auth ConfigMap auf dem Cluster so zu bearbeiten, dass Sie dem designated_user Zugriff gewähren können:
1.Zeigen Sie die IAM-Benutzerdetails des assume_role_user an:
aws sts get-caller-identity
2.Stellen Sie sicher, dass der assume_role_user Zugriff auf den Cluster hat:
kubectl get pods
Die Ausgabe zeigt den folgenden Fehler: „Fehler: Sie müssen am Server angemeldet sein (nicht autorisiert).“ Dieser Fehler bedeutet, dass der ** Annahme_Rolle_Benutzer** keine Berechtigung zum Konfigurieren des Amazon EKS-Clusters hat.
3.Erlauben Sie dem assume_role_user, die Rolle des cluster_creator zu übernehmen:
aws sts assume-role --role-arn arn:aws:iam:11122223333:role/cluster_creator --role-session-name test
Die Ausgabe zeigt die temporären IAM-Anmeldeinformationen für den assume_role_user.
4.Verwenden Sie die temporären IAM-Anmeldeinformationen, um die Umgebungsvariablen AWS_ACCESS_KEY_ID, AWS_SESSION_TOKEN und AWS_SECRET_ACCESS_KEY festzulegen.
Zum Beispiel:
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SESSION_TOKEN=EXAMPLETOKEN export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Die AWS-CLI stuft jetzt die in den Umgebungsvariablen festgelegten Anmeldeinformationen ein und verwendet sie, um AWS-Services aufzurufen.
5.Stellen Sie sicher, dass die AWS-CLI die angenommene Rolle für den cluster_creator verwendet:
aws sts get-caller-identity
6.Um dem designated_user Zugriff auf den Cluster zu gewähren, fügen Sie den Abschnitt mapUsers Ihrer aws-auth.yaml-Datei hinzu. Sehen Sie sich die Beispieldatei aws-auth.yaml unter Gewährung des Zugriffs auf Ihren Cluster für IAM-Benutzer und -Rollen an.
7.Fügen Sie den designated_user dem Abschnitt mapUsers der Datei aws-auth.yaml aus Schritt 6 hinzu und speichern Sie anschließend die Datei.
8.Wenden Sie die neue Konfiguration auf die RBAC-Konfiguration des Amazon EKS-Clusters an:
kubectl apply -f aws-auth.yaml
9.Deaktivieren Sie die folgenden Umgebungsvariablen:
unset AWS_ACCESS_KEY_ID unset AWS_SESSION_TOKEN unset AWS_SECRET_ACCESS_KEY
10.Zeigen Sie die IAM-Benutzerdetails des designated_user an:
aws sts get-caller-identity
11.Stellen Sie sicher, dass der designated_user Zugriff auf den Cluster hat:
kubectl get pods
Wenn alles richtig eingerichtet ist, erhalten Sie keine „Nicht autorisiert“-Fehlermeldung. Die Ausgabe listet alle Pods auf, die im Standard-Namespace laufen. Wenn die Ausgabe zeigt, dass keine Ressourcen gefunden wurden, werden keine Pods im Standard-Namespace ausgeführt.
Hinweis: Wenn Sie eksctl verwenden, sollten Sie die Lösung unter IAM-Benutzer und -Rollen verwalten auf der Weaveworks-Website in Betracht ziehen.
Ähnliche Informationen
Ähnliche Videos
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren