Verwalten von Benutzern oder IAM-Rollen für Ihren Cluster - Amazon EKS

Verwalten von Benutzern oder IAM-Rollen für Ihren Cluster

Wenn Sie einen Amazon EKS-Cluster erstellen, werden dem Benutzer oder der Rolle der IAM-Entität, z. B. einem Verbundbenutzer, der den Cluster erstellt, automatisch system:masters-Berechtigungen in der RBAC-Konfiguration des Clusters in der Steuerungsebene erteilt. Diese IAM-Entität wird weder in der ConfigMap noch in einer anderen sichtbaren Konfiguration angezeigt. Achten Sie daher darauf, welche IAM-Entität den Cluster ursprünglich erstellt hat. Um zusätzlichen AWS-Benutzern oder -Rollen die Fähigkeit zur Interaktion mit Ihrem Cluster zu erteilen, müssen Sie die aws-auth-ConfigMap innerhalb von Kubernetes bearbeiten.

Anmerkung

Weitere Informationen zu unterschiedlichen IAM-Identitäten finden Sie unter Identitäten (Benutzer, Gruppen und Rollen) im IAM-Benutzerhandbuch. Weitere Informationen zur Kubernetes-RBAC-Konfiguration finden Sie unter Using RBAC Authorization. Alle ConfigMap-Einstellungen finden Sie unter Vollständiges Konfigurationsformat auf GitHub.

Die aws-auth-ConfigMap wird als Teil der Erste Schritte mit Amazon EKS-Anleitung angewendet, die eine vollständige End-to-End-Anleitung bietet, vom Erstellen eines Amazon-EKS-Clusters bis zur Bereitstellung einer Kubernetes-Beispielanwendung. Sie wird anfänglich erstellt, um Ihren Knoten zu erlauben, Ihrem Cluster beizutreten, aber Sie verwenden diese ConfigMap auch, um RBAC-Zugriff auf IAM-Benutzer und -Rollen hinzuzufügen. Wenn Sie keine Knoten gestartet und die aws-auth-ConfigMap nicht angewendet haben, können Sie das folgende Verfahren dafür verwenden.

Anwendung der aws-auth-ConfigMap auf Ihren Cluster

  1. Überprüfen Sie, ob Sie die aws-auth-ConfigMap bereits angewendet haben.

    kubectl describe configmap -n kube-system aws-auth

    Wenn die Fehlermeldung „Error from server (NotFound): configmaps "aws-auth" not found“ angezeigt wird, fahren Sie mit den folgenden Schritten fort, um die lokal gespeicherte ConfigMap anzuwenden.

  2. Laden Sie die AWS-Authentifizierungs-Konfigurationszuordnung herunter, bearbeiten Sie sie und wenden Sie sie an.

    1. Laden Sie die Konfigurationszuordnung herunter.

      curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Öffnen Sie die Datei mit einem Texteditor Ihrer Wahl. Ersetzen Sie <ARN of instance role (not instance profile)> durch den Amazon-Ressourcennamen (ARN) der IAM-Rolle, die Ihren Knoten zugeordnet ist, und speichern Sie die Datei. Ändern Sie keine weiteren Zeilen in dieser Datei.

      Wichtig

      Der Rollen-ARN darf keinen Pfad enthalten. Das Format des Rollen-ARN muss sein arn:aws:iam::<123456789012>:role/<role-name>. Weitere Informationen finden Sie unter aws-auth-ConfigMap gewährt keinen Zugriff auf den Cluster.

      apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes

      Sie können die AWS CloudFormation-Stack-Ausgaben für Ihre Workerknoten-Gruppen auf die folgenden Werte überprüfen:

      • InstanceRoleARN (für Knoten-Gruppen, die mit eksctl erstellt wurden)

      • NodeInstanceRole (für Knotengruppen, die mit von Amazon EKS verkauften AWS CloudFormation-Vorlagen im AWS Management Console erstellt wurden)

    3. Wenden Sie die Konfiguration an. Die Ausführung dieses Befehls kann einige Minuten dauern.

      kubectl apply -f aws-auth-cm.yaml
      Anmerkung

      Wenn Sie Autorisierungs- oder Ressourcenfehler erhalten, finden Sie weitere Informationen unter Nicht autorisiert oder Zugriff verweigert (kubectl) im Abschnitt zur Fehlerbehebung.

  3. Sehen Sie sich den Status Ihrer Knoten an und warten Sie, bis diese in den Ready-Status eintreten.

    kubectl get nodes --watch

So fügen Sie einem Amazon-EKS-Cluster einen IAM-Benutzer oder eine IAM-Rolle hinzu

  1. Stellen Sie sicher, dass die AWS-Anmeldeinformationen, die kubectl verwendet, bereits für Ihren Cluster autorisiert sind. Der IAM-Benutzer, der den Cluster erstellt hat, verfügt standardmäßig über diese Berechtigungen.

  2. Öffnen Sie die aws-auth ConfigMap.

    kubectl edit -n kube-system configmap/aws-auth
    Anmerkung

    Wenn die Fehlermeldung „Error from server (NotFound): configmaps "aws-auth" not found“ angezeigt wird, verwenden Sie das oben gezeigte Verfahren, um die lokal gespeicherte ConfigMap anzuwenden.

    Beispiel für eine ConfigMap:

    apiVersion: v1 data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF username: system:node:{{EC2PrivateDNSName}} kind: ConfigMap metadata: creationTimestamp: "2020-09-30T21:09:18Z" name: aws-auth namespace: kube-system resourceVersion: "1021" selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth uid: dcc31de5-3838-11e8-af26-02e00430057c
  3. Fügen Sie Ihre IAM-Benutzer, -Rollen oder AWS-Konten zur configMap hinzu. Sie können der configMap keine IAM-Gruppen hinzufügen.

    • So fügen Sie eine IAM-Rolle hinzu (z. B. für Verbundbenutzer): Fügen Sie die Rollendetails zum Abschnitt mapRoles der ConfigMap unter data hinzu. Fügen Sie diesen Abschnitt hinzu, wenn er nicht bereits in der Datei vorhanden sind. Jeder Eintrag unterstützt die folgenden Parameter:

      • rolearn: Der ARN der IAM-Rolle, den Sie hinzufügen möchten.

      • username: Der Benutzername in Kubernetes für die Zuweisung zur IAM-Rolle.

      • groups: Eine Liste der Gruppen in Kubernetes, denen die Rolle zugeordnet ist. Weitere Informationen finden Sie unter Default Roles and Role Bindings in der Kubernetes-Dokumentation.

    • So fügen Sie einen IAM-Benutzer hinzu: Fügen Sie die Benutzerdetails zum mapUsers-Abschnitt der ConfigMap unter data hinzu. Fügen Sie diesen Abschnitt hinzu, wenn er nicht bereits in der Datei vorhanden sind. Jeder Eintrag unterstützt die folgenden Parameter:

      • userarn: Die ARN des IAM-Benutzers, den Sie hinzufügen möchten.

      • username: Der Benutzername in Kubernetes für die Zuweisung zum IAM-Benutzer.

      • groups: Eine Liste der Gruppen in Kubernetes, denen der Benutzer zugeordnet ist. Weitere Informationen finden Sie unter Default Roles and Role Bindings in der Kubernetes-Dokumentation.

    Beispiel: Der folgende Block enthält:

    • Einen mapRoles-Abschnitt, in dem die Knoten-Instance-Rolle hinzugefügt wird, sodass die Knoten sich selbst mit dem Cluster registrieren können.

    • Ein mapUsers-Abschnitt mit den AWS-Benutzern admin des Standard- AWS-Kontos und ops-usereines anderen AWS-Kontos. Beide Benutzer werden zur Gruppe system:masters hinzugefügt.

    Ersetzen Sie alle <example-values> (einschließlich <>) durch Ihre eigenen Werte.

    # Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - rolearn: <arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF> username: <system:node:{{EC2PrivateDNSName}}> groups: - <system:bootstrappers> - <system:nodes> mapUsers: | - userarn: <arn:aws:iam::111122223333:user/admin> username: <admin> groups: - <system:masters> - userarn: <arn:aws:iam::111122223333:user/ops-user> username: <ops-user> groups: - <system:masters>
  4. Speichern Sie die Datei und beenden Sie den Texteditor.

  5. Stellen Sie sicher, dass der Kubernetes-Benutzer oder die Kubernetes-Gruppe, der Sie den IAM-Benutzer oder die IAM-Rolle zugeordnet haben, mit einem RoleBinding oder ClusterRoleBinding an eine Kubernetes-Rolle gebunden ist. Weitere Informationen finden Sie unter Using RBAC Authorization in der Kubernetes-Dokumentation. Sie können die folgenden Beispielmanifeste herunterladen, die ein clusterrole und clusterrolebinding oder ein role und rolebinding erstellen:

    • Kubernetes-Ressourcen in allen Namespaces anzeigen – Der Gruppenname in der Datei ist eks-console-dashboard-full-access-group, dies ist die Gruppe, der Ihr IAM-Benutzer oder Ihre IAM-Rolle in der aws-auth-Konfigurationszuordnung zugeordnet werden muss. Sie können den Namen der Gruppe bei Bedarf ändern, bevor Sie ihn auf Ihren Cluster anwenden, und dann Ihren IAM-Benutzer oder Ihre IAM-Rolle dieser Gruppe in der configmap zuordnen. Laden Sie die Datei herunter von:

      https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-full-access.yaml
    • Kubernetes-Ressourcen in einem bestimmten Namespace anzeigen – Der Namespace in dieser Datei ist default, wenn Sie also einen anderen Namespace angeben möchten, bearbeiten Sie die Datei, bevor Sie sie auf Ihren Cluster anwenden. Der Gruppenname in der Datei ist eks-console-dashboard-restricted-access-group, dies ist die Gruppe, der Ihr IAM-Benutzer oder Ihre IAM-Rolle in der aws-auth-Konfigurationszuordnung zugeordnet werden muss. Sie können den Namen der Gruppe bei Bedarf ändern, bevor Sie ihn auf Ihren Cluster anwenden, und dann Ihren IAM-Benutzer oder Ihre IAM-Rolle dieser Gruppe in der configmap zuordnen. Laden Sie die Datei herunter von:

      https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-restricted-access.yaml
  6. (Optional) Wenn Sie möchten, dass die Benutzer, die Sie der configmap hinzugefügt haben, View-Knoten oder Anzeigen von Workloads in AWS Management Console verwenden können, muss der Benutzer oder die Rolle beide der folgenden Arten von Berechtigungen haben: