Aktivieren des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster - Amazon EKS

Aktivieren des IAM-Benutzer- und Rollenzugriffs auf Ihren Cluster

Zugriff auf Ihren Cluster mit AWS Identity and Access Management (IAM)-Entitäten wird durch AWSIAM-Authenticator für Kubernetes aktiviert, das auf der Amazon-EKS-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.

Hinzufügen von IAM-Benutzern oder -Rollen zu Ihrem Amazon-EKS-Cluster

Wenn Sie einen Amazon-EKS-Cluster erstellen, werden dem Benutzer oder der Rolle der AWS Identity and Access Management(IAM)-Entität, z. B. einem Verbundbenutzer, der den Cluster erstellt, automatisch system:masters-Berechtigungen in der rollenbasierten Zugriffssteuerungs(RBAC)-Konfiguration des Clusters in der Amazon-EKS-Steuerebene erteilt. Diese IAM-Entität wird in keiner 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 Möglichkeit zu geben, mit Ihrem Cluster zu interagieren, müssen Sie die aws-auth ConfigMap innerhalb von Kubernetes bearbeiten und ein Kubernetes rolebinding oder clusterrolebinding mit dem Namen einer group erstellen, den Sie in der aws-auth ConfigMap angeben.

Anmerkung

Weitere Informationen zu unterschiedlichen IAM-Identitäten finden Sie unter Identitäten (Benutzer, Gruppen und Rollen) im IAM-Benutzerhandbuch. Weitere Informationen zur Kubernetes rollenbasierten Zugriffssteuerungs (RBAC)-Konfiguration von Kubernetes finden Sie unter Verwenden der RBAC-Autorisierung.

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

  1. Bestimmen Sie, welche Anmeldeinformationen kubectl für den Zugriff auf Ihren Cluster verwendet. 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

    Die Beispielausgabe lautet wie folgt.

    ... 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 Benutzer zu aktivieren. Mit dem folgenden Befehl können Sie sehen, welche anderen Rollen oder Benutzer derzeit Zugriff auf Ihren Cluster haben:

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

    Die Beispielausgabe lautet wie folgt.

    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 Kubernetes-roles und rolebindings oder clusterroles und clusterrolebindings vorhanden sind, denen Sie IAM-Benutzer oder -Rollen zuordnen können. Weitere Informationen über diese Ressourcen finden Sie unter Using RBAC Authorization (RBAC-Autorisierung verwenden) in der Kubernetes-Dokumentation.

    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. 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-Benutzer 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

      Die Beispielausgabe lautet wie folgt.

      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

      Die Beispielausgabe lautet wie folgt.

      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. Weitere Informationen zu anderen Tools, die Sie verwenden können, finden Sie unter Verwenden von Tools zur Änderung von aws-authConfigMap in den Best-Practice-Leitfäden zu Amazon EKS. Ist aws-auth ConfigMap falsch formatiert, können Sie den Zugriff auf Ihren Cluster verlieren.

    eksctl

    Voraussetzung

    Version 0.105.0 oder höher des eksctl-Befehlszeilen-Tools, das auf Ihrem Computer oder AWS CloudShell installiert ist. Informationen zum Installieren oder Aktualisieren von eksctl finden Sie unter Installieren oder Aktualisieren von eksctl.

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

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

      Die Beispielausgabe lautet wie folgt.

      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 mit dem Namen der Gruppe, die in Ihrem Kubernetes, rolebinding, oder clusterrolebinding angegeben wurde. Ersetzen Sie 111122223333 durch Ihre Konto-ID.

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

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

      Die Beispielausgabe lautet wie folgt.

      ... 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. Ersetzen Sie my-user durch den Benutzernamen. Ersetzen Sie eks-console-dashboard-restricted-access-group mit dem Namen der Gruppe, die in Ihrem Kubernetes, rolebinding, oder clusterrolebinding angegeben wurde. Ersetzen Sie 111122223333 durch Ihre Konto-ID.

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

      Die Beispielausgabe lautet wie folgt.

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

      Die Beispielausgabe lautet wie folgt.

      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/my-role eks-console-dashboard-full-access-group arn:aws:iam::111122223333: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 Anwendung der aws-authConfigMap auf Ihren Cluster, um die lokal gespeicherte ConfigMap anzuwenden.

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

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

        • 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.

      • 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.

        • 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.

      Beispiel: Der folgende YAML-Block enthält:

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

      • Ein mapUsers-Abschnitt, der den admin-IAM-Benutzer aus dem standardmäßigen AWS-Konto der system:masters-Gruppe Kubernetes und dem my-user-Benutzer aus einem anderen AWS-Konto zuordnet, das einer Kubernetes-Gruppe zugeordnet ist, die Kubernetes-Ressourcen für einen spezifischen Namespace anzeigen können. Eine Liste der erforderlichen IAM- und Kubernetes-Gruppenberechtigungen für die my-user-IAM-Benutzer 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
    3. Speichern Sie die Datei und beenden Sie den Text-Editor.

Anwendung der 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-Benutzer und -Rollen hinzuzufügen. Wenn Sie keine selbstverwalteten Knoten gestartet und die aws-auth ConfigMap nicht auf Ihr 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 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://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Öffnen Sie die Datei mit einem Text-Editor. 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 wie role/my-team/developers/my-role enthalten. Das Format des ARN muss arn:aws:iam::111122223333:role/my-role sein. In diesem Beispiel muss my-team/developers/ entfernt werden.

      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 Knotengruppen auf die folgenden Werte überprüfen:

      • InstanceRoleARN - Für Knotengruppen, 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