Come posso risolvere gli errori IRSA in Amazon EKS?

6 minuti di lettura
0

Quando utilizzo i ruoli AWS Identity and Access Management (IAM) per gli account di servizio (IRSA) con Amazon Elastic Kubernetes Service (Amazon EKS) ricevo messaggi di errore.

Risoluzione

Controlla il formato dell'ARN IAM

Se hai formattato in maniera errata il tuo ARN IAM nell'annotazione dell'account di servizio, riceverai il seguente messaggio di errore:

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

Di seguito è riportato un esempio di ARN con un formato errato:

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

Poiché l'ARN ha i due punti in più (:), il formato errato dell'ARN causa il messaggio di errore. Per verificare il formato ARN corretto, consulta la sezione IAM ARNs.

Verifica se disponi di un provider OIDC IAM per il tuo account AWS

Se non hai creato un provider OpenID Connect (OIDC), riceverai il seguente messaggio di 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"

Per risolvere questo errore, recupera l'URL del provider OIDC IAM:

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

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

L'output sarà simile all'esempio seguente:

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

Per elencare i provider OIDC IAM, esegui il comando seguente:

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

Nota: sostituisci EXAMPLED539D4633E53DE1B716D3041E con l'URL del provider OIDC IAM.

Se il provider OIDC non esiste, esegui il seguente comando eksctl per creare un provider OIDC:

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

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

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

Verifica il destinatario del provider OIDC IAM

Quando crei un provider OIDC IAM, devi usare sts.amazonaws.com come destinatario. Se il destinatario non è corretto, riceverai il seguente messaggio di errore:

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

Per controllare il destinatario del provider OIDC IAM, esegui il comando seguente:

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.

Nel parametro ClientIDList, l'output deve visualizzare sts.amazonaws.com. Per controllare il destinatario utilizzando la console Amazon EKS, completa i seguenti passaggi:

  1. Apri la console Amazon EKS.
  2. Seleziona il nome del cluster, quindi scegli la scheda Panoramica.
  3. Nella sezione Dettagli, annota il valore dell'URL del provider OIDC.
  4. Apri la console IAM.
  5. Nel pannello di navigazione, in Gestione degli accessi, scegli Provider di identità.
  6. Seleziona il provider che corrisponde all'URL del cluster.

Per cambiare il destinatario, completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, in Gestione degli accessi, scegli Provider di identità.
  3. Seleziona il provider che corrisponde all'URL del cluster.
  4. Scegli Operazioni, quindi scegli Aggiungere destinatario.
  5. Aggiungi sts.amazonaws.com.

Verifica di aver creato la risorsa OIDC IAM con l'impronta digitale del certificato root

Se non hai utilizzato l'impronta digitale del certificato root per creare il provider OIDC, riceverai il seguente messaggio di errore:

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

Nota: le impronte digitali dei certificati non root vengono rinnovate ogni anno. Le impronte digitali dei certificati root vengono rinnovate ogni dieci anni. Pertanto, è consigliabile utilizzare le impronte digitali dei certificati root quando si crea un OIDC IAM.

Ad esempio, per creare il tuo OIDC IAM utilizzi uno dei seguenti servizi:

  • Interfaccia della linea di comando AWS (AWS CLI)
  • Strumenti AWS per PowerShell
  • API IAM

In questo caso, dovrai ottenere manualmente l'impronta digitale. Se hai creato il tuo OIDC IAM nella console IAM, è consigliabile ottenere manualmente l'impronta digitale. Usa questa impronta digitale per verificare che la console abbia ottenuto l'OIDC IAM corretto.

Per trovare l'impronta digitale e la data di scadenza del certificato root, esegui il seguente comando:

echo | openssl s_client -servername oidc.eks.your-region-code.amazonaws.com -showcerts -connect oidc.eks.your-region-code.amazonaws.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/{cert=""} {cert=cert $0 "\n"} /-----END CERTIFICATE-----/{last_cert=cert} END{printf "%s", last_cert}' | 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 tuo cluster.

Esempio di output:

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

Nell'output dell'esempio precedente, 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 è l'impronta digitale, 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 hai configurato la policy di attendibilità del ruolo IAM in modo errato, riceverai il seguente messaggio di 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 OIDC IAM corretto. Se il provider OIDC IAM è corretto, controlla il ruolo IAM per vedere se le condizioni della policy di attendibilità sono configurate correttamente.

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

Il webhook relativo all'identità del pod inserisce le variabili di ambiente necessarie e il volume previsto. Se hai eliminato o modificato accidentalmente la configurazione del webhook, IRSA smetterà di funzionare.

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

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Se la configurazione pod-identity-webhook non esiste, esegui il comando seguente per crearla:

CLUSTER_CA=$(aws eks describe-cluster --name CLUSTER_NAME --region REGION_CODE --query 'cluster.certificateAuthority.data' --output text);
cat << EOF | kubectl apply -f -
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
  name: pod-identity-webhook
webhooks:
- name: iam-for-pods.amazonaws.com
  clientConfig:
    url: "https://127.0.0.1:23443/mutate"
    caBundle: $CLUSTER_CA
  failurePolicy: Ignore
  rules:
  - operations: [ "CREATE" ]
    apiGroups: [""]
    apiVersions: ["v1"]
    resources: ["pods"]
    scope: "*"
  reinvocationPolicy: IfNeeded
  sideEffects: None
  admissionReviewVersions: ["v1beta1"]
EOF

Nota: sostituisci CLUSTER_NAME con il nome del tuo cluster e REGION_CODE con la regione del cluster.

Verifica che il tuo webhook relativo all'identità del pod inserisca variabili di ambiente nei tuoi pod che utilizzano IRSA

Per verificare che il tuo webook relativo all'identità del pod inserisca variabili di ambiente nei tuoi pod che utilizzano IRSA, esegui uno dei comandi seguenti:

kubectl get pod <pod-name> -n <ns> -o yaml | grep aws-iam-token

-oppure-

kubectl get pod <pod-name> -n <ns> -o yaml | grep AWS_WEB_IDENTITY_TOKEN_FILE

Verifica di utilizzare SDK AWS supportati

Rivedi i tuoi SDK AWS. Assicurati di utilizzare una versione SDK AWS che ti consenta di assumere un ruolo IAM tramite il file del token di identità web OIDC.

Informazioni correlate

Perché non posso utilizzare un ruolo IAM per l'account di servizio nel mio pod Amazon EKS?

Come posso risolvere i problemi relativi a un provider OIDC e a un IRSA in Amazon EKS?

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 mesi fa