Come faccio a risolvere l'errore "È necessario accedere al server (non autorizzato)" quando mi connetto al server API Amazon EKS?

9 minuti di lettura
0

Sto usando i comandi kubectl per connettermi al server interfaccia di programmazione dell'applicazione (API) di Amazon Elastic Kubernetes Service (Amazon EKS). Ho visualizzato 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. Pertanto, assicurati di quanto segue:

  • Hai configurato lo strumento kubectl per utilizzare il tuo utente o ruolo IAM.
  • La tua entità IAM è mappata su aws-auth ConfigMap.

Per risolvere questo problema, devi completare 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

Risoluzione

Se visualizzi errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), verifica di utilizzare una versione 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.

1.    Esegui la seguente query in Amazon CloudWatch Log Insights per identificare l'ARN che ha creato il cluster:

Innanzitutto, seleziona il gruppo di log per il tuo cluster Amazon EKS (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 50

Nota: assicurati di aver attivato i log di autenticazione di Amazon EKS.

Questa query restituisce l'entità IAM mappata come creatore del cluster:

@message
time="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

2.    Assicurati di aver configurato l'AWS CLI con l'entità IAM che ha creato il cluster. Per verificare se l'entità IAM è configurata per AWS CLI nel tuo ambiente shell, esegui il seguente comando:

$ aws sts get-caller-identity

Puoi anche eseguire questo comando usando un profilo specifico:

$ aws sts get-caller-identity --profile MY-PROFILE

L'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.

3.    Aggiorna o genera il file kubeconfig usando il seguente comando:

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Nota:

  • 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, esegui il comando seguente:

$ aws eks update-kubeconfig --name eks-cluster-name —region aws-region —profile my-profile

Nota:

  • 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.

4.    Per confermare che il file kubeconfig è aggiornato, esegui il comando seguente:

$ kubectl config view --minify

5.    Per confermare che la tua entità IAM è autenticata e che puoi accedere al tuo cluster EKS, esegui il seguente comando:

$ kubectl get svc

Esempio 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, devi mappare la tua entità IAM su aws-auth ConfigMap per consentire l'accesso al cluster.

1.    Assicurati di aver configurato l'AWS CLI con la tua entità IAM. Per vedere l'entità IAM configurata per AWS CLI nel tuo ambiente shell, esegui il seguente comando:

$ aws sts get-caller-identity

Puoi anche eseguire questo comando usando un profilo specifico:

$ aws sts get-caller-identity --profile my-profile

L'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 sia la tua entità IAM. Se l'entità IAM restituita non è quella utilizzata per interagire con il cluster, aggiorna innanzitutto la configurazione AWS CLI per utilizzare l'entità IAM corretta. Quindi, riprova ad accedere al tuo cluster usando kubectl. Se il problema persiste, continua con il passaggio 2.

2.    Se l'entità IAM restituita non è il creatore del cluster, aggiungi la tua entità IAM a aws-auth ConfigMap. Ciò consente all'entità IAM di accedere al cluster.

Solo l'amministratore del cluster può modificare aws-auth ConfigMap. Pertanto, effettua una delle seguenti operazioni:

  • Usa le istruzioni nella sezione Sei il creatore del cluster per accedere al cluster utilizzando l'entità IAM del creatore del cluster.
  • Chiedi all'amministratore del cluster di eseguire questa azione.

Controlla se la tua entità IAM è in aws-auth ConfigMap eseguendo il seguente comando:

eksctl get iamidentitymapping --cluster cluster-name

-oppure-

kubectl describe configmap aws-auth -n kube-system

Se la tua entità IAM si trova in aws-auth ConfigMap, puoi passare al passaggio 3.

Mappa automaticamente la tua entità IAM eseguendo il seguente comando:

eksctl create iamidentitymapping \
    --cluster $CLUSTER-NAME \
    --region $REGION \
    --arn arn:aws:iam::XXXXXXXXXXXX:user/testuser \
    --group system:masters \
    --no-duplicate-arns \
    --username admin-user1

Oppure puoi mappare manualmente la tua entità IAM modificando aws-auth ConfigMap:

$ kubectl edit configmap aws-auth --namespace kube-system

Per aggiungere un utente IAM, aggiungi l'ARN dell'utente IAM a mapUsers.

Esempio:

mapUsers: |
  - userarn: arn:aws:iam::XXXXXXXXXXXX:user/testuser
    username: testuser
    groups:
      - system:masters

Per aggiungere un ruolo IAM, aggiungi l'ARN del ruolo IAM a mapRoles.

Esempio:

mapRoles: |
  - rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole
    username: testrole
    groups:
      - system:masters

Importante:

  • il ruolo IAM deve essere mappato senza il percorso. Per saperne di più sui requisiti del percorso rolearn, espandi la sezione aws-auth ConfigMap does not grant access to the cluster in Troubleshooting IAM.
  • Per specificare rolearn per un ruolo IAM del Centro identità AWS IAM (successore di AWS Single Sign-On), 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 Ruoli e associazioni di ruolo predefiniti. Per limitare l'accesso a questo utente, puoi creare un ruolo Amazon EKS e una risorsa di associazione dei ruoli. Per un esempio di accesso limitato per gli utenti che visualizzano le risorse nella console Amazon EKS, segui i passaggi 2 e 3 in Autorizzazioni richieste.

3.    Aggiorna o genera il file kubeconfig eseguendo il seguente comando. Assicurati che l'AWS CLI sia configurata con la tua entità IAM restituita nel passaggio 1.

$ aws eks update-kubeconfig --name eks-cluster-name --region aws-region

Nota:

  • Sostituisci eks-cluster-name con il nome del tuo cluster.
  • Sostituisci aws-region con il nome della tua regione AWS.

Puoi anche eseguire questo comando usando un profilo specifico:

$ aws eks update-kubeconfig --name eks-cluster-name —region aws-region —profile my-profile

Nota:

  • Sostituisci eks-cluster-name con il nome del tuo cluster.
  • Sostituisci aws-region con il nome della tua regione AWS.
  • Sostituisci my-profile con il nome del tuo profilo.

4.    Per confermare che il file kubeconfig è aggiornato, esegui il comando seguente:

$ kubectl config view --minify

5.    Per confermare che il tuo utente o ruolo IAM sia autenticato, prova ad accedere nuovamente al cluster. Ad esempio, è possibile eseguire il comando seguente per confermare che l'errore è stato risolto:

$ kubectl get svc

Esempio di output:

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes      ClusterIP   10.100.0.1     <none>        443/TCP   77d

Altri consigli per la risoluzione dei problemi

Se l'errore persiste, segui questi consigli per la risoluzione dei problemi per identificare il problema.

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. Pertanto, controlla i log dell'autenticatore EKS in CloudWatch per identificare il problema.

1.    Assicurati di aver attivato la registrazione per il tuo cluster Amazon EKS.

2.    Apri CloudWatch Log Insights.

3.    Seleziona il gruppo di log per il tuo cluster. Esempio: "/aws/eks/example-cluster/cluster".

4.    Esegui la seguente query:

fields @timestamp, @message
| filter @logStream like /authenticator/
| sort @timestamp desc
| limit 1000

Identifica le righe di log per lo stesso intervallo di tempo in cui hai visualizzato l'errore eseguendo i comandi kubectl. Puoi trovare ulteriori informazioni sulla causa dell'errore nei log degli autenticatori di Amazon EKS.

  • 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. Ad esempio, supponiamo che i log siano simili ai seguenti. Questo risultato indica che l'entità IAM utilizzata da kubectl non può essere convalidata. Assicurati che l'entità IAM utilizzata da kubectl esista in IAM e che l'accesso programmatico dell'entità sia attivo.
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 la tua 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. In questo caso, i log dell'autenticatore EKS sono simili ai seguenti:
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. Questo perché il creatore del cluster non ha bisogno di essere mappato in aws-auth ConfigMap.
  • Se l'entità IAM creatrice del cluster è stata eliminata, crea prima di tutto lo stesso utente o ruolo IAM. Quindi, accedi al cluster utilizzando questa entità IAM seguendo i passaggi nella sezione Sei il creatore del 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

Attivazione dell'accesso di utenti e ruoli IAM al tuo cluster

Come faccio posso fornire l'accesso ad altri utenti e ruoli IAM dopo aver creato il cluster in Amazon EKS?

Risoluzione dei problemi di Amazon EKS

Utilizzo dell'autorizzazione RBAC sul sito web di Kubernetes

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa