Gewährung IAM Benutzerzugriff auf Kubernetes mit einem ConfigMap - Amazon EKS

Helfen Sie mit, diese Seite zu verbessern

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Möchten Sie zu diesem Benutzerhandbuch beitragen? Wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet. Ihre Beiträge werden dazu beitragen, dass unser Benutzerhandbuch für alle besser wird.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Gewährung IAM Benutzerzugriff auf Kubernetes mit einem ConfigMap

Wichtig

Der aws-auth ConfigMap ist veraltet. Für die empfohlene Methode zur Verwaltung des Zugriffs auf Kubernetes APIs, sieheGewährung IAM Benutzerzugriff auf Kubernetes mit EKS-Zugangseinträgen.

Der Zugriff auf Ihren Cluster mithilfe von IAM-Prinzipalen wird durch den AWS IAM Authenticator for Kubernetes ermöglicht, der auf der Amazon EKS-Steuerebene ausgeführt wird. Der Authenticator erhält seine Konfigurationsinformationen von aws-auth ConfigMap. Alle aws-authConfigMap Einstellungen finden Sie unter Vollständiges Konfigurationsformat auf GitHub.

Hinzufügen von IAM-Prinzipal zu Ihrem Amazon EKS-Cluster

Wenn Sie einen Amazon EKS-Cluster erstellen, erhält der IAM-Principal, der den Cluster erstellt, automatisch system:masters Berechtigungen für die rollenbasierte Zugriffskontrolle (RBAC) des Clusters in der Amazon EKS-Kontrollebene. Dieser Principal erscheint in keiner sichtbaren Konfiguration. Vergewissern Sie sich daher, dass Sie stets im Auge behalten, welcher Prinzipal den Cluster ursprünglich erstellt hat. Um weiteren IAM-Prinzipalen die Möglichkeit zu geben, mit Ihrem Cluster zu interagieren, bearbeiten Sie das aws-auth ConfigMap Kubernetes und erstellen Sie ein Kubernetes rolebindingoder clusterrolebinding mit dem Namen einesgroup, den Sie in der angebenaws-auth ConfigMap.

Anmerkung

Weitere Informationen zur Kubernetes Konfiguration der rollenbasierten Zugriffskontrolle (RBAC), siehe Verwenden der RBAC-Autorisierung im Kubernetes -Dokumentation.

  1. Bestimmen Sie, welche Anmeldeinformationen kubectl für den Zugriff auf Ihren Cluster verwendet. Amazon Resource Name (ARN)Auf Ihrem Computer können Sie mit dem folgenden Befehl sehen, welche Anmeldeinformationen kubectl verwendet. ~/.kube/configErsetzen Sie ihn durch den Pfad zu Ihrer kubeconfig Datei, wenn Sie nicht den Standardpfad verwenden.

    cat ~/.kube/config

    Eine Beispielausgabe sieht wie folgt aus.

    [...] contexts: - context: cluster: my-cluster.region-code.eksctl.io user: admin@my-cluster.region-code.eksctl.io name: admin@my-cluster.region-code.eksctl.io current-context: admin@my-cluster.region-code.eksctl.io [...]

    In der vorherigen Beispielausgabe werden die Anmeldeinformationen für einen Benutzer mit dem Namen admin für einen Cluster mit dem Namen my-cluster konfiguriert. Wenn dies der Benutzer ist, der den Cluster erstellt hat, hat er bereits Zugriff auf Ihren Cluster. Wenn es nicht der Benutzer ist, der den Cluster erstellt hat, müssen Sie die verbleibenden Schritte ausführen, um den Clusterzugriff für andere IAM-Prinzipale zu aktivieren. Bewährte Methoden für IAM empfehlen, dass Sie Rollen statt Benutzern Berechtigungen gewähren. Mit dem folgenden Befehl können Sie sehen, welche anderen Prinzipale derzeit Zugriff auf Ihren Cluster haben:

    kubectl describe -n kube-system configmap/aws-auth

    Eine Beispielausgabe sieht wie folgt aus.

    Name:         aws-auth
    Namespace:    kube-system
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    mapRoles:
    ----
    - groups:
      - system:bootstrappers
      - system:nodes
      rolearn: arn:aws: iam::111122223333:role/my-node-role
      username: system:node:{{EC2PrivateDNSName}}
    
    
    BinaryData
    ====
    
    Events:  <none>

    Das vorherige Beispiel ist ein standardmäßiger aws-auth ConfigMap. Nur die Knoten-Instance-Rolle hat Zugriff auf den Cluster.

  2. Stellen Sie sicher, dass Sie bereits vorhanden sind Kubernetes rolesund rolebindings oder clusterroles und clusterrolebindings denen Sie IAM-Prinzipale zuordnen können. Weitere Informationen zu diesen Ressourcen finden Sie unter Verwenden der RBAC-Autorisierung im Kubernetes -Dokumentation.

    1. Sehen Sie sich Ihre vorhandenen an Kubernetes rolesoderclusterroles. Rolessind auf a beschränktnamespace, clusterroles sind aber auf den Cluster beschränkt.

      kubectl get roles -A
      kubectl get clusterroles
    2. Zeigen Sie die Details einer beliebigen role oder clusterrole an, die in der vorherigen Ausgabe zurückgegeben wurden, und bestätigen Sie, dass Sie die Berechtigungen (rules) hat, die Ihre IAM-Prinzipale in Ihrem Cluster haben sollen.

      Ersetzen Sie role-name durch einen role-Namen, den der vorherige Befehl zurückgegeben hat. Ersetzen Sie kube-system durch den Namespace der role.

      kubectl describe role role-name -n kube-system

      Ersetzen Sie cluster-role-name durch einen clusterrole-Namen, den der vorherige Befehl zurückgegeben hat.

      kubectl describe clusterrole cluster-role-name
    3. Sehen Sie sich Ihr vorhandenes an Kubernetes rolebindingsoderclusterrolebindings. Rolebindingssind auf a beschränktnamespace, clusterrolebindings sind aber auf den Cluster beschränkt.

      kubectl get rolebindings -A
      kubectl get clusterrolebindings
    4. Zeigen Sie die Details einer beliebigen rolebinding oder clusterrolebinding an und bestätigen Sie, dass sie eine role oder clusterrole aus dem vorherigen Schritt hat, die als roleRef aufgeführt wird, und einen Gruppennamen, der für subjects aufgeführt wird.

      Ersetzen Sie role-binding-name durch einen rolebinding-Namen, den der vorherige Befehl zurückgegeben hat. Ersetzen SIe kube-system mit dem namespace der rolebinding.

      kubectl describe rolebinding role-binding-name -n kube-system

      Eine Beispielausgabe sieht wie folgt aus.

      apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-console-dashboard-restricted-access-role-binding namespace: default subjects: - kind: Group name: eks-console-dashboard-restricted-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-console-dashboard-restricted-access-role apiGroup: rbac.authorization.k8s.io

      Ersetzen Sie cluster-role-binding-name durch einen clusterrolebinding-Namen, den der vorherige Befehl zurückgegeben hat.

      kubectl describe clusterrolebinding cluster-role-binding-name

      Eine Beispielausgabe sieht wie folgt aus.

      apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks-console-dashboard-full-access-binding subjects: - kind: Group name: eks-console-dashboard-full-access-group apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: eks-console-dashboard-full-access-clusterrole apiGroup: rbac.authorization.k8s.io
  3. Bearbeiten Sie aws-auth ConfigMap. Sie können ein Tool wie eksctl verwenden, um die ConfigMap zu aktualisieren, oder Sie können sie durch manuelle Bearbeitung aktualisieren.

    Wichtig

    Wir empfehlen die Verwendung von eksctl oder einem anderen Tool, um die ConfigMap zu bearbeiten. Informationen zu anderen Tools, die Sie verwenden können, finden Sie unter Use tools to make changes to the aws- authConfigMap in den Amazon EKS-Best-Practices-Leitfäden. Ist aws-auth ConfigMap falsch formatiert, können Sie den Zugriff auf Ihren Cluster verlieren.

Bearbeiten Sie Configmap mit Eksctl

  1. Sie benötigen eine Version 0.199.0 oder eine neuere Version des eksctl Befehlszeilentools, das auf Ihrem Gerät installiert ist oder. AWS CloudShell Informationen zum Installieren und Aktualisieren von eksctl finden Sie in der Dokumentation zu eksctl unter Installation.

  2. Zeigen Sie die aktuellen Mappings in der ConfigMap an. Ersetzen Sie my-cluster mit dem Namen Ihres Clusters. region-codeErsetzen Sie es durch die AWS Region, in der sich Ihr Cluster befindet.

    eksctl get iamidentitymapping --cluster my-cluster --region=region-code

    Eine Beispielausgabe sieht wie folgt aus.

    ARN USERNAME GROUPS ACCOUNT arn:aws: iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
  3. Fügen Sie ein Mapping für eine Rolle hinzu. Ersetzen Sie my-role durch den Namen Ihrer Rolle. eks-console-dashboard-full-access-groupErsetzen Sie es durch den Namen der Gruppe, die in Ihrem Kubernetes RoleBindingoder ClusterRoleBinding Objekt. Ersetzen Sie 111122223333 durch Ihre Konto-ID. Sie können admin mit einem beliebigen Namen ersetzen, den Sie wählen.

    eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws: iam::111122223333:role/my-role --username admin --group eks-console-dashboard-full-access-group \ --no-duplicate-arns
    Wichtig

    Der Rollen-ARN darf keinen Pfad wie enthaltenrole/my-team/developers/my-role. Das Format des ARN muss arn:aws: iam::111122223333:role/my-role sein. In diesem Beispiel muss my-team/developers/ entfernt werden.

    Eine Beispielausgabe sieht wie folgt aus.

    [...] 2022-05-09 14:51:20 [ℹ] adding identity "{arn-aws}iam::111122223333:role/my-role" to auth ConfigMap
  4. Fügen Sie ein Mapping für einen Benutzer hinzu. Bewährte Methoden für IAM empfehlen, dass Sie Rollen statt Benutzern Berechtigungen gewähren. Ersetzen Sie my-user durch den Benutzernamen. eks-console-dashboard-restricted-access-groupErsetzen Sie es durch den Namen der Gruppe, die in Ihrem Kubernetes RoleBindingoder ClusterRoleBinding Objekt. Ersetzen Sie 111122223333 durch Ihre Konto-ID. Sie können my-user mit einem beliebigen Namen ersetzen, den Sie wählen.

    eksctl create iamidentitymapping --cluster my-cluster --region=region-code \ --arn arn:aws: iam::111122223333:user/my-user --username my-user --group eks-console-dashboard-restricted-access-group \ --no-duplicate-arns

    Eine Beispielausgabe sieht wie folgt aus.

    [...] 2022-05-09 14:53:48 [ℹ] adding identity "arn:aws: iam::111122223333:user/my-user" to auth ConfigMap
  5. Zeigen Sie wieder die Mappings in der ConfigMap an.

    eksctl get iamidentitymapping --cluster my-cluster --region=region-code

    Eine Beispielausgabe sieht wie folgt aus.

    ARN USERNAME GROUPS ACCOUNT arn:aws: iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes arn:aws: iam::111122223333:role/admin my-role eks-console-dashboard-full-access-group arn:aws: iam::111122223333:user/my-user my-user eks-console-dashboard-restricted-access-group

Configmap manuell bearbeiten

  1. Öffnen Sie ConfigMap zum Bearbeiten.

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

    Wenn Sie eine Fehlermeldung mit der Angabe "Error from server (NotFound): configmaps "aws-auth" not found" erhalten, wenden Sie das Verfahren unter AWS-Auth auf Ihren Cluster anwenden ConfigMap an, um den Bestand anzuwenden. ConfigMap

  2. Fügen Sie Ihre IAM-Prinzipale zu der ConfigMap hinzu. Eine IAM-Gruppe ist kein IAM-Prinzipal und kann daher nicht zur hinzugefügt werden. ConfigMap

    • 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. Dieser Wert darf keinen Pfad enthalten. Sie können beispielsweise keinen ARN wie angeben arn:aws: iam::111122223333:role/my-team/developers/role-name . Der ARN muss stattdessen arn:aws: iam::111122223333:role/role-name sein.

      • username: Der Benutzername innerhalb Kubernetes um der IAM-Rolle zuzuordnen.

      • Gruppen: Die Gruppe oder Liste von Kubernetes Gruppen, denen die Rolle zugeordnet werden soll. Die Gruppe kann eine Standardgruppe oder eine Gruppe sein, die in einer clusterrolebinding oder rolebinding angegeben ist. Weitere Informationen finden Sie unter Standardrollen und Rollenbindungen im Kubernetes -Dokumentation.

    • Um einen IAM-Benutzer hinzuzufügen: Bewährte Methoden von IAM empfehlen, dass Sie Rollen statt Benutzern Berechtigungen gewähren. 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 um es dem IAM-Benutzer zuzuordnen.

      • Gruppen: Die Gruppe oder Liste von Kubernetes Gruppen, denen der Benutzer zugeordnet werden soll. Die Gruppe kann eine Standardgruppe oder eine Gruppe sein, die in einer clusterrolebinding oder rolebinding angegeben ist. Weitere Informationen finden Sie unter Standardrollen und Rollenbindungen im Kubernetes -Dokumentation.

  3. Beispiel: Der folgende YAML-Block enthält:

    • Ein mapRoles Abschnitt, der die IAM-Knoteninstanz zuordnet Kubernetes Gruppen, sodass sich Knoten selbst beim Cluster und der my-console-viewer-role IAM-Rolle registrieren können, die einem zugeordnet ist Kubernetes Gruppe, die alle anzeigen kann Kubernetes Ressourcen für alle Cluster. Für eine Liste der IAM und Kubernetes Für die my-console-viewer-role IAM-Rolle erforderliche Gruppenberechtigungen finden Sie unter. Erforderliche Berechtigungen

    • Ein mapUsers Abschnitt, der den admin IAM-Benutzer vom AWS Standardkonto dem system:masters Kubernetes Gruppe und der my-user Benutzer aus einem anderen AWS Konto, das einem zugeordnet ist Kubernetes Gruppe, die Folgendes anzeigen kann Kubernetes Ressourcen für einen bestimmten Namespace. Für eine Liste der IAM und Kubernetes Für den my-user IAM-Benutzer erforderliche Gruppenberechtigungen finden Sie unter. Erforderliche Berechtigungen

      Fügen Sie nach Bedarf Zeilen hinzu oder entfernen Sie sie und ersetzen Sie alle example values durch eigene 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: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws: iam::111122223333:role/my-role username: system:node:{{EC2PrivateDNSName}} - groups: - eks-console-dashboard-full-access-group rolearn: arn:aws: iam::111122223333:role/my-console-viewer-role username: my-console-viewer-role mapUsers: | - groups: - system:masters userarn: arn:aws: iam::111122223333:user/admin username: admin - groups: - eks-console-dashboard-restricted-access-group userarn: arn:aws: iam::444455556666:user/my-user username: my-user
  4. Speichern Sie die Datei und beenden Sie den Text-Editor.

Anwenden von aws-authConfigMap auf Ihren Cluster

aws-auth ConfigMap wird automatisch erstellt und auf Ihren Cluster angewendet, wenn Sie eine verwaltete Knotengruppe erstellen oder wenn Sie eine Knotengruppe mit eksctl erstellen. Sie wird anfänglich erstellt, um Knoten zu erlauben, Ihrem Cluster beizutreten, aber Sie verwenden diese ConfigMap auch, um rollenbasierten Zugriffssteuerungs(RBAC)-Zugriff auf IAM-Prinzipale hinzuzufügen. Wenn Sie selbstverwaltete Knoten gestartet und diese noch nicht aws-auth ConfigMap auf Ihren Cluster angewendet haben, können Sie dies mit dem folgenden Verfahren tun.

  1. Prüfen Sie, ob Sie das bereits angewendet haben. aws-auth ConfigMap

    kubectl describe configmap -n kube-system aws-auth

    Wenn Sie eine Fehlermeldung mit der Angabe "Error from server (NotFound): configmaps "aws-auth" not found" erhalten, fahren Sie mit den folgenden Schritten fort, um die Aktie anzuwendenConfigMap.

  2. Laden Sie die AWS Authenticator-Konfigurationsübersicht herunter, bearbeiten Sie sie und wenden Sie sie an.

    1. Laden Sie die Konfigurationszuordnung herunter.

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Stellen Sie in der Datei aws-auth-cm.yaml rolearn auf den Amazon-Ressourcennamen (ARN) der IAM-Rolle ein, die Ihren Knoten zugeordnet ist. Hierzu können Sie einen Texteditor verwenden oder my-node-instance-role ersetzen und den folgenden Befehl ausführen:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml

      Ändern Sie keine anderen Zeilen in dieser Datei.

      Wichtig

      Der Rollen-ARN darf keinen Pfad wie enthaltenrole/my-team/developers/my-role. Das Format des ARN muss arn:aws: iam::111122223333:role/my-role sein. In diesem Beispiel muss my-team/developers/ entfernt werden.

      Sie können die AWS CloudFormation Stack-Ausgaben für Ihre Knotengruppen überprüfen und nach den folgenden Werten suchen:

      • InstanceRoleARN — Für Knotengruppen, die erstellt wurden mit eksctl

      • NodeInstanceRole— Für Knotengruppen, die mit von Amazon EKS bereitgestellten AWS CloudFormation Vorlagen erstellt wurden, im AWS Management Console

    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 Thema 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

    Geben Sie Ctrl+C ein, um zu einer Shell-Eingabeaufforderung zurückzukehren.