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 Kubernetesaws-auth
ConfigMap
. Per tutte le impostazioni di aws-auth
ConfigMap
, consultare il formato di configurazione completo
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
.
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
-
Determina quali credenziali
kubectl
vengono utilizzate per accedere al cluster. Sul computer, è possibile vedere quali credenzialikubectl
utilizza con il seguente comando. Sostituisci
con il percorso del file~/.kube/config
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 denominatomy-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. -
Verifica di disporre di un
role
oclusterrole
Kubernetes esistente con le autorizzazioni (rules
) a cui desideri che gli utenti IAM abbiano accesso nel cluster e di disporre di unrolebinding
oclusterrolebinding
Kubernetes esistente che leghi ungroup
Kubernetes alrole
oclusterrole
. Per ulteriori informazioni, consulta Utilizzo dell'autorizzazione RBACnella documentazione di Kubernetes. È possibile visualizzare tutti gli roles
,clusterroles
,rolebindings
eclusterrolebindings
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
conclusterrole
,rolebinding
oppureclusterrolebinding
,role-name
con il nome della risorsa (dall'output precedente) ekube-system
con lo spazio dei nomi della risorsa (dall'output precedente).kubectl describe
role
role-name
-nkube-system
-
(Opzionale) Crea un
clusterrole
eclusterrolebinding
orole
erolebinding
per consentire agli utenti IAM di visualizzare nodi e carichi di lavoro nella AWS Management Console.-
È possibile consentire agli utenti di visualizzare le risorse Kubernetes per:
-
Il cluster – Questo manifesto crea un
clusterrole
eclusterrolebinding
. 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 nelaws-auth
ConfigMap
. Se lo si desidera, è possibile modificare il nome delgroup
prima di applicarlo al cluster, e quindi mappare l'utente o il ruolo IAM a tale gruppo nellaConfigMap
.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
erolebinding
. 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 nelaws-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 nellaConfigMap
.curl -o eks-console-restricted-access.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-restricted-access.yaml
-
-
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
-
-
Modificare
aws-auth
ConfigMap
.-
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 stockConfigMap
. -
Aggiungere utenti e ruoli IAM o account AWS alla
ConfigMap
. Non è possibile aggiungere gruppi IAM allaConfigMap
.-
Per aggiungere un ruolo IAM; (ad esempio, per utenti federati): aggiungere i dettagli del ruolo alla sezione
mapRoles
dellaConfigMap
, indata
. 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::
. Per ulteriori informazioni, consulta La ConfigMap per aws-auth non concede l'accesso al cluster.111122223333
:role/role-name
-
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, indata
. 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 AWSadmin
dall'account AWS predefinito e due utenti Operations da un account AWS diverso. L'utenteadmin
viene aggiunto al grupposystem:masters
Kubernetes.Gli utenti Operations vengono aggiunti ai gruppi Kubernetes utilizzati dal
role
,rolebinding
,clusterrole
eclusterrolebinding
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 erole
erolebinding
oppureclusterrole
eclusterrolebinding
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
-
-
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-auth
ConfigMap
al cluster
-
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 stockConfigMap
. -
Scarica, modifica e applica la mappa di configurazione dell'autenticatore AWS.
-
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
-
Apri il file con un editor di testo. Sostituisci
con l'Amazon Resource Name (ARN) del ruolo IAM associato ai nodi e salva il file. Non modificare altre righe in questo file.<ARN of instance role (not instance profile)>
Importante L'ARN del ruolo non può includere un percorso. Il formato dell'ARN del ruolo deve essere
arn:aws:iam::
. Per ulteriori informazioni, consulta . La ConfigMap per aws-auth non concede l'accesso al cluster.111122223333
:role/role-name
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
-
-
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.
-
-
Guarda lo stato dei nodi e attendi che raggiungano lo stato
Ready
.kubectl get nodes --watch