Come posso gestire le autorizzazioni tra namespace per gli utenti IAM in un cluster Amazon EKS?
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:
- Crea un ruolo IAM che i membri della tua organizzazione possano assumere.
- 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.
- 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:
-
Crea un ruolo per delegare le autorizzazioni a un utente IAM.
-
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.
-
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).
-
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
-
Esegui il comando seguente per visualizzare le autorizzazioni associate al ruolo amministratore del cluster:
$ kubectl describe clusterrole admin
-
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
-
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.
-
Esegui il comando riportato di seguito per creare il ruolo RBAC:
$ kubectl apply -f role.yaml
-
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.
-
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
- Esegui il comando seguente per testare l'accesso allo spazio dei nomi test:
Nota: il comando precedente crea un processo che utilizza il ruolo RBAC k8s-test-role che hai creato.$ kubectl create job hello -n test --image=busybox -- echo "Hello World"
- 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
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 3 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa