Concedi IAM agli utenti l'accesso a Kubernetes con un ConfigMap - Amazon EKS

Aiutaci a migliorare questa pagina

Vuoi contribuire a questa guida per l'utente? Scorri fino alla fine di questa pagina e seleziona Modifica questa pagina su GitHub. I tuoi contributi contribuiranno a rendere la nostra guida utente migliore per tutti.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Concedi IAM agli utenti l'accesso a Kubernetes con un ConfigMap

L'accesso al cluster tramite IAMprincipals è abilitato dall'AWS IAMAuthenticator for Kubernetes, che viene eseguito sul piano di controllo di AmazonEKS. L'autenticatore riceve le informazioni di configurazione da aws-auth ConfigMap. Per tutte le impostazioni di ConfigMap aws-auth, consulta Formato di configurazione completo su GitHub.

Aggiungi IAM i principali al tuo cluster Amazon EKS

Quando crei un EKS cluster Amazon, al IAMprincipale che crea il cluster vengono automaticamente concesse system:masters le autorizzazioni nella configurazione di controllo degli accessi (RBAC) basata sui ruoli del cluster nel piano di controllo AmazonEKS. Questo principale IAM non viene visualizzato in una configurazione visibile qualsiasi, quindi assicurati di tenere traccia di quale principale IAM ha originariamente creato il cluster. Per concedere ad altri IAM principali la possibilità di interagire con il tuo cluster, modificane l'aws-auth ConfigMapinterno Kubernetes e crea un Kubernetes rolebinding or clusterrolebinding con il nome di uno specificato group in. aws-auth ConfigMap

Nota

Per ulteriori informazioni sulla configurazione del controllo degli accessi (RBAC) Kubernetes basato sui ruoli, vedere Using RBAC Authorization nella documentazione. Kubernetes

Per aggiungere un IAM principale a un EKS cluster Amazon
  1. Determina quali credenziali kubectl vengono utilizzate per accedere al cluster. Sul computer, è possibile vedere quali credenziali kubectl utilizza con il seguente comando. Sostituisci ~/.kube/config con il percorso del file kubeconfig se non si utilizza il percorso predefinito.

    cat ~/.kube/config

    Di seguito viene riportato un output di esempio.

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

    Nell'output dell'esempio precedente, le credenziali per un utente denominato admin sono configurate per un cluster denominato my-cluster. Se si tratta dell'utente che ha creato il cluster, ha già accesso al cluster. Se non è l'utente che ha creato il cluster, devi completare i passaggi rimanenti per abilitare l'accesso al cluster per altri IAM principali. IAMle migliori pratiche consigliano di concedere le autorizzazioni ai ruoli anziché agli utenti. Per visualizzare gli altri principali che hanno attualmente accesso al cluster, esegui il comando seguente:

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

    Di seguito viene riportato un output di esempio.

    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>

    L'esempio precedente è una aws-auth ConfigMap predefinita. Solo il ruolo dell'istanza del nodo ha accesso al cluster.

  2. Accertati di disporre di un operatore Kubernetes roles e di rolebindings un clusterroles operatore su clusterrolebindings cui è possibile mappare IAM i principali. Per ulteriori informazioni su queste risorse, consulta Using RBAC Authorization nella Kubernetes documentazione.

    1. Visualizza i roles o clusterroles Kubernetes esistenti. L'ambito di Roles è namespace mentre l'ambito di clusterroles è il cluster.

      kubectl get roles -A
      kubectl get clusterroles
    2. Visualizza i dettagli di role qualsiasi elemento clusterrole restituito nell'output precedente e conferma che disponga delle autorizzazioni (rules) che desideri che IAM i tuoi principali abbiano nel tuo cluster.

      Sostituisci role-name con un nome del role restituito nell'output del comando precedente. Sostituisci kube-system con lo spazio dei nomi del role.

      kubectl describe role role-name -n kube-system

      Sostituisci cluster-role-name con un nome del clusterrole restituito nell'output del comando precedente.

      kubectl describe clusterrole cluster-role-name
    3. Visualizza i rolebindings o clusterrolebindings Kubernetes esistenti. L'ambito di Rolebindings è namespace mentre l'ambito di clusterrolebindings è il cluster.

      kubectl get rolebindings -A
      kubectl get clusterrolebindings
    4. Visualizza i dettagli di rolebinding o clusterrolebinding e verifica che dispongano di un role or clusterrole della fase precedente elencato come un roleRef e un nome di gruppo elencato per subjects.

      Sostituisci role-binding-name con un nome del rolebinding restituito nell'output del comando precedente. Sostituisci kube-system con lo namespace del rolebinding.

      kubectl describe rolebinding role-binding-name -n kube-system

      Di seguito viene riportato un output di esempio.

      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

      Sostituisci cluster-role-binding-name con un nome del clusterrolebinding restituito nell'output del comando precedente.

      kubectl describe clusterrolebinding cluster-role-binding-name

      Di seguito viene riportato un output di esempio.

      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. Modificare aws-auth ConfigMap. Per aggiornare ConfigMap puoi usare uno strumento adeguato, ad esempio eksctl, oppure puoi eseguire l'aggiornamento in modo manuale tramite modifica.

    Importante

    Ti consigliamo di utilizzare eksctl, o uno strumento simile, per modificare ConfigMap. Per informazioni su altri strumenti che puoi utilizzare, consulta Utilizzare gli strumenti per apportare modifiche aws-authConfigMap alle guide alle EKS best practice di Amazon. Una formattazione impropria di aws-auth ConfigMap può causare la perdita dell'accesso al cluster.

    eksctl
    Prerequisito

    La versione 0.189.0 o quelle successive dello strumento a riga di comando eksctl deve essere installata sul dispositivo o nella AWS CloudShell. Per l'installazione o l'aggiornamento di eksctl, consulta la sezione Installation nella documentazione di eksctl.

    1. Visualizza le mappature correnti in ConfigMap. Sostituisci my-cluster con il nome del cluster. Sostituiscilo region-code con Regione AWS quello in cui si trova il tuo cluster.

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

      Di seguito viene riportato un output di esempio:

      ARN USERNAME GROUPS ACCOUNT arn:aws:iam::111122223333:role/eksctl-my-cluster-my-nodegroup-NodeInstanceRole-1XLS7754U3ZPA system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
    2. Aggiungi una mappatura per un ruolo. Sostituisci my-role con il nome del tuo ruolo. Sostituisci eks-console-dashboard-full-access-group con il nome del gruppo specificato nell'oggetto Kubernetes RoleBinding o ClusterRoleBinding. Sostituisci 111122223333 con l'ID del tuo account. Puoi sostituire admin con qualsiasi nome tu scelga.

      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
      Importante

      Il ruolo non ARN può includere un percorso comerole/my-team/developers/my-role. Il formato del ARN deve esserearn:aws:iam::111122223333:role/my-role. In questo esempio, my-team/developers/ deve essere rimosso.

      Di seguito viene riportato un output di esempio.

      [...]
      2022-05-09 14:51:20 [ℹ]  adding identity "arn:aws:iam::111122223333:role/my-role" to auth ConfigMap
    3. Aggiungi una mappatura per un utente. IAMle migliori pratiche consigliano di concedere le autorizzazioni ai ruoli anziché agli utenti. Sostituisci my-user con il tuo nome utente. Sostituisci eks-console-dashboard-restricted-access-group con il nome del gruppo specificato nell'oggetto Kubernetes RoleBinding o ClusterRoleBinding. Sostituisci 111122223333 con l'ID del tuo account. È possibile sostituire my-user con qualsiasi nome tu scelga.

      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

      Di seguito viene riportato un output di esempio:

      [...]
      2022-05-09 14:53:48 [ℹ]  adding identity "arn:aws:iam::111122223333:user/my-user" to auth ConfigMap
    4. Visualizza nuovamente le mappature nella ConfigMap.

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

      Di seguito viene riportato un output di esempio.

      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. Aprire la ConfigMap per la modifica.

      kubectl edit -n kube-system configmap/aws-auth
      Nota

      Se si verifica un errore di tipo "Error from server (NotFound): configmaps "aws-auth" not found", usa la procedura descritta in Applica la aws-authConfigMap al cluster per applicare lo stock ConfigMap.

    2. Aggiungi i tuoi IAM presidi a. ConfigMap Un IAM gruppo non è un IAM principale, quindi non può essere aggiunto a. ConfigMap

      • Per aggiungere un IAM ruolo (ad esempio, per utenti federati): aggiungi i dettagli del ruolo alla mapRoles sezione diConfigMap, sottodata. Aggiungi questa sezione se non esiste già nel file. Ogni voce supporta i seguenti parametri:

        • rolearn: Il ARN IAM ruolo da aggiungere. Questo valore non può includere un percorso. Ad esempio, non è possibile specificare un nome ARN comearn:aws:iam::111122223333:role/my-team/developers/role-name. ARNDevono arn:aws:iam::111122223333:role/role-name invece esserlo.

        • username: il nome utente Kubernetes all'interno da mappare al IAM ruolo.

        • groups: il gruppo o l'elenco dei gruppi Kubernetes a cui mappare il ruolo. Tale gruppo può essere un gruppo predefinito o un gruppo specificato in un clusterrolebinding o un rolebinding. Per ulteriori informazioni consulta Ruoli predefiniti e associazioni di ruoli nella documentazione di Kubernetes.

      • Per aggiungere un IAM utente: le IAM migliori pratiche consigliano di concedere le autorizzazioni ai ruoli anziché agli utenti. Aggiungi i dettagli dell'utente alla sezione mapUsers della ConfigMap, in data. Aggiungi questa sezione se non esiste già nel file. Ogni voce supporta i seguenti parametri:

        • userarn: L'ARNIAMutente da aggiungere.

        • username: il nome utente all'interno Kubernetes da mappare all'IAMutente.

        • groups: il gruppo o l'elenco dei gruppi Kubernetes a cui mappare l'utente. Tale gruppo può essere un gruppo predefinito o un gruppo specificato in un clusterrolebinding o un rolebinding. Per ulteriori informazioni consulta Ruoli predefiniti e associazioni di ruoli nella documentazione di Kubernetes.

      Ad esempio, il YAML blocco seguente contiene:

      • Una mapRoles sezione che associa l'istanza del IAM nodo ai Kubernetes gruppi in modo che i nodi possano registrarsi nel cluster e il my-console-viewer-role IAM ruolo mappato a un Kubernetes gruppo in grado di visualizzare tutte le Kubernetes risorse per tutti i cluster. Per un elenco delle autorizzazioni IAM e dei Kubernetes gruppi richieste per il my-console-viewer-role IAM ruolo, vedere. Autorizzazioni richieste

      • Una mapUsers sezione che associa l'adminIAMutente dall' AWS account predefinito al system:masters Kubernetes gruppo e l'my-userutente di un AWS account diverso mappato a un Kubernetes gruppo in grado di visualizzare Kubernetes le risorse per uno spazio dei nomi specifico. Per un elenco delle autorizzazioni IAM e dei Kubernetes gruppi richieste per l'utente, consulta my-userIAM. Autorizzazioni richieste

      Aggiungi o rimuovi le righe secondo necessità e sostituisci tutte valori di esempio con i tuoi valori.

      # 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. Salva il file ed esci dall'editor di testo.

Applica la aws-authConfigMap al cluster

La aws-auth ConfigMap viene creata e applicata automaticamente al cluster quando si crea un gruppo di nodi gestito o quando si crea un gruppo di nodi utilizzando eksctl. Inizialmente è stato creato per consentire ai nodi di unirsi al cluster, ma lo si usa anche ConfigMap per aggiungere un accesso basato sul ruolo con controllo degli accessi (RBAC) ai IAM principali. Se non sono stati avviati nodi autogestiti e non è stata applicata la aws-auth ConfigMap al cluster, è possibile farlo utilizzando la procedura seguente.

Applicazione di aws-authConfigMap al cluster
  1. Controlla per vedere se hai già applicato la aws-auth ConfigMap.

    kubectl describe configmap -n kube-system aws-auth

    Se si verifica un errore di tipo "Error from server (NotFound): configmaps "aws-auth" not found", procedi con le fasi seguenti per applicare lo stock ConfigMap.

  2. Scarica, modifica e applica la mappa di configurazione dell' AWS autenticatore.

    1. Scarica la mappa di configurazione.

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Nel aws-auth-cm.yaml file, imposta Amazon Resource Name (ARN) del IAM ruolo associato ai tuoi nodi. rolearn Per eseguire questa operazione, utilizza un editor di testo o sostituisci my-node-instance-role eseguendo il comando seguente:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml

      Non modificare altre righe in questo file.

      Importante

      Il ruolo non ARN può includere un percorso comerole/my-team/developers/my-role. Il formato del ARN deve esserearn:aws:iam::111122223333:role/my-role. In questo esempio, my-team/developers/ deve essere rimosso.

      Puoi ispezionare gli output dello AWS CloudFormation stack per i tuoi gruppi di nodi e cercare i seguenti valori:

      • InstanceRoleARN— Per i gruppi di nodi che sono stati creati con eksctl

      • NodeInstanceRole— Per i gruppi di nodi creati con AWS CloudFormation modelli EKS venduti da Amazon nel AWS Management Console

    3. Applica la configurazione. L'esecuzione di questo comando potrebbe richiedere alcuni minuti.

      kubectl apply -f aws-auth-cm.yaml
      Nota

      Se ricevi qualsiasi altro errore di tipo di risorsa o autorizzazione, consulta la sezione Accesso negato o non autorizzato (kubectl) nell'argomento relativo alla risoluzione dei problemi.

  3. Guarda lo stato dei nodi e attendi che raggiungano lo stato Ready.

    kubectl get nodes --watch

    Inserisci Ctrl+C per tornare a un prompt della shell.