Wie gewähre ich anderen IAM-Benutzern und -Rollen Zugriff auf einen Cluster, nachdem ich einen Cluster in Amazon EKS erstellt habe?

Lesedauer: 7 Minute
0

Wenn ich kubectl-Befehle verwende, um auf einen Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster zuzugreifen, erhalte ich die Fehlermeldung: „You must be logged in to the server (Unauthorized)“.

Kurzbeschreibung

Wenn der Benutzer oder die Rolle des AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement) einen Amazon EKS-Cluster erstellt, der sich von dem Cluster unterscheidet, den aws-iam-authenticator verwendet, erhalten Sie die Fehlermeldung Nicht autorisiert. Um dieses Problem zu beheben, konfigurieren Sie die rollenbasierte Zugriffskontrolle (RBAC) Ihres Amazon EKS-Clusters, um die IAM-Entität zu autorisieren. Weitere Informationen finden Sie unter Verwendung der RBAC-Autorisierung auf der Kubernetes-Website.

Nur der Ersteller des Amazon EKS-Clusters verfügt über system:masters-Berechtigungen zur Konfiguration des Clusters. Es gibt zwei Möglichkeiten, system:masters-Berechtigungen auf andere IAM-Benutzer und -Rollen auszudehnen:

  • Nehmen Sie die Anmeldeinformationen des Cluster-Erstellers an. Fügen Sie dann die IAM-Rolle im Bereich mapRoles der aws-auth ConfigMap hinzu.
  • Verwenden Sie EKS-Zugriffseinträge.

Wichtig: Es hat sich bewährt, cluster_creator nicht zur ConfigMap hinzuzufügen. Wenn Sie die ConfigMap falsch konfigurieren, verlieren alle IAM-Benutzer und -Rollen, einschließlich cluster_creator, möglicherweise dauerhaft den Zugriff auf den Amazon EKS-Cluster. Standardmäßig hat der cluster_creator Administratorzugriff auf den Cluster, den er erstellt hat, sodass Sie den cluster_creater nicht zur aws-auth ConfigMap hinzufügen müssen.

Hinweis: In der folgenden Lösung ist cluster_creator die IAM-Entität, die den Cluster in Amazon EKS erstellt. Der Benutzer, dem Sie Zugriff gewähren, wird designated_user bezeichnet.

Lösung

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhalten, finden Sie weitere Informationen unter Problembehandlung bei der AWS CLI. Stellen Sie außerdem sicher, dass Sie die neueste Version der AWS CLI verwenden.

Identifizieren des IAM-Benutzer oder der IAM-Rolle für den Clusterersteller

Identifizieren Sie die IAM-Entität für den Clusterersteller, die über den primären Zugriff auf die Konfiguration des Amazon EKS-Clusters verfügt. 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.

Identifizieren Sie dann die IAM-Entität, der Sie die Autorisierung gewähren, nachdem Sie den Cluster erstellt haben.

Verwendung der aws-auth ConfigMap, um Zugriff auf den Cluster zu gewähren, wenn der cluster_creator ein IAM-Benutzer ist

Führen Sie die folgenden Schritte aus:

  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 den AWS CLI-Befehl get-caller-identity aus:

    aws sts get-caller-identity

    Die Ausgabe gibt die IAM-Benutzerdetails für den designated_user zurück:

    {  
        "UserId": "#####################",  
        "Account": "############",  
        "Arn": "arn:aws:iam::############:user/designated_user"  
    }
  4. Listen Sie die Pods auf, die im Cluster des Standard-Namespace ausgeführt werden:

    kubectl get pods --namespace default

    In der Ausgabe wird die Fehlermeldung Nicht authorisiert angezeigt, da der designated_user nicht berechtigt ist, auf den Amazon EKS-Cluster zuzugreifen.

  5. Konfigurieren Sie die AWS-Zugriffsschlüssel-ID und den geheimen AWS-Zugriffsschlüssel des cluster_creator.
    Wenn Sie die Amazon EKS-Konsole verwendet haben, um den Cluster zu erstellen, konfigurieren Sie auf Ihrem lokalen Host-Computer den IAM-Benutzer oder die -Rolle cluster_creator in der AWS CLI:

    aws configure

    Wenn Sie eksctl verwendet haben, um den Cluster zu erstellen, verwenden Sie die 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

    Sie erhalten die Fehlermeldung Nicht autorisiert nicht, und in der Ausgabe werden alle Pods aufgeführt, die im Standard-Namespace ausgeführt werden. Wenn die Ausgabe keine Ressourcen anzeigt, 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. Weitere Informationen finden Sie unter Hinzufügen von IAM-Prinzipien zum Amazon EKS-Cluster.

  8. Fügen Sie den designated_user dem Abschnitt mapUsers der Datei aws-auth.yaml 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
  1. Stellen Sie sicher, dass der designated_user Zugriff auf den Cluster hat:
kubectl get pods

Sie erhalten die Fehlermeldung Nicht autorisiert nicht, und in der Ausgabe werden alle Pods aufgeführt, die im Standard-Namespace ausgeführt werden. Wenn die Ausgabe keine Ressourcen anzeigt, werden keine Pods im Standard-Namespace ausgeführt.

Verwenden Sie aws-auth ConfigMap, um Zugriff auf den Cluster zu gewähren, wenn der cluster_creator eine IAM-Rolle ist

Wenn eine IAM-Rolle den Cluster anstelle eines IAM-Benutzers erstellt hat, können Sie keine Anmeldeinformationen verwenden. Stattdessen müssen Sie die IAM-Rolle übernehmen, die den Cluster erstellt hat, um dem designated_user Zugriff zu gewähren.

Führen Sie die folgenden Schritte aus:

  1. Führen Sie den AWS CLI-Befehl get-caller-identity aus, um die IAM-Benutzerdetails des assume_role_user abzurufen:

    aws sts get-caller-identity
  2. Stellen Sie sicher, dass der assume_role_user Zugriff auf den Cluster hat:

    kubectl get pods

    In der Ausgabe wird die Fehlermeldung Nicht authorisiert angezeigt, da der designated_user nicht berechtigt ist, auf den Amazon EKS-Cluster zuzugreifen.

  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:

    export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE  
    export AWS_SESSION_TOKEN=EXAMPLETOKEN  
    export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

    Die AWS CLI stuft 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.

  7. Fügen Sie den designated_user dem Abschnitt mapUsers der Datei aws-auth.yaml 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. Entfernen Sie die folgenden Umgebungsvariablen:

    unset AWS_ACCESS_KEY_ID  
    unset AWS_SESSION_TOKEN  
    unset AWS_SECRET_ACCESS_KEY
  10. Führen Sie den AWS CLI-Befehl get-caller-identity aus, um die IAM-Benutzerdetails des designated_user abzurufen:

aws sts get-caller-identity
  1. Vergewissern Sie sicher, dass der designated_user Zugriff auf den Cluster hat:
kubectl get pods

Sie erhalten die Fehlermeldung Nicht autorisiert nicht, und in der Ausgabe werden alle Pods aufgeführt, die im Standard-Namespace ausgeführt werden. Wenn die Ausgabe keine Ressourcen anzeigt, werden keine Pods im Standard-Namespace ausgeführt.

**Hinweis:**Wenn Sie eksctl verwenden, finden Sie weitere Informationen unter IAM-Benutzer und -Rollen verwalten auf der eksctl-Website.

Verwenden Sie EKS-Zugriffseinträge, um IAM-Benutzern und -Rollen den Zugriff auf Cluster zu gewähren

Amazon EKS unterstützt drei Authentifizierungsmodi für Zugriffseinträge:

  • CONFIG_MAP, um nur aws-auth ConfigMap zu verwenden.
  • API_AND_CONFIG_MAP, um sowohl Eingabe-APIs für den EKS-Zugriff als auch aws-auth ConfigMap zu verwenden. Dieser Modus priorisiert die Authentifizierung über EKS-Zugriffseinträge und ist nützlich, wenn Sie vorhandene aws-auth-Berechtigungen zu EKS-Zugriffseinträgen migrieren müssen.
  • API, um nur APIs für EKS-Zugriffseinträge zu verwenden.

Weitere Informationen finden Sie unter IAM-Benutzern und -Rollen Zugriff auf Kubernetes-APIs gewähren.

Um Ihren Cluster mit Zugriffseinträgen zu konfigurieren, setzen Sie den Cluster-Authentifizierungsmodus auf EKS API oder EKS API und ConfigMap.

Gehen Sie wie folgt vor, um den aktuellen Authentifizierungsmodus des Clusters zu überprüfen:

  1. Öffnen Sie die Amazon EKS-Konsole.
  2. Wählen Sie die Registerkarte Zugriff.
  3. Überprüfen Sie unter Zugriffskonfiguration die Bezeichnung Authentifizierungsmodus.

Oder führen Sie den Befehl describe-cluster aus:

aws eks describe-cluster --name example-cluster --query 'cluster.accessConfig.authenticationMode' --region exampleRegion

Wenn der Authentifizierungsmodus des Clusters EKS API oder ** EKS API und ConfigMap** ist, können Sie den Cluster so konfigurieren, dass er Zugriffseinträge verwendet. Falls nicht, finden Sie weitere Informationen unter Änderung des Authentifizierungsmodus, um Zugriffseinträge zu verwenden.

Hinweis: Sie können vom Authentifizierungsmodus CONFIG_MAP in den API-Modus wechseln, aber Sie können nicht vom API- oder API_AND_CONFIG_MAP.Modus in den CONFIG_MAP-Modus wechseln. Weitere Informationen finden Sie unter Cluster Access Manager auf der GitHub-Website.

Ähnliche Informationen

Eine IAM-Rolle in der AWS CLI verwenden

IAM-Benutzern Zugriff auf Kubernetes mit EKS-Zugriffseinträgen gewähren

Migration vorhandener aws-auth ConfigMap-Einträge, um auf Einträge zuzugreifen

Wie kann ich die API für Amazon EKS-Zugriffseinträge verwenden, um den Zugriff auf einen EKS-Cluster wiederherzustellen?