Come posso risolvere l'errore "Your current user or role does not have access to Kubernetes objects on this EKS cluster" in Amazon EKS?

8 minuti di lettura
0

Ricevo il seguente errore in Amazon Elastic Kubernetes Service (Amazon EKS): "Your current user or role does not have access to Kubernetes objects on this EKS cluster."

Breve descrizione

Potresti ricevere questo messaggio di errore quando utilizzi la Console di gestione AWS con un utente o un ruolo AWS Identity and Access Management (IAM). L'errore indica che l'utente o il ruolo IAM non dispone delle autorizzazioni RBAC (dal sito web di Kubernetes) richieste per accedere all'API Kubernetes. Per visualizzare le risorse Kubernetes sulla Console di gestione AWS, il tuo utente o il tuo ruolo IAM AWS deve essere mappato sulla ConfigMap aws-auth nel cluster Amazon EKS.

Quando crei un cluster Amazon EKS, al tuo utente o al tuo ruolo IAM vengono automaticamente concesse le autorizzazioni system:masters nella configurazione RBAC del cluster. Ciò ti consentirà di visualizzare le risorse Kubernetes tramite la console Amazon EKS. Ti consentirà inoltre di modificare la ConfigMap aws-auth all'interno di Kubernetes e concedere ad altri utenti o ruoli AWS la possibilità di interagire con il cluster.

Vengono utilizzati due diversi sistemi di autorizzazione. La Console di gestione AWS utilizza IAM. Il cluster EKS utilizza il sistema RBAC di Kubernetes (dal sito web di Kubernetes). La ConfigMap aws-auth del cluster associa le identità IAM (utenti o ruoli) alle identità RBAC del cluster. Ciò significa che la ConfigMap aws-auth associa le identità IAM alle identità di Kubernetes.

Risoluzione

Prerequisiti

Prima di iniziare, raccogli le seguenti informazioni.

Utente o ruolo non amministratore

Se non sei un utente o un ruolo IAM amministratore del cluster e hai bisogno di visibilità sulla console Amazon EKS, completa i seguenti passaggi:

1.    Ottieni il nome della risorsa Amazon (ARN) dell'identità IAM dell'utente della Console di gestione AWS.

Se si tratta di un ruolo IAM, utilizza il seguente formato ARN:

arn:aws:iam::111122223333:role/example

Importante: non utilizzare il seguente formato:

arn:aws:iam::111122223333:role/my-team/developers/example

2.    Fornisci l'ARN all'amministratore del cluster e chiedi all’amministratore di aggiungerti alla ConfigMap aws-auth.

Nota: per i passaggi da seguire per accedere al tuo ARN, consulta la sezione Identifica l'ARN dell'identità IAM dell'utente della Console di gestione AWS.

Creatore del cluster oppure utente o ruolo di amministratore del cluster

Se sei il creatore o l'amministratore del cluster, usa lo strumento kubectl o lo strumento eksctl per gestire la ConfigMap aws-auth.

Nota: per impostazione predefinita, il gruppo system:masters è associato al ruolo del cluster denominato cluster-admin. Nella sua PolicyRule il ruolo del cluster utilizza il carattere jolly (“*”) per Risorse e Verbi. Ciò significa che qualsiasi utente assegnato al gruppo system:masters ha pieno accesso a tutte le risorse Kubernetes all'interno del cluster.

Consulta la sezione Identifica il creatore del cluster per informazioni dettagliate su come i creatori e gli amministratori del cluster possono identificare il proprio stato di amministratore.

Individua l'ARN dell'identità IAM dell'utente della Console di gestione AWS

Identifica l'utente o il ruolo IAM che stai utilizzando per accedere alla console. Questo potrebbe essere diverso dall'identità utilizzata con l’Interfaccia della linea di comando AWS (AWS CLI). Verifica che l'utente o il ruolo IAM identificato disponga delle autorizzazioni per visualizzare i nodi e i carichi di lavoro di tutti i cluster nella Console di gestione AWS. Quindi, ottieni l'ARN dell'identità IAM. Utilizza una delle seguenti opzioni per accedere all'ARN.

Usa AWS CLI

Se puoi accedere all'utente o al ruolo IAM tramite AWS CLI, esegui il comando seguente:

aws sts get-caller-identity --query Arn

Avvia CloudShell

Se non disponi dell'accesso AWS CLI, esegui il comando seguente:

aws sts get-caller-identity --query Arn

Verrà visualizzato un output simile al seguente:

"arn:aws:iam::111122223333:role/testrole"

-oppure-

"arn:aws:iam::111122223333:user/testuser"

Nota:

  • se si tratta dell'ARN di un ruolo IAM, assicurati che il formato sia simile al formato ARN che ottieni dalla sezione Prerequisiti.
  • Se l'ARN include assumed-role, è necessario ottenere l'ARN del ruolo. Ad esempio, il ruolo ARN assunto di arn:aws:sts::123456:assumed-role/MyRole/aadams è associato al ruolo ARN arn:aws:sts::123456:role/MyRole. Puoi verificare questo valore nella console IAM.

Identifica il creatore del cluster

Per trovare il ruolo di creatore o amministratore del cluster con autorizzazioni primarie per configurare il cluster, cerca la chiamata API CreateCluster in AWS CloudTrail. Quindi, controlla la sezione userIdentity della chiamata API.

Suggerimento: se trovi il nome del creatore del cluster in CloudTrail, ma questo è stato eliminato, ricrea un nuovo utente o ruolo IAM con lo stesso nome. Poiché questa nuova entità IAM ha lo stesso ARN del creatore del cluster originale, erediterà lo stesso accesso amministrativo al cluster.

Nota: CloudTrail fornisce solo 90 giorni di cronologia.

Usa kubectl o eksctl per aggiungere un nuovo utente o ruolo IAM all'RBAC di Kubernetes

Prima di scegliere lo strumento kubectl o eksctl per modificare la ConfigMap aws-auth, assicurati di aver completato il passaggio 1. Quindi, segui i passaggi 2-4 per modificarla con kubectl. Per modificarla con eksctl, vai al passaggio 5.

1.    Dopo aver identificato il creatore o l'amministratore del cluster, configura AWS CLI per utilizzare l'IAM del creatore del cluster. Per ulteriori informazioni, consulta ](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)Configuration basics[.

Per verificare che AWS CLI sia configurato correttamente con l'entità IAM, esegui il comando seguente:

$ aws sts get-caller-identity

L'output restituisce l'ARN dell'utente o del ruolo IAM. Ad esempio:

{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "XXXXXXXXXXXX",
    "Arn": "arn:aws:iam::XXXXXXXXXXXX:user/testuser"
}

Nota: se ricevi errori durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

2.     Per modificare la ConfigMap aws-auth con kubectl devi avere accesso al cluster. Esegui il seguente comando kubectl:

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

La console mostra la ConfigMap corrente.

Se non riesci a connetterti al cluster, prova ad aggiornare il file kubeconfig. Esegui il file con un'identità IAM che ha accesso al cluster. L'identità che ha creato il cluster ha sempre accesso al cluster.

aws eks update-kubeconfig --region region_code --name my_cluster

Nota: sostituisci region_code con il codice della Regione AWS del cluster EKS e my_cluster con il nome del tuo cluster EKS.

I comandi kubectl devono connettersi all'endpoint del server EKS. Se l'endpoint del server API è pubblico, per connettersi all'endpoint sarà necessario disporre dell'accesso a Internet. Se l'endpoint del server API è privato, è necessario connettersi all'endpoint del server EKS dall'interno del VPC in cui è in esecuzione il cluster EKS.

3.    Per modificare la ConfigMap aws-auth nell'editor di testo come creatore o amministratore del cluster, esegui il comando seguente:

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

4.   Aggiungi un utente o un ruolo IAM:

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

-oppure-

Aggiungi il ruolo IAM a mapRoles. Ad esempio:

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

Inserisci le seguenti informazioni:

  • Il gruppo system:masters consente l'accesso da superutente per eseguire qualsiasi azione su qualsiasi risorsa. Questa non è una procedura consigliata per gli ambienti di produzione.
  • È consigliabile ridurre al minimo le autorizzazioni concesse. Prendi in considerazione la possibilità di creare un ruolo che abbia accesso solo a uno spazio dei nomi specifico. Per ulteriori informazioni, consulta la pagina Using RBAC authorization sul sito web di Kubernetes. Inoltre, consulta la pagina Autorizzazioni richieste e rivedi la sezione Visualizzazione delle risorse Kubernetes in uno spazio dei nomi specifico per un esempio di accesso limitato della console Amazon EKS.

5.    Lo strumento eksctl consente di aggiornare la ConfigMap aws-auth con il seguente comando:

eksctl create iamidentitymapping --cluster your_cluster_Name --region=your_region --arn YOUR_IAM_ARN <arn:aws:iam::123456:role testing=""> --group system:masters --username admin</arn:aws:iam::123456:role>

Nota: sostituisci your_cluster_Name con il nome del cluster EKS, your_region con la Regione del cluster EKS e YOUR_IAM_ARN con il ruolo IAM oppure usa l'ARN.

Verifica l'accesso al tuo cluster Amazon EKS

1.    Apri la console Amazon EKS.

2.    Nella sezione Amazon EKS del pannello di navigazione, scegli Cluster.

3.    Scegli il tuo cluster.

4.    Controlla la presenza di errori nelle schede Panoramica e Carichi di lavoro.

Se hai configurato uno spazio dei nomi specifico, nella console Amazon EKS verrà visualizzato il seguente messaggio di errore:

Error loading Deployments
deployments.apps is forbidden: User "xxxxxx" cannot list resource "deployments" in API group "apps" at the cluster scope or in the namespace "xxxxxxx"

L'errore non viene visualizzato per lo spazio dei nomi specifico.

Per risolvere i messaggi di errore, consulta la pagina Impossibile visualizzare i nodi nella scheda Calcolo (o qualsiasi altro elemento nella scheda Risorse) e si riceve un errore nella AWS Management Console.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa