Come posso gestire le autorizzazioni tra namespace per gli utenti IAM in un cluster Amazon EKS?

5 minuti di lettura
0

Desidero gestire le autorizzazioni utente per i miei utenti di AWS Identity and Access Management (IAM) nei namespace del mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Per gestire le autorizzazioni degli utenti nei namespace in un cluster Amazon EKS, completa i seguenti passaggi:

  1. Crea un ruolo IAM che i membri della tua organizzazione possano assumere.
  2. Crea un ruolo (Role) di controllo degli accessi basato sui ruoli (Role) di Kubernetes e un'associazione di ruoli (RoleBinding)per il tuo cluster. Per ulteriori informazioni, consulta la sezione Utilizzo dell’autorizzazione RBAC sul sito Web di Kubernetes.
  3. Usa aws-auth ConfigMap per mappare i ruoli IAM ai ruoli e ai gruppi RBAC.

Nota: quando un utente o un ruolo IAM crea un cluster, solo l'ARN di questa identità IAM viene aggiunto ad aws-auth ConfigMap e dispone delle autorizzazioni system:masters. Ciò significa che solo il creatore del cluster può aggiungere più utenti o ruoli ad aws-auth ConfigMap.

Soluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Risolvi gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente dell’Interfaccia della linea di comando AWS (AWS CLI).

Crea un ruolo IAM che i membri della tua organizzazione possano assumere

Crea un ruolo IAM per consentire ai membri della tua organizzazione di accedere a un namespace:

  1. Crea un ruolo per delegare le autorizzazioni a un utente IAM.

  2. Per verificare che un utente disponga dell'autorizzazione per assumere il ruolo IAM, configura l’interfaccia AWS CLI. Quindi, esegui il seguente comando dalla workstation di quell'utente:

    $ 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"
        }
    }

    Nota: sostituisci YourAccessKeyId, yourSecretAccessKey, yourSessionToken, yourAssumedRoleID, yourAccountID e yourIamRoleName con i tuoi valori.

  3. Aggiorna il file kubeconfig per configurare il kubectl dell'utente IAM in modo che utilizzi sempre il ruolo quando accede all'API Kubernetes:

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

    Nota: sostituisci yourClusterName, yourAccountID e yourIAMRoleName con i tuoi valori.

Crea un ruolo Kubernetes RBAC e un'associazione di ruoli per il tuo cluster

Importante: è necessario completare i seguenti passaggi da una workstation configurata per accedere a Kubernetes. Devi essere un creatore di cluster o un'identità IAM che abbia già accesso tramite aws-auth ConfigMap. Il ruolo IAM non ha ancora accesso al cluster.

Associa un ruolo del cluster (ClusterRole) a un'associazione di ruolo. Un ruolo RBAC e un'associazione di ruoli sono risorse con namespace di Kubernetes. Tuttavia, non è possibile associare un ruolo a un'associazione di ruoli del cluster (ClusterRoleBinding).

  1. Esegui il comando seguente per elencare tutti i ruoli del cluster incorporati e associare l'amministratore del ruolo del cluster a un'associazione di ruolo per il namespace:

    $ kubectl get clusterrole
  2. Esegui il comando seguente per visualizzare le autorizzazioni associate al ruolo amministratore del cluster:

    $ kubectl describe clusterrole admin
  3. Crea uno spazio dei nomi denominato test per concedere l'accesso agli utenti IAM come parte del gruppo IAM:
    Nota: se scegli un nome diverso, sostituisci i valori del parametronamespace. Per utilizzare uno spazio dei nomi esistente, vai al passaggio 4.

    $ kubectl create namespace test
  4. Per creare un ruolo RBAC di Kubernetes, copia il codice seguente in un nuovo file YAML (ad esempio, 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"

    Nota: il ruolo RBAC di Kubernetes consente agli utenti di eseguire tutte le azioni nella sezione dei verbi.

  5. Esegui il comando riportato di seguito per creare il ruolo RBAC:

    $ kubectl apply -f role.yaml
  6. Crea un'associazione di ruoli Kubernetes. Copia il codice seguente in un nuovo file YAML (ad esempio, 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

    Nota: l'associazione dei ruoli è una risorsa con namespace che associa il ruolo RBAC nella sezione RoleRef all'utente nella sezione dei soggetti. Non è necessario creare l'utente k8s-test-user perché Kubernetes non ha un tipo di risorsa utente.

  7. Esegui il comando riportato di seguito per creare l’associazione dei ruoli RBAC:

    $ kubectl apply -f rolebinding.yaml

Usa aws-auth ConfigMap per mappare il ruolo IAM al ruolo e al gruppo RBAC

Esegui il comando riportato di seguito per associare il ruolo IAM yourIAMRoleName all'utente Kubernetes k8s-test-user:

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

Nota: sostituisci yourClusterName, yourAccountID e yourIAMRoleName con i tuoi valori.

Verifica l'accesso al namespace

  1. Esegui il comando seguente per testare l'accesso allo spazio dei nomi test:
    $ kubectl create job hello -n test --image=busybox -- echo "Hello World"
    Nota: il comando precedente crea un processo che utilizza il ruolo RBAC k8s-test-role che hai creato.
  2. Esegui i comandi riportati di seguito per controllare il pod e il processo nel namespace test:
    $ 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 UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa