Gewähren Sie IAM Benutzern Zugriff 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ähren Sie IAM Benutzern Zugriff auf Kubernetes mit einem ConfigMap

Wichtig

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

Der Zugriff auf Ihren Cluster mithilfe von IAMPrincipals wird durch den AWS IAMAuthenticator für aktiviertKubernetes, der auf der EKS Amazon-Steuerebene ausgeführt wird. 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 den Cluster Kubernetes und erstellen Sie ein Kubernetes rolebinding oder clusterrolebinding mit dem Namen einesgroup, den Sie aws-auth ConfigMap in der angeben. aws-auth ConfigMap

Anmerkung

Weitere Informationen zur Konfiguration der Kubernetes rollenbasierten Zugriffssteuerung (RBAC) finden Sie in der Dokumentation unter Verwenden der RBAC Autorisierung. Kubernetes

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 über ein vorhandenes Kubernetes roles clusterroles und rolebindings oder verfügen und clusterrolebindings dass Sie IAM Prinzipale zuordnen können. Weitere Informationen zu diesen Ressourcen finden Sie in der Kubernetes Dokumentation unter Verwenden der RBAC Autorisierung.

    1. Zeigen Sie Ihre vorhandenen Kubernetes roles oder clusterroles an. Roles sind auf einen namespace ausgelegt, aber clusterroles sind auf den Cluster ausgelegt.

      kubectl get roles -A
      kubectl get clusterroles
    2. Sehen Sie sich die Details der in der vorherigen Ausgabe clusterrole zurückgegebenen Daten role an und vergewissern Sie sich, dass sie über die Berechtigungen (rules) verfügt, 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. Zeigen Sie Ihre vorhandenen Kubernetes rolebindings oder clusterrolebindings an. Rolebindings sind auf einen namespace ausgelegt, aber clusterrolebindings sind auf den Cluster ausgelegt.

      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.187.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. Ersetzen Sie eks-console-dashboard-full-access-group durch den Namen der Gruppe, die in Ihrem Kubernetes RoleBinding- oder ClusterRoleBinding-Objekt angegeben wurde. 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. Ersetzen Sie eks-console-dashboard-restricted-access-group durch den Namen der Gruppe, die in Ihrem Kubernetes RoleBinding- oder ClusterRoleBinding-Objekt angegeben wurde. 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, der der IAM Rolle Kubernetes zugeordnet werden soll.

        • Gruppen: Die Gruppe oder Liste der 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 Default Roles and Role Bindings in der Kubernetes-Dokumentation.

      • Um einen IAM Benutzer hinzuzufügen: 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 darin enthaltene BenutzernameKubernetes, der dem IAM Benutzer zugeordnet werden soll.

        • Gruppen: Die Gruppe oder Liste der Kubernetes-Gruppen, denen die 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 Default Roles and Role Bindings in der Kubernetes-Dokumentation.

      Der folgende YAML Block enthält beispielsweise:

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

      • Ein mapUsers Abschnitt, der den admin IAM Benutzer aus dem AWS Standardkonto der system:masters Kubernetes Gruppe und den my-user Benutzer aus einem anderen AWS Konto zuordnet, das einer Kubernetes Gruppe zugeordnet ist, die Kubernetes Ressourcen für einen bestimmten Namespace anzeigen kann. Eine Liste der für den my-user IAM Benutzer erforderlichen Berechtigungen IAM und Kubernetes Gruppenberechtigungen finden Sie unter. Erforderliche 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 den Zugriff auf die rollenbasierte Zugriffskontrolle (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.