Come posso risolvere gli errori IRSA in Amazon EKS?

Ultimo aggiornamento: 10/12/2021

Spesso ricevo errori quando utilizzo i ruoli IAM per gli account di servizio (IRSA) con Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Per risolvere i problemi relativi all'IRSA in Amazon EKS, segui la procedura descritta in una delle seguenti sezioni:

  • Controlla la formattazione dell'ARN IAM
  • Verifica se hai un provider IAM OIDC per il tuo account AWS
  • Verifica del destinatario del provider OIDC
  • Verifica di aver creato la risorsa OIDC con un'identificazione personale del certificato root
  • Controlla la configurazione della policy di attendibilità del tuo ruolo IAM
  • Verifica che la configurazione del webhook dell'identità del pod esista e sia valida
  • Assicurati di utilizzare gli SDK AWS supportati

Risoluzione

Controlla la formattazione dell'ARN IAM

Se il tuo IAM Amazon Resource Name (ARN) è impostato nell'annotazione dell'account di servizio relativo e non è formattato correttamente, viene visualizzato il seguente errore:

An error occurred (ValidationError) when calling the AssumeRoleWithWebIdentity
operation: Request ARN is invalid

Esempio di un formato dell'ARN errato:

eks.amazonaws.com/role-arn: arn:aws:iam::::1234567890:role/example

Il formato dell'ARN precedente non è corretto perché contiene due punti aggiuntivi (:). Per assicurarti di utilizzare il formato dell'ARN corretto, consulta ARN IAM.

Verifica se hai un provider IAM OIDC per il tuo account AWS

Se non è stato creato un provider OpenID Connect (OIDC), viene visualizzato il seguente errore:

An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: No OpenIDConnect provider found in your account for https://oidc.eks.region.amazonaws.com/id/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Ottieni l'URL del provider IAM OIDC:

aws eks describe-cluster --name cluster name --query "cluster.identity.oidc.issuer" --output text

Nota: sostituisci il nome del cluster con il nome del tuo cluster.

Output di esempio:

https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E

Elenca i provider IAM OIDC:

aws iam list-open-id-connect-providers | grep EXAMPLED539D4633E53DE1B716D3041E

Nota: sostituisci EXAMPLED539D4633E53DE1B716D3041E con il valore restituito dal comando precedente.

Se il provider OIDC non esiste, utilizza il seguente comando eksctl per crearne uno:

eksctl utils associate-iam-oidc-provider --cluster cluster name --approve

Nota: sostituisci il nome del cluster con il nome del tuo cluster.

Puoi anche utilizzare la Console di gestione AWS per creare un provider IAM OIDC per il tuo cluster.

Verifica il pubblico del provider IAM OIDC

Quando crei un provider IAM OIDC, devi utilizzare sts.amazonaws.com come destinatario. Se il destinatario non è corretto, viene visualizzato il seguente errore:

An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: Incorrect token audience

Controlla il destinatario del provider IAM OIDC:

aws iam get-open-id-connect-provider --open-id-connect-provider-arn ARN-of-OIDC-provider

Nota: sostituisci ARN-of-OIDC-provider con l'ARN del tuo provider OIDC.

-oppure-

Completa i seguenti passaggi:

1.    Apri la console di Amazon EKS.

2.    Seleziona il nome del tuo cluster, quindi seleziona la scheda Configuration (Configurazione).

3.    Nella sezione Details (Dettagli), nota il valore di OpenID Connect provider URL (URL del provider OpenID Connect).

4.    Apri la console IAM.

5.    Nel pannello di navigazione, alla voce Access Management (Gestione accessi), scegli Identity Providers (Provider di identità).

6.    Seleziona il provider che corrisponde all'URL del tuo cluster.

Per cambiare il destinatario, completa i seguenti passaggi:

1.    Apri la console IAM.

2.    Nel pannello di navigazione, alla voce Access Management (Gestione accessi), scegli Identity Providers (Provider di identità).

3.    Seleziona il provider che corrisponde all'URL del tuo cluster.

4.    Scegli Actions (Operazioni) e quindi scegli Add audience (Aggiungi destinatario).

5.    Aggiungi sts.amazonaws.com.

Verifica di aver creato la risorsa IAM OIDC con un'identificazione personale del certificato root

Se non hai utilizzato l'identificazione personale del certificato root per creare il provider OIDC, viene visualizzato il seguente errore:

An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint

Nota: le identificazioni personali dei certificati non root si rinnovano ogni anno mentre le identificazioni dei certificati root si rinnovano ogni dieci anni. Pertanto, una best practice è utilizzare l'identificazione personale di un certificato root quando si crea un OIDC IAM.

Se hai utilizzato AWS Command Line Interface (AWS CLI), AWS Tools for PowerShell o l'API IAM per creare il tuo IAM OIDC, devi ottenere l'identificazione personale manualmente. Se hai creato il tuo IAM OIDC nella console IAM, una best practice è ottenere manualmente l'identificazione personale per verificare che la console abbia recuperato quella corretta.

Ottieni l'identificazione personale del certificato root e la sua data di scadenza:

echo | openssl s_client -servername oidc.eks.your-region-code.amazonaws.com -showcerts -connect oidc.eks.your-region-code.amazonaws.com:443 2>&- | tail -r | sed -n '/-----END CERTIFICATE-----/,/-----BEGIN CERTIFICATE-----/p; /-----BEGIN CERTIFICATE-----/q' | tail -r | openssl x509 -fingerprint -noout -dates | sed 's/://g' | awk -F= '{print tolower($2)}'

Nota: sostituisci your-region-code con la regione AWS in cui si trova il cluster.

Output di esempio:

9e99a48a9960b14926bb7f3b02e22da2b0ab7280 sep 2 000000 2009 gmt jun 28 173916 2034 gmt

Nell'output di esempio precedente, 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 è l'identificazione personale, sep 2 000000 2009 gmt è la data di inizio del certificato e jun 28 173916 2034 è la data di scadenza del certificato.

Controlla la configurazione della policy di attendibilità del tuo ruolo IAM

Se la policy di attendibilità del ruolo IAM non è configurata correttamente, viene visualizzato il seguente errore:

An error occurred (AccessDenied) when calling the AssumeRoleWithWebIdentity operation: Not authorized to perform sts:AssumeRoleWithWebIdentity

Per risolvere questo problema, assicurati di utilizzare il provider IAM OIDC corretto. Se il provider IAM OIDC è corretto, utilizza la guida alla configurazione del ruolo IAM per verificare se le condizioni della policy di attendibilità sono configurate correttamente.

Verifica che la configurazione del webhook dell'identità del pod esista e sia valida

Se hai cancellato o modificato accidentalmente la configurazione del webhook, IRSA smette di funzionare.

Esegui il comando seguente per verificare che la configurazione del webhook esista e sia valida:

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Assicurati di utilizzare gli SDK AWS supportati

Assicurati di utilizzare una versione di SDK AWS che supporti l'acquisizione di un ruolo IAM tramite il file del token di identità Web OIDC.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?