Abilitazione dell'accesso a utenti e ruoli IAM al cluster - Amazon EKS

Abilitazione dell'accesso a utenti e ruoli IAM al cluster

L'accesso al cluster utilizzando le entità IAM AWS è abilitato dall'Autenticatore IAM AWS per Kubernetes, che funziona sul piano di controllo di Amazon EKS. L'autenticatore riceve le informazioni di configurazione da aws-auth ConfigMap. Per tutte le impostazioni di aws-auth ConfigMap, consultare il formato di configurazione completo su GitHub.

Aggiunta di utenti o ruoli IAM a un cluster Amazon EKS

Quando si crea un cluster Amazon EKS, il ruolo o l'utente dell'entità AWS Identity and Access Management (IAM), come ad esempio un utente federato che crea il cluster, riceve automaticamente le autorizzazioni system:masters nella configurazione del controllo degli accessi basato sul ruolo (RBAC) nel piano di controllo di Amazon EKS. Questa entità IAM non viene visualizzata in una configurazione visibile qualsiasi, quindi assicurarsi di tenere traccia di quale entità IAM ha originariamente creato il cluster. Per concedere a ulteriori utenti o ruoli AWS la capacità di interagire con il cluster, devi modificare aws-auth ConfigMap all'interno di Kubernetes e creare un rolebinding o clusterrolebinding Kubernetes con il nome di un group specificato in aws-auth ConfigMap.

Nota

Per ulteriori informazioni sulle diverse identità IAM, consultare Identità (Utenti, Gruppi e Ruoli) nella Guida per l'utente IAM. Per ulteriori informazioni sulla configurazione del controllo degli accessi basato sul ruolo (RBAC) di Kubernetes, consultare Utilizzo dell'autorizzazione RBAC.

Aggiunta di un utente o ruolo IAM a un cluster Amazon EKS

  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

    Output

    ... 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'esempio precedente di output, le credenziali per un utente denominato amministratore sono configurate per un cluster denominato my-cluster. Se si tratta dell'utente che ha creato il cluster, ha già accesso al cluster. Se l'utente non ha creato il cluster, è necessario completare i passaggi rimanenti per abilitare l'accesso al cluster per l'utente, se non è già stato fatto.

  2. Verifica di disporre di un role o clusterrole Kubernetes esistente con le autorizzazioni (rules) a cui desideri che gli utenti IAM abbiano accesso nel cluster e di disporre di un rolebinding o clusterrolebinding Kubernetes esistente che leghi un group Kubernetes al role o clusterrole. Per ulteriori informazioni, consulta Utilizzo dell'autorizzazione RBAC nella documentazione di Kubernetes. È possibile visualizzare tutti gli roles, clusterroles, rolebindings e clusterrolebindings esistenti utilizzando i seguenti comandi.

    kubectl get roles --all-namespaces
    kubectl get clusterroles
    kubectl get rolebindings --all-namespaces
    kubectl get clusterrolebindings

    È quindi possibile visualizzare i dettagli di una qualsiasi delle risorse utilizzando il seguente comando. Puoi sostituire role con clusterrole, rolebinding oppure clusterrolebinding, role-name con il nome della risorsa (dall'output precedente) e kube-system con lo spazio dei nomi della risorsa (dall'output precedente).

    kubectl describe role role-name -n kube-system
  3. (Opzionale) Crea un clusterrole e clusterrolebinding o role e rolebinding per consentire agli utenti IAM di visualizzare nodi e carichi di lavoro nella AWS Management Console.

    1. È possibile consentire agli utenti di visualizzare le risorse Kubernetes per:

      • Il cluster – Questo manifesto crea un clusterrole e clusterrolebinding. Il nome del gruppo nel file è eks-console-dashboard-full-access-group, che è il gruppo a cui l'utente o il ruolo IAM deve essere mappato nel aws-auth ConfigMap. Se lo si desidera, è possibile modificare il nome del group prima di applicarlo al cluster, e quindi mappare l'utente o il ruolo IAM a tale gruppo nella ConfigMap.

        curl -o eks-console-full-access.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-full-access.yaml
      • Uno spazio dei nomi specifico – Questo manifesto crea un role e rolebinding. Lo spazio dei nomi in questo file è default, quindi se si desidera specificare uno spazio dei nomi diverso, modificare il file prima di applicarlo al cluster. Il nome del gruppo nel file è eks-console-dashboard-restricted-access-group, che è il gruppo a cui l'utente o il ruolo IAM deve essere mappato nel aws-auth ConfigMap. Se lo desideri, puoi modificare il nome del gruppo prima di applicarlo al cluster e quindi mappare l'utente o il ruolo IAM a tale gruppo nella ConfigMap.

        curl -o eks-console-restricted-access.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-restricted-access.yaml
    2. Applicare il manifesto appropriato utilizzando uno dei seguenti comandi.

      kubectl apply -f eks-console-full-access.yaml
      kubectl apply -f eks-console-restricted-access.yaml
  4. Modificare aws-auth ConfigMap.

    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 Applicare la ConfigMap aws-auth al cluster per applicare lo stock ConfigMap.

    2. Aggiungere utenti e ruoli IAM o account AWS alla ConfigMap. Non è possibile aggiungere gruppi IAM alla ConfigMap.

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

        • rolearn: l'ARN; del ruolo IAM da aggiungere. Questo valore non può includere un percorso. Il formato del valore fornito deve essere arn:aws:iam::111122223333:role/role-name. Per ulteriori informazioni, consulta La ConfigMap per aws-auth non concede l'accesso al cluster.

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

        • groups: un elenco di gruppi all'interno di Kubernetes cui il ruolo è associato. Per ulteriori informazioni consulta Ruoli predefiniti e associazioni di ruoli nella documentazione di Kubernetes.

      • Aggiunta utente IAM: aggiunge 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'ARN; dell'utente IAM da aggiungere.

        • username: Il nome utente all'interno di Kubernetes da associare all'utente IAM.

        • groups: un elenco di gruppi all'interno di Kubernetes cui l'utente è associato. Per ulteriori informazioni consulta Ruoli predefiniti e associazioni di ruoli nella documentazione di Kubernetes.

      Ad esempio, il blocco sottostante contiene:

      • Una sezione mapRoles che aggiunge il ruolo dell'istanza del nodo, in modo che i nodi possano registrarsi automaticamente con il cluster.

      • Una sezione mapUsers con gli utenti AWS admin dall'account AWS predefinito e due utenti Operations da un account AWS diverso. L'utente admin viene aggiunto al gruppo system:masters Kubernetes.

        Gli utenti Operations vengono aggiunti ai gruppi Kubernetes utilizzati dal role, rolebinding, clusterrole e clusterrolebinding creati dai manifesti nel passaggio precedente, ma è possibile sostituirli con qualsiasi gruppo desiderato. Per visualizzare nodi e carichi di lavoro nella AWS Management Console, gli utenti devono avere la mappatura nell'esempio seguente e role e rolebinding oppure clusterrole e clusterrolebinding creati dai manifesti nel passaggio precedente.

      Sostituisci tutti i example-values con i valori in tuo possesso.

      # 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: | - rolearn: arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes mapUsers: | - userarn: arn:aws:iam::111122223333:user/admin username: admin groups: - system:masters - userarn: arn:aws:iam::444455556666:user/ops-user username: ops-user groups: - eks-console-dashboard-full-access-group - userarn: arn:aws:iam::444455556666:user/ops-user2 username: ops-user2 groups: - eks-console-dashboard-restricted-access-group
    3. Salva il file ed esci dall'editor di testo.

Applicare la ConfigMap aws-auth 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 creata per consentire ai nodi di unirsi al cluster, ma questa ConfigMap può essere usata anche per aggiungere l'accesso RBAC (controllo degli accessi basato sul ruolo) a ruoli e utenti IAM. 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'autenticatore AWS.

    1. Scarica la mappa di configurazione.

      curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Apri il file con un editor di testo. Sostituisci <ARN of instance role (not instance profile)> con l'Amazon Resource Name (ARN) del ruolo IAM associato ai nodi e salva il file. Non modificare altre righe in questo file.

      Importante

      L'ARN del ruolo non può includere un percorso. Il formato dell'ARN del ruolo deve essere arn:aws:iam::111122223333:role/role-name. Per ulteriori informazioni, consulta . La ConfigMap per aws-auth non concede l'accesso al cluster.

      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

      È possibile controllare gli output della pila AWS CloudFormation per i gruppi di nodi e cercare i seguenti valori:

      • InstanceRoleARN – Per gruppi di nodi creati con eksctl

      • RuoloIstanzaNodo – Per gruppi di nodi creati con modelli AWS CloudFormation forniti da Amazon EKS nella 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 risorsa o autorizzazione, consulta Accesso negato o non autorizzato (kubectl) nella sezione relativa alla risoluzione dei problemi.

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

    kubectl get nodes --watch