Come posso fornire l'accesso al cluster ad altri utenti e ruoli IAM dopo aver creato un cluster in Amazon EKS?
Quando utilizzo i comandi kubectl per accedere a un cluster Amazon Elastic Kubernetes Service (Amazon EKS), ricevo il messaggio di errore "error: You must be logged in to the server (Unauthorized)".
Breve descrizione
Se l'utente o il ruolo di AWS Identity and Access Management (IAM) crea un cluster Amazon EKS diverso dal cluster utilizzato da aws-iam-authenticator, viene visualizzato il messaggio di errore Non autorizzato. Per risolvere questo problema, configura il controllo degli accessi basato sul ruolo (RBAC, Role Based Access Control) del cluster Amazon EKS per autorizzare l'entità IAM. Per ulteriori informazioni, consulta Using RBAC authorization sul sito web di Kubernetes.
Solo il creatore del cluster Amazon EKS dispone delle autorizzazioni system:masters per configurare il cluster. Esistono due modi per estendere le autorizzazioni system:masters ad altri utenti e ruoli IAM:
- Assumi le credenziali del creatore del cluster. Quindi, aggiungi il ruolo IAM nella sezione mapRoles di aws-auth ConfigMap.
- Utilizza le voci di accesso EKS.
Importante: come best practice, si consiglia di non aggiungere cluster_creator a ConfigMap. Se si configura ConfigMap in modo errato, tutti gli utenti e i ruoli IAM, incluso cluster\ _creator, potrebbero perdere definitivamente l'accesso al cluster Amazon EKS. Per impostazione predefinita, cluster_creator dispone dell'accesso amministratore al cluster che ha creato, quindi non è necessario aggiungere cluster\ _creater come aws-auth ConfigMap.
Nota: nella seguente risoluzione, cluster\ _creator è l'entità IAM che crea il cluster in Amazon EKS. L'utente a cui stai concedendo l'accesso è designated_user.
Risoluzione
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI (Risoluzione degli errori per l'interfaccia della linea di comando AWS). Inoltre, assicurati di utilizzare la versione più recente dell'interfaccia della linea di comando AWS.
Identificazione dell'utente o del ruolo IAM per il creatore del cluster
Identifica l'entità IAM per il creatore del cluster che dispone dell'accesso principale per configurare il tuo cluster Amazon EKS. Per identificare il creatore del cluster, individua la voce API CreateCluster in AWS CloudTrail, quindi controlla la sezione userIdentity della chiamata API.
Quindi, identifica l'entità IAM a cui concedere l'autorizzazione dopo la creazione del cluster.
Utilizza aws-auth ConfigMap per concedere l'accesso al cluster quando cluster\ _creator è un utente IAM
Completa i seguenti passaggi:
-
Installa kubectl sul computer host locale. In alternativa, se disponi di un'istanza Amazon Elastic Compute Cloud (Amazon EC2) dedicata con un pacchetto kubectl installato, utilizza SSH per connetterti all'istanza.
-
Sulla macchina host in cui è installato kubectl, configura l'interfaccia della linea di comando AWS con le credenziali designated_user:
aws configure
-
Esegui il comando dell'interfaccia della linea di comando AWS get-caller-identity:
aws sts get-caller-identity
L'output restituisce i dettagli dell'utente IAM per designated_user:
{ "UserId": "#####################", "Account": "############", "Arn": "arn:aws:iam::############:user/designated_user" }
-
Elenca i pod in esecuzione nel cluster dello spazio dei nomi predefinito:
kubectl get pods --namespace default
L'output mostra il messaggio di errore Non autorizzato perché designated_user non dispone dell'autorizzazione per accedere al cluster Amazon EKS.
-
Configura l'ID chiave di accesso AWS e la chiave di accesso segreta AWS di cluster_creator.
Se hai utilizzato la console Amazon EKS per creare il cluster, sulla macchina host locale configura l'utente o il ruolo IAM cluster_creator nell'interfaccia della linea di comando AWS:aws configure
Se hai utilizzato eksctl per creare il cluster, utilizza le credenziali del profilo AWS CLI specificate per configurare l'interfaccia della linea di comando AWS per eseguire i comandi kubectl.
-
Assicurati che cluster_creator disponga dell'accesso al cluster:
kubectl get pods
Non ricevi il messaggio di errore Non autorizzato e l'output elenca tutti i pod in esecuzione nello spazio dei nomi predefinito. Se l'output non mostra alcuna risorsa, allora nessun pod è in esecuzione nello spazio predefinito dei nomi.
-
Per concedere a designated_user l'accesso al cluster, aggiungi la sezione mapUsers al file aws-auth.yaml. Per ulteriori informazioni, consulta Add IAM principles to your Amazon EKS cluster (Aggiunta di principi IAM al cluster Amazon EKS).
-
Aggiungi designated_user alla sezione mapUsers del file aws-auth.yaml, quindi salva il file.
-
Applica la nuova ConfigMap alla configurazione RBAC del cluster:
kubectl apply -f aws-auth.yaml
-
Modifica nuovamente la configurazione dell'interfaccia della linea di comando AWS per utilizzare le credenziali di designated_user:
aws configure
- Assicurati che designated_user disponga dell'accesso al cluster:
kubectl get pods
Non ricevi il messaggio di errore Non autorizzato e l'output elenca tutti i pod in esecuzione nello spazio dei nomi predefinito. Se l'output non mostra alcuna risorsa, allora nessun pod è in esecuzione nello spazio predefinito dei nomi.
Utilizza aws-auth ConfigMap per concedere l'accesso al cluster quando cluster\ _creator è un ruolo IAM
Se il cluster è stato creato da un ruolo IAM anziché da un utente IAM, non puoi utilizzare le credenziali. Invece, devi assumere il ruolo IAM che ha creato il cluster per fornire l'accesso a designated_user.
Completa i seguenti passaggi:
-
Esegui il comando dell'interfaccia della linea di comando AWS get-caller-identity per ottenere i dettagli dell'utente IAM di assume\ _role\ _user:
aws sts get-caller-identity
-
Conferma che assume_role_user dispone dell'accesso al cluster:
kubectl get pods
L'output mostra il messaggio di errore Non autorizzato perché designated_user non dispone dell'autorizzazione per accedere al cluster Amazon EKS.
-
Consenti ad assume_role_user di assumere il ruolo di cluster_creator:
aws sts assume-role --role-arn arn:aws:iam:11122223333:role/cluster_creator --role-session-name test
L'output mostra le credenziali IAM temporanee per assume_role_user.
-
Utilizza le credenziali IAM temporanee per impostare le variabili d'ambiente AWS_ACCESS_KEY_ID, AWS_SESSION_TOKEN e AWS_SECRET_ACCESS_KEY:
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SESSION_TOKEN=EXAMPLETOKEN export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
L'interfaccia della linea di comando AWS classifica le credenziali impostate nelle variabili d'ambiente e le utilizza per realizzare chiamate ai servizi AWS.
-
Assicurati che l'interfaccia della linea di comando AWS stia utilizzando il ruolo assunto per cluster_creator:
aws sts get-caller-identity
-
Per concedere a designated_user l'accesso al cluster, aggiungi la sezione mapUsers al file aws-auth.yaml.
-
Aggiungi designated_user alla sezione mapUsers del file aws-auth.yaml, quindi salva il file.
-
Applica la nuova configurazione alla configurazione RBAC del cluster Amazon EKS:
kubectl apply -f aws-auth.yaml
-
Rimuovi le seguenti variabili d'ambiente:
unset AWS_ACCESS_KEY_ID unset AWS_SESSION_TOKEN unset AWS_SECRET_ACCESS_KEY
-
Esegui il comando dell'interfaccia della linea di comando AWS get-caller-identity per ottenere i dettagli dell'utente IAM di designated_user:
aws sts get-caller-identity
- Conferma che designated_user disponga dell'accesso al cluster:
kubectl get pods
Non ricevi il messaggio di errore Non autorizzato e l'output elenca tutti i pod in esecuzione nello spazio dei nomi predefinito. Se l'output non mostra alcuna risorsa, allora nessun pod è in esecuzione nello spazio predefinito dei nomi.
Nota: se utilizzi eksctl, consulta Manage IAM users and roles sul sito web di eksctl per maggiori informazioni.
Utilizzo delle voci di accesso EKS per concedere al cluster l'accesso a utenti e ruoli IAM
Amazon EKS supporta tre modalità di autenticazione per le voci di accesso:
- CONFIG\ _MAP per utilizzare solo aws-auth ConfigMap.
- API\ _AND\ _CONFIG\ _MAP per utilizzare le API delle voci di accesso EKS e aws-auth ConfigMap. Questa modalità dà priorità all'autenticazione tramite le voci di accesso EKS ed è utile quando è necessario migrare le autorizzazioni aws-auth esistenti alle voci di accesso EKS.
- API per utilizzare solo le API delle voci di accesso EKS.
Per ulteriori informazioni, consulta Grant IAM users and roles access to Kubernetes APIs (Concedere a utenti e ruoli IAM l'accesso alle API Kubernetes).
Per configurare il cluster con voci di accesso, imposta la modalità di autenticazione del cluster su API EKS o API EKS e ConfigMap.
Per verificare la modalità di autenticazione corrente del cluster, completa i seguenti passaggi:
- Apri la console Amazon EKS.
- Scegli la scheda Accesso.
- In Configurazione dell'accesso, seleziona l'etichetta Modalità di autenticazione.
Oppure, esegui il comando describe-cluster:
aws eks describe-cluster --name example-cluster --query 'cluster.accessConfig.authenticationMode' --region exampleRegion
Se la modalità di autenticazione del cluster è API EKS o API EKS e ConfigMap, puoi configurare il cluster per utilizzare le voci di accesso. In caso contrario, consulta Change authentication mode to use access entries (Modifica della modalità di autenticazione per utilizzare le voci di accesso).
Nota: puoi passare dalla modalità di autenticazione CONFIG\ _MAP alla modalità API, ma non puoi passare dalla modalità API o API\ _AND\ _CONFIG\ _MAP alla modalità CONFIG\ _MAP. Per ulteriori informazioni, consulta Cluster access manager sul sito web di GitHub.
Informazioni correlate
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa