Come posso risolvere gli errori IRSA in Amazon EKS?
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:
- Apri la console Amazon EKS.
- Seleziona il nome del cluster, quindi scegli la scheda Panoramica.
- Nella sezione Dettagli, annota il valore dell'URL del provider OIDC.
- Apri la console IAM.
- Nel pannello di navigazione, in Gestione degli accessi, scegli Provider di identità.
- Seleziona il provider che corrisponde all'URL del cluster.
Per cambiare il destinatario, completa i seguenti passaggi:
- Apri la console IAM.
- Nel pannello di navigazione, in Gestione degli accessi, scegli Provider di identità.
- Seleziona il provider che corrisponde all'URL del cluster.
- Scegli Operazioni, quindi scegli Aggiungere destinatario.
- 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?
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa