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

Hilf mit, diese Seite zu verbessern

Möchten Sie zu diesem Benutzerhandbuch beitragen? Scrollen Sie zum Ende dieser Seite und wählen Sie Diese Seite bearbeiten am aus GitHub. Ihre Beiträge werden dazu beitragen, unser Benutzerhandbuch für alle 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.

Gewährung IAM Benutzerzugriff auf Kubernetes mit einem ConfigMap

Wichtig

Die aws-auth ConfigMap ist veraltet. Die empfohlene Methode zur Verwaltung des Zugriffs auf Kubernetes APIsist Access Entries.

Der Zugriff auf Ihren Cluster mithilfe von IAMPrinzipalen wird durch den AWS IAM Authenticator für ermöglicht Kubernetes, das auf der EKS Amazon-Steuerebene läuft. Der Authenticator erhält seine Konfigurationsinformationen von aws-auth ConfigMap. Alle aws-auth ConfigMap Einstellungen finden Sie unter Vollständiges Konfigurationsformat auf GitHub.

Fügen Sie Ihrem EKS Amazon-Cluster IAM Principals hinzu

Wenn Sie einen EKS Amazon-Cluster erstellen, erhält der IAMPrincipal, der den Cluster erstellt, automatisch system:masters Berechtigungen in der Konfiguration der rollenbasierten Zugriffskontrolle (RBAC) des Clusters in der EKS Amazon-Steuerungsebene. Dieser Prinzipal wird in keiner sichtbaren Konfiguration angezeigt. Achten Sie daher darauf, welcher Prinzipal den Cluster ursprünglich erstellt hat. Um weiteren IAM Prinzipalen die Möglichkeit zu geben, mit Ihrem Cluster zu interagieren, bearbeiten Sie die darin enthaltenen 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.

So fügen Sie einem EKS Amazon-Cluster einen IAM Principal hinzu
  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. Ersetzen Sie ~/.kube/config 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 Cluster-Zugriff für andere IAM Prinzipale zu aktivieren. IAMBewährte Methoden 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 Kubernetes rolesund rolebindings oder clusterroles und clusterrolebindings denen Sie IAM Principals zuordnen können. Weitere Informationen zu diesen Ressourcen finden Sie unter Using RBAC Authorization 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. Sehen Sie sich die Details eines beliebigen role oder in der vorherigen Ausgabe clusterrole zurückgegebenen Objekts an und vergewissern Sie sich, dass es über die Berechtigungen (rules) verfügt, die Ihren IAM Prinzipalen in Ihrem Cluster zugewiesen werden 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 Ihre vorhandenen 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 Verwenden von Tools, um Änderungen an den vorzunehmen aws-authConfigMap in den EKS Amazon-Best-Practices-Handbüchern. Ist aws-auth ConfigMap falsch formatiert, können Sie den Zugriff auf Ihren Cluster verlieren.

    eksctl
    Voraussetzung

    Version 0.191.0 oder höher des eksctl-Befehlszeilen-Tools, das auf Ihrem Computer oder in der AWS CloudShell installiert ist. Informationen zum Installieren und Aktualisieren von eksctl finden Sie in der Dokumentation zu eksctl unter Installation.

    1. Zeigen Sie die aktuellen Mappings in der ConfigMap an. Ersetzen Sie my-cluster mit dem Namen Ihres Clusters. region-codeErsetzen Sie es durch AWS-Region das, in dem 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
    2. 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 durch den Namen der Gruppe, die in Ihrem Kubernetes RoleBindingoder ClusterRoleBinding Objekt. Ersetzen Sie 111122223333 durch Ihre Konto-ID. Sie können ersetzen admin mit einem beliebigen Namen, 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

      Die Rolle ARN darf keinen Pfad wie enthaltenrole/my-team/developers/my-role. Das Format von ARN muss seinarn:aws:iam::111122223333:role/my-role. 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
    3. Fügen Sie ein Mapping für einen Benutzer hinzu. IAMBewährte Methoden 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 ersetzen my-user mit einem beliebigen Namen, 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
    4. 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
    Edit ConfigMap manually
    1. Öffnen Sie ConfigMap zum Bearbeiten.

      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 Verfahren in Anwenden von aws-authConfigMap auf Ihren Cluster, um die lokal gespeicherte ConfigMap anzuwenden.

    2. Fügen Sie Ihre IAM Schulleiter zum ConfigMap hinzu. Eine IAM Gruppe ist kein IAM Hauptbenutzer und kann daher nicht zur hinzugefügt werden. ConfigMap

      • Um eine IAM Rolle hinzuzufügen (z. B. für Verbundbenutzer): Fügen Sie die Rollendetails dem mapRoles Abschnitt von hinzuConfigMap, unterdata. Fügen Sie diesen Abschnitt hinzu, wenn er nicht bereits in der Datei vorhanden sind. Jeder Eintrag unterstützt die folgenden Parameter:

        • rolearn: Die IAM Rolle, ARN die hinzugefügt werden soll. Dieser Wert darf keinen Pfad enthalten. Beispielsweise können Sie kein ARN solches wie arn:aws:iam::111122223333:role/my-team/developers/role-name angeben. Das ARN muss arn:aws:iam::111122223333:role/role-name stattdessen 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.

      • So fügen Sie einen IAM Benutzer hinzu: IAM Bewährte Methoden 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: Der Name ARN des IAM Benutzers, der hinzugefügt werden soll.

        • username: Der Benutzername innerhalb 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.

      Der folgende YAML Block enthält beispielsweise:

      • Ein mapRoles Abschnitt, der die IAM Knoteninstanz zuordnet Kubernetes Gruppen, sodass sich Knoten bei dem Cluster und der my-console-viewer-role IAM Rolle, die einem zugeordnet ist, registrieren können 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 unterErforderliche Berechtigungen.

      • Ein mapUsers Abschnitt, der den admin IAM Benutzer vom AWS Standardkonto dem folgenden zuordnet 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 und IAM Kubernetes Für den my-user IAM Benutzer erforderliche Gruppenberechtigungen finden Sie unterErforderliche Berechtigungen.

      Fügen Sie nach Bedarf Zeilen hinzu oder entfernen Sie sie und ersetzen Sie alle Beispielwerte mit deinen eigenen Werten.

      # 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
    3. 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. Es wurde ursprünglich erstellt, um Knoten den Beitritt zu Ihrem Cluster zu ermöglichen. Sie verwenden es jedoch auch, ConfigMap um Prinzipalen einen rollenbasierten Zugriffskontrollzugriff (RBAC) hinzuzufügen. IAM Wenn Sie keine selbstverwalteten Knoten gestartet und aws-auth ConfigMap nicht auf Ihren Cluster angewendet haben, können Sie das folgende Verfahren dafür verwenden.

Anwendung der aws-authConfigMap auf Ihren Cluster
  1. Überprüfen Sie, ob Sie 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 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 aws-auth-cm.yaml Datei rolearn 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 weiteren Zeilen in dieser Datei.

      Wichtig

      Die Rolle ARN darf keinen Pfad wie enthaltenrole/my-team/developers/my-role. Das Format von ARN muss seinarn:aws:iam::111122223333:role/my-role. 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.