Come faccio a risolvere l'errore "È necessario accedere al server (non autorizzato)" quando mi connetto al server API Amazon EKS?
Uso i comandi kubectl per connettermi al server API Amazon Elastic Kubernetes Service (Amazon EKS). Ho ricevuto il messaggio "errore: Devi aver effettuato il login al server (Non autorizzato)".
Descrizione breve
Questo errore si verifica quando l'entità AWS Identity and Access Management (IAM) configurata in kubectl non è autenticata da Amazon EKS. Sei autenticato e autorizzato ad accedere al tuo cluster Amazon EKS in base all'entità IAM (utente o ruolo) che utilizzi. Questo errore è in genere causato da una delle seguenti configurazioni:
- Hai configurato lo strumento kubectl per utilizzare il tuo utente o ruolo IAM.
- Hai mappato la tua entità IAM su aws-auth ConfigMap.
Per risolvere questo problema, completa i passaggi in una delle seguenti sezioni in base al tuo caso d'uso:
- Sei il creatore del cluster
- Non sei il creatore del cluster
- Usi le voci di accesso
Risoluzione
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Sei il creatore del cluster
Sei il creatore del cluster se la tua entità IAM è stata utilizzata per creare il cluster Amazon EKS. Per risolvere l'errore come creatore del cluster, completa i seguenti passaggi:
-
In Amazon CloudWatch Log Insights, seleziona il gruppo di log per il cluster Amazon EKS. Ad esempio, /aws/eks/my-cluster/cluster. Quindi, esegui la seguente query:
fields @logstream, @timestamp, @message| sort @timestamp desc | filter @logStream like /authenticator/ | filter @message like "username=kubernetes-admin" | limit 50Nota: attiva i log dell'autenticatore Amazon EKS.
Questa query restituisce l'entità IAM mappata come creatore del cluster:@messagetime="2022-05-26T18:55:30Z" level=info msg="access granted" arn="arn:aws:iam::123456789000:user/testuser" client="127.0.0.1:57586" groups="[system:masters]" method=POST path=/authenticate uid="aws-iam-authenticator:123456789000:AROAFFXXXXXXXXXX" username=kubernetes-admin -
Esamina l'entità IAM che ha creato il cluster per AWS CLI. Per verificare se l'entità IAM è configurata per AWS CLI nel tuo ambiente shell, esegui il seguente comando:
$ aws sts get-caller-identityPuoi anche usare un profilo specifico per eseguire questo comando:
$ aws sts get-caller-identity --profile MY-PROFILEL'output restituisce il nome della risorsa Amazon (ARN) dell'entità IAM configurata per AWS CLI.
Esempio:{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }Verifica che l'entità IAM restituita corrisponda all'entità IAM creatrice del cluster. Se l'entità IAM restituita non è il creatore del cluster, aggiorna la configurazione AWS CLI per utilizzare l'entità IAM creatore del cluster.
-
Per aggiornare o generare il file kubeconfig usa il seguente comando:
$ aws eks update-kubeconfig --name eks-cluster-name --region aws-regionNota: sostituisci eks-cluster-name con il nome del tuo cluster. Sostituisci aws-region con il nome della tua regione AWS.
Per specificare un profilo AWS CLI per il file kubeconfig, esegui il seguente comando:$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --profile my-profileNota: sostituisci eks-cluster-name con il nome del tuo cluster. Sostituisci aws-region con il nome della tua Regione. Sostituisci my-profile con il nome del tuo profilo.
-
Per confermare che il file kubeconfig è aggiornato, esegui il comando seguente:
$ kubectl config view --minify -
Per confermare che la tua entità IAM è autenticata e che puoi accedere al tuo cluster EKS, esegui il seguente comando:
$ kubectl get svcEsempio di output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 77d
Non sei il creatore del cluster
Non sei il creatore del cluster se la tua entità IAM non è stata utilizzata per creare il cluster. In questo caso, completa i seguenti passaggi per mappare la tua entità IAM su aws-auth ConfigMap per consentire l'accesso al cluster:
-
Esamina l'entità IAM che ha creato il cluster per AWS CLI. Per vedere l'entità IAM configurata per AWS CLI nel tuo ambiente shell, esegui il seguente comando:
$ aws sts get-caller-identityPuoi anche usare un profilo specifico per eseguire questo comando:
$ aws sts get-caller-identity --profile my-profileL'output restituisce l'ARN dell'entità IAM configurata per AWS CLI.
Esempio:{ "UserId": "XXXXXXXXXXXXXXXXXXXXX", "Account": "XXXXXXXXXXXX", "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser" }Verifica che l'entità IAM restituita corrisponda all'entità IAM creatrice del cluster. Se l'entità IAM restituita non è il creatore del cluster, aggiorna la configurazione AWS CLI per utilizzare l'entità IAM creatore del cluster. Quindi, usa kubectl per riprovare ad accedere al tuo cluster. Se il problema persiste, vai al passaggio successivo.
-
Se l'entità IAM restituita non è il creatore del cluster, aggiungi la tua entità a aws-auth ConfigMap per consentire all'entità di accedere al cluster. Poiché solo l'amministratore del cluster può modificare aws-auth ConfigMap, completa una delle seguenti attività:
Per utilizzare l'entità IAM che ha creato il cluster per accedere al cluster, completa i passaggi nella sezione Sei il creatore del cluster.
Oppure chiedi all'amministratore del cluster di eseguire questa azione. -
Per controllare se la tua entità IAM è in aws-auth ConfigMap, esegui il seguente comando:
eksctl get iamidentitymapping --cluster cluster-name-oppure-
kubectl describe configmap aws-auth -n kube-systemSe la tua entità IAM è presente in aws-auth ConfigMap, continua con il passaggio successivo. Se la tua entità IAM non è presente in aws-auth ConfigMap, esegui il comando seguente per mappare automaticamente l’entità IAM:
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::XXXXXXXXXXXX:user/testuser \ --group system:masters \ --no-duplicate-arns \ --username admin-user1Oppure, modifica aws-auth ConfigMap per mappare manualmente l‘entità IAM:
$ kubectl edit configmap aws-auth -namespace kube-systemPer aggiungere un'entità IAM a aws-auth ConfigMap, aggiungi l'ARN dell'utente o del ruolo IAM a mapUsers.
Esempio di utente IAM:mapUsers: | - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser username: testuser groups: - system:mastersEsempio di ruolo IAM:
mapRoles: | - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole username: testrole groups: - system:mastersImportante:
il ruolo IAM deve essere mappato senza il percorso. Per ulteriori informazioni sui requisiti del percorso rolearn, consulta la sezione aws-auth ConfigMap non concede l'accesso al cluster.
Per specificare rolearn per un ruolo IAM del Centro identità AWS IAM, rimuovi il percorso "/aws-reserved/sso.amazonaws.com/REGION" dal ruolo ARN. Altrimenti, la voce in ConfigMap non può autorizzarti come utente valido.
Il gruppo system:masters consente l'accesso da superutente per eseguire qualsiasi azione su qualsiasi risorsa. Per ulteriori informazioni, consulta Default roles and role bindings (Ruoli vincoli di ruolo predefiniti) sul sito web di Kubernetes. Per limitare l'accesso a questo utente, puoi creare un ruolo Amazon EKS e una risorsa di associazione dei ruoli. Per ulteriori informazioni, consulta Required permissions. -
Aggiorna o genera il file kubeconfig usando il seguente comand. Assicurati che AWS CLI sia configurato con la tua entità IAM.
$ aws eks update-kubeconfig --name eks-cluster-name --region aws-regionNota: sostituisci eks-cluster-name con il nome del tuo cluster. Sostituisci aws-region con il nome della tua Regione.
Puoi anche usare un profilo specifico per eseguire questo comando:$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region --profile my-profileNota: sostituisci eks-cluster-name con il nome del tuo cluster. Sostituisci aws-region con il nome della tua Regione. Sostituisci my-profile con il nome del tuo profilo.
-
Per confermare che il file kubeconfig è aggiornato, esegui il comando seguente:
$ kubectl config view --minify -
Per confermare che il tuo utente o ruolo IAM è autenticato, accedi nuovamente al cluster. Ad esempio, è possibile eseguire il comando seguente per confermare che l'errore è stato risolto:
$ kubectl get svcEsempio di output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 77d
Uso delle voci di accesso per riottenere l'accesso al cluster
Utilizza l'API CreateAccessEntry per fornire o ripristinare l'accesso al cluster Amazon EKS. Per ulteriori informazioni, consulta How can I use the Amazon EKS access entry API to recover access to an EKS cluster?
Risoluzione dei problemi
Quando esegui un comando kubectl, viene inviata una richiesta al server API del cluster Amazon EKS. Quindi, l'autenticatore Amazon EKS tenta di autenticare questa richiesta. Se l'autenticatore Amazon EKS non è in grado di autenticare la richiesta, controlla i log dell'autenticatore EKS in CloudWatch. Utilizza i seguenti suggerimenti per la risoluzione dei problemi per identificare il problema.
Accedi ai log dell'autenticatore EKS
- Attiva la registrazione per il tuo cluster Amazon EKS.
- Apri CloudWatch Log Insights.
- Seleziona il gruppo di log per il tuo cluster. Esempio: "/aws/eks/example-cluster/cluster".
- Esegui la seguente query:
Per identificare le righe di log dello stesso intervallo di tempo in cui hai visualizzato l'errore, esegui i comandi kubectl.fields @timestamp, @message| filter @logStream like /authenticator/ | sort @timestamp desc | limit 1000
Controll dei log dell'autenticatore EKS
In base alla causa dell'errore, completa le seguenti attività:
-
Se il problema è causato dall'utilizzo dell'entità IAM errata per kubectl, rivedi la configurazione kubeconfig e AWS CLI di kubectl. Assicurati di utilizzare l’entità IAM corretta. Nel seguente esempio di output, l'entità IAM utilizzata da kubectl non può essere convalidata. Esamina l'entità IAM utilizzata da kubectl e assicurati che esista in IAM e che l'accesso programmatico dell'entità sia attivo.
Esempio di output:time="2022-12-26T20:46:48Z" level=warning msg="access denied" client="127.0.0.1:43440" error="sts getCallerIdentity failed: error from AWS (expected 200, got 403). Body: {\"Error\":{\"Code\":\"InvalidClientTokenId\",\"Message\":\"The security token included in the request is invalid.\",\"Type\":\"Sender\"},\"RequestId\":\"a9068247-f1ab-47ef-b1b1-cda46a27be0e\"}" method=POST path=/authenticate -
Se il problema è dovuto al fatto che l’entità IAM non è mappata in aws-auth ConfigMap o è mappata in modo errato, consulta aws-auth ConfigMap. Assicurati che l'entità IAM sia mappata correttamente e soddisfi i requisiti elencati nella sezione Non sei il creatore di cluster. Per le entità IAM mappate in modo errato o mancanti, i log dell'autenticatore EKS sono simili al seguente esempio di output:
time="2022-12-28T15:37:19Z" level=warning msg="access denied" arn="arn:aws:iam::XXXXXXXXXX:role/admin-test-role" client="127.0.0.1:33384" error="ARN is not mapped" method=POST path=/authenticate -
Se aws-auth ConfigMap è stato aggiornato e hai perso l'accesso al cluster, puoi accedere al cluster utilizzando l'entità IAM del creatore del cluster. Poiché il creatore del cluster non deve essere mappato in aws-auth ConfigMap, usa questa entità IAM per accedere al cluster.
-
Se l'entità IAM creatore del cluster è stata eliminata, ricrea la stessa entità IAM con la stessa convenzione di denominazione. Quindi, questa entità IAM creatore del cluster ricreata potrà avere lo stesso ARN dell'entità IAM. Completa i passaggi nella sezione Sei il creatore del cluster per utilizzare l'entità IAM per accedere al cluster.
-
Se il creatore del cluster è un ruolo IAM creato per un utente SSO che è stato rimosso, non puoi creare nuovamente questo ruolo IAM. In questo caso, contatta il Supporto AWS per ricevere assistenza.
Informazioni correlate
Come posso fornire l'accesso ad altri utenti e ruoli IAM dopo aver creato il cluster in Amazon EKS?
Using RBAC authorization sul sito web di Kubernetes
Grant IAM users access to Kubernetes with EKS access entries
EKS Access Entries sul sito web eksctl
- Argomenti
- Containers
- Lingua
- Italiano
Video correlati

