Wie verwalte ich Namespace-übergreifende Berechtigungen für IAM-Benutzer in einem Amazon EKS-Cluster?

Lesedauer: 5 Minute
0

Ich möchte die Benutzerberechtigungen für meine AWS Identity and Access Management (IAM)-Benutzer über Namespaces in meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster verwalten.

Kurzbeschreibung

Gehen Sie wie folgt vor, um Benutzerberechtigungen für Namespaces in einem Amazon EKS-Cluster zu verwalten:

  1. Erstellen Sie eine IAM-Rolle, die die Mitglieder Ihrer Organisation übernehmen können.
  2. Erstellen Sie eine Rolle für die rollenbasierte Zugriffskontrolle (RBAC) von Kubernetes (Role) und eine Rollenbindung (RoleBinding) für Ihren Cluster. Weitere Informationen finden Sie unter Verwenden der RBAC-Autorisierung auf der Kubernetes-Website.
  3. Verwenden Sie die aws-auth ConfigMap, um die IAM-Rollen den RBAC-Rollen und -Gruppen zuzuordnen.

Hinweis: Wenn ein IAM-Benutzer oder eine IAM-Rolle einen Cluster erstellt, wird nur der ARN dieser IAM-Identität zur aws-auth ConfigMap hinzugefügt und verfügt über system:masters-Berechtigungen. Das bedeutet, dass nur der Cluster-Ersteller der aws-auth ConfigMap weitere Benutzer oder Rollen hinzufügen kann.

Behebung

Hinweis: Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Beheben von Fehlern in der AWS CLI. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Erstellen Sie eine IAM-Rolle, die Mitglieder Ihrer Organisation übernehmen können

Erstellen Sie eine IAM-Rolle, um Mitgliedern Ihrer Organisation Zugriff auf einen Namespace zu gewähren:

  1. Erstellen Sie eine Rolle, um Berechtigungen an einen IAM-Benutzer zu delegieren.

  2. Um zu überprüfen, ob ein Benutzer die Berechtigung hat, die IAM-Rolle zu übernehmen, konfigurieren Sie die AWS CLI. Führen Sie dann den folgenden Befehl von der Workstation dieses Benutzers aus:

    $ aws sts assume-role --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --role-session-name abcde{
        "Credentials": {
            "AccessKeyId": "yourAccessKeyId",
            "SecretAccessKey": "yourSecretAccessKey",
            "SessionToken": "yourSessionToken",
            "Expiration": "2020-01-30T01:57:17Z"
        },
        "AssumedRoleUser": {
            "AssumedRoleId": "yourAssumedRoleId",
            "Arn": "arn:aws:iam::yourAccountID:role/yourIAMRoleName"
        }
    }

    Hinweis: Ersetzen Sie yourAccessKeyId, yourSecretAccessKey, yourSessionToken, yourAssumedRoleId, yourAccountID und yourIAMRoleName durch Ihre Werte.

  3. Aktualisieren Sie die Datei kubeconfig, um das kubectl des IAM-Benutzers so zu konfigurieren, dass die Rolle immer verwendet wird, wenn er auf die Kubernetes-API zugreift:

    $ aws eks update-kubeconfig --name yourClusterName --role-arn arn:aws:iam::yourAccountID:role/yourIAMRoleName

    Hinweis: Ersetzen Sie yourClusterName, yourAccountID und yourIAMRoleName durch Ihre Werte.

Erstellen Sie eine Kubernetes-RBAC-Rolle und Rollenbindung für Ihren Cluster

**Wichtig:**Sie müssen die folgenden Schritte von einer Workstation aus ausführen, die für den Zugriff auf Kubernetes konfiguriert ist. Sie müssen ein Cluster-Ersteller oder eine IAM-Identität sein, auf die bereits über die aws-auth ConfigMap zugegriffen werden kann. Die IAM-Rolle hat noch keinen Zugriff auf den Cluster.

Binden Sie eine Cluster-Rolle (ClusterRole) an eine Rollenbindung. Eine RBAC-Rolle und eine Rollenbindung sind Kubernetes-Namespace-Ressourcen. Sie können eine Rolle jedoch nicht an eine Cluster-Rollenbindung binden (ClusterRoleBinding).

  1. Führen Sie den folgenden Befehl aus, um alle integrierten Cluster-Rollen aufzuführen und die Cluster-Rolle admin an eine Rollenbindung für den Namespace zu binden:

    $ kubectl get clusterrole
  2. Führen Sie den folgenden Befehl aus, um die Berechtigungen anzuzeigen, die der Clusterrolle-Rolle admin zugeordnet sind:

    $ kubectl describe clusterrole admin
  3. Erstellen Sie einen Namespace mit dem Namen test, um den IAM-Benutzern als Teil der IAM-Gruppe Zugriff zu gewähren:
    Hinweis: Wenn Sie einen anderen Namen wählen, ersetzen Sie die Werte für den Namespace-Parameter. Um einen vorhandenen Namespace zu verwenden, fahren Sie mit Schritt 4 fort.

    $ kubectl create namespace test
  4. Um eine Kubernetes-RBAC-Rolle zu erstellen, kopieren Sie den folgenden Code in eine neue YAML-Datei (z. B. role.yaml):

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: k8s-test-role
      namespace: test
    rules:
      - apiGroups:
          - ""
          - "apps"
          - "batch"
          - "extensions"
        resources:
          - "configmaps"
          - "cronjobs"
          - "deployments"
          - "events"
          - "ingresses"
          - "jobs"
          - "pods"
          - "pods/attach"
          - "pods/exec"
          - "pods/log"
          - "pods/portforward"
          - "secrets"
          - "services"
        verbs:
          - "create"
          - "delete"
          - "describe"
          - "get"
          - "list"
          - "patch"
          - "update"

    Hinweis: Mit der Kubernetes-RBAC-Rolle können Benutzer alle Aktionen im Abschnitt Verben ausführen.

  5. Führen Sie den folgenden Befehl aus, um die RBAC-Rolle zu erstellen:

    $ kubectl apply -f role.yaml
  6. Erstellen Sie eine Kubernetes-Rollenbindung. Kopieren Sie den folgenden Code in eine neue YAML-Datei (z. B. rolebinding.yaml):

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: k8s-test-rolebinding
      namespace: test
    subjects:
    - kind: User
      name: k8s-test-user
    roleRef:
      kind: Role
      name: k8s-test-role
      apiGroup: rbac.authorization.k8s.io

    Hinweis: Die Rollenbindung ist eine Namespace-Ressource, die die RBAC-Rolle im Abschnitt roleRef an den Benutzer im Abschnitt Betreff bindet. Sie müssen den Benutzer k8s-test-user nicht erstellen, da Kubernetes keinen Benutzer-Ressourcentyp hat.

  7. Führen Sie den folgenden Befehl aus, um die RBAC-Rollenbindung zu erstellen:

    $ kubectl apply -f rolebinding.yaml

Verwenden Sie die aws-auth ConfigMap, um die IAM-Rolle der RBAC-Rolle und -Gruppe zuzuordnen

Führen Sie den folgenden Befehl aus, um die IAM-Rolle yourIAMRoleName dem Kubernetes-Benutzer k8s-test-user zuzuordnen:

$ eksctl create iamidentitymapping --cluster yourClusterName --arn arn:aws:iam::yourAccountID:role/yourIAMRoleName --username k8s-test-user

Hinweis: Ersetzen Sie yourClusterName, yourAccountID und yourIAMRoleName durch Ihre Werte.

Testen Sie den Zugriff auf den Namespace

  1. Führen Sie den folgenden Befehl aus, um den Zugriff auf den Test-Namespace zu testen:
    $ kubectl create job hello -n test --image=busybox -- echo "Hello World"
    Hinweis: Mit dem vorherigen Befehl wird ein Job erstellt, der die von Ihnen erstellte RBAC-Rolle k8s-test-role verwendet.
  2. Führen Sie die folgenden Befehle aus, um den Pod und den Job im Test-Namespace zu überprüfen:
    $ kubectl get job -n testNAME    COMPLETIONS   DURATION   AGE
    hello   1/1           4s         15s
    
    $ kubectl get pods -n test
    NAME          READY   STATUS      RESTARTS   AGE
    hello-tpjmf   0/1     Completed   0          2m34s
AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten