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

Lesedauer: 7 Minute
0

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

Verwenden einer IAM-Rolle in der AWS-CLI

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren