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

7 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’identità AWS Identity and Access Management (IAM) (utente o ruolo). L'errore indica che l'utente o il ruolo IAM non dispone delle autorizzazioni RBAC richieste per accedere all'API Kubernetes. Per visualizzare le risorse Kubernetes sulla console di gestione AWS, l’identità IAM AWS deve essere mappata sulla ConfigMap aws-auth nel cluster Amazon EKS. Per ulteriori informazioni, consulta Using RBAC authorization sul sito Web di Kubernetes.

Quando crei un cluster Amazon EKS, alla tua identità 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. La console di gestione AWS utilizza IAM per concedere le autorizzazioni mentre il cluster EKS utilizza il sistema RBAC di Kubernetes. Poiché la ConfigMap aws-auth del cluster associa le identità IAM alle identità RBAC del cluster, la ConfigMap aws-auth associa le identità IAM alle identità Kubernetes.

Soluzione

Prerequisiti

In base alla situazione specifica, 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 l'ARN dell'identità IAM dell'utente della console di gestione AWS. AWS IAM Authenticator non consente un percorso nell’ARN del ruolo utilizzato in ConfigMap. Se si tratta di un ruolo IAM, utilizza il seguente formato per l’ARN:
    arn:aws:iam::111122223333:role/example
    Nota: non utilizzare il formato seguente poiché contiene informazioni non necessarie:
    arn:aws:iam::111122223333:role/my-team/developers/example
  2. Fornisci l'ARN all'amministratore del cluster, quindi 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 questo clusterrole 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 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 usi per accedere alla console. Questa identità IAM potrebbe essere diversa da quella 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. Utilizza una delle seguenti opzioni per accedere all'ARN.

Nota: se visualizzi dei messaggi di errore quando esegui i comandi dell'interfaccia della linea di comando AWS, consulta la sezione Risolvere gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

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

CloudShell

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

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 a quello dell’ARN della 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. Verifica 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. 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 identità 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.

Aggiungi il nuovo utente o ruolo IAM all’RBAC di Kubernetes

Per aggiungere il nuovo utente o ruolo IAM all'RBAC di Kubernetes, configura innanzitutto AWS CLI per utilizzare l'IAM che ha creato il cluster. Per verificare che AWS CLI sia configurato correttamente con l'identità 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"
}

Quindi, usa kubectl o eksctl per modificare la ConfigMap aws-auth.

kubectl

  1. Per usare kubectl per modificare la ConfigMap aws-auth esegui il seguente comando kubectl per accedere al cluster:

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

    La console mostra la ConfigMap corrente. Se non riesci a connetterti al cluster, aggiorna il file kubeconfig. Poiché l'identità creatrice del cluster ha sempre accesso al cluster, esegui il comando con un'identità IAM che ha 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 cloud privato virtuale (VPC) in cui è in esecuzione il cluster EKS.

  2. 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
  3. Aggiungi un utente o un ruolo IAM:

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

    In alternativa, aggiungi il ruolo IAM a mapRoles. Ad esempio:

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

È consigliabile non utilizzare system:masters per gli ambienti di produzione perché system:masters consente a un superutente di accedere per eseguire qualsiasi azione su qualsiasi risorsa. È inoltre consigliabile ridurre al minimo le autorizzazioni concesse. Crea un ruolo con accesso solo a uno spazio dei nomi specifico. Consulta la sezione View Kubernetes resources in a specific namespace di Required permissions.

eksctl

Per utilizzare lo strumento eksctl per aggiornare la ConfigMap aws-auth esegui 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

Completa i seguenti passaggi:

  1. Apri la console Amazon EKS.
  2. Nel riquadro 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 Deploymentsdeployments.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