Comment puis-je résoudre les erreurs IRSA dans Amazon EKS ?

Date de la dernière mise à jour : 2021-12-10

Je reçois souvent des erreurs lorsque j'utilise des rôles IAM pour les comptes de service (IRSA) avec Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Pour résoudre les problèmes liés à l'IRSA dans Amazon EKS, suivez les étapes décrites dans l'une des sections suivantes :

  • Vérifiez le formatage de l'ARN IAM
  • Assurez-vous de disposer d'un fournisseur OIDC IAM pour votre compte AWS
  • Vérifiez l'audience du fournisseur OIDC
  • Vérifiez que vous avez créé la ressource OIDC avec l'empreinte numérique d'un certificat racine
  • Vérifiez la configuration de la politique de confiance de votre rôle IAM
  • Vérifiez que la configuration du webhook d'identité de votre pod existe et qu'elle est valide
  • Assurez-vous d'utiliser des kits SDK AWS pris en charge

Solution

Vérifiez le formatage de l'ARN IAM

Si votre Amazon Resource Name (ARN) IAM est défini dans l'annotation du compte de service relatif et n'est pas correctement formaté, vous verrez s'afficher l'erreur suivante :

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

Exemple de format ARN incorrect :

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

Le format ARN précédent est incorrect car il comporte deux points supplémentaires (:). Pour vous assurer que vous utilisez le bon format ARN, reportez-vous à la section relative aux ARN IAM.

Assurez-vous de disposer d'un fournisseur OIDC IAM pour votre compte AWS

Si vous n'avez pas créé de fournisseur OpenID Connect (OIDC), vous verrez s'afficher l'erreur suivante :

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

Obtenez l'URL du fournisseur OIDC IAM :

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

Remarque : Remplacez le nom du cluster par le nom du vôtre.

Exemple de sortie :

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

Répertoriez les fournisseurs OIDC IAM :

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

Remarque : Remplacez EXAMPLED539D4633E53DE1B716D3041E par la valeur retournée par la commande précédente.

Si le fournisseur OIDC n'existe pas, utilisez la commande eksctl suivante pour en créer un :

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

Remarque : Remplacez le nom du cluster par le nom du vôtre.

Vous pouvez également utiliser la console de gestion AWS pour créer un fournisseur OIDC IAM pour votre cluster.

Vérifiez l'audience du fournisseur OIDC IAM

Lorsque vous créez un fournisseur OIDC IAM, vous devez utiliser sts.amazonaws.com comme audience. Si l'audience est incorrecte, vous verrez s'afficher le message d'erreur suivant :

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

Vérifiez l'audience du fournisseur OIDC IAM :

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

Remarque : Remplacez ARN-du-fournisseur-OIDC par l'ARN de votre fournisseur OIDC.

-ou-

Procédez comme suit :

1.    Ouvrez la console Amazon EKS.

2.    Sélectionnez le nom de votre cluster, puis choisissez l'onglet Configuration.

3.    Dans la section Informations, notez la valeur de l'URL du fournisseur OpenID Connect.

4.    Ouvrez la console IAM.

5.    Dans le panneau de navigation, sous Gestion des accès, choisissez Fournisseurs d'identité.

6.    Sélectionnez le fournisseur qui correspond à l'URL de votre cluster.

Pour modifier l'audience, procédez comme suit :

1.    Ouvrez la console IAM.

2.    Dans le panneau de navigation, sous Gestion des accès, choisissez Fournisseurs d'identité.

3.    Sélectionnez le fournisseur qui correspond à l'URL de votre cluster.

4.    Sélectionnez Actions, puis Ajouter une audience.

5.    Ajoutez sts.amazonaws.com.

Assurez-vous d'avoir créé la ressource OIDC IAM avec l'empreinte numérique d'un certificat racine

Si vous n'avez pas utilisé d'empreinte numérique de certificat racine pour créer le fournisseur OIDC, vous verrez s'afficher le message d'erreur suivant :

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

Remarque : Les empreintes numériques des certificats non racine sont renouvelées chaque année et celles des certificats racines sont renouvelées tous les dix ans. Par conséquent, il est recommandé d'utiliser une empreinte numérique de certificat racine lorsque vous créez un OIDC IAM.

Si vous avez utilisé AWS Command Line Interface (CLI), les outils AWS pour PowerShell ou l'API IAM pour créer votre OIDC IAM, vous devez obtenir manuellement l'empreinte numérique. Si vous avez créé votre OIDC IAM dans la console IAM, il est toujours recommandé d'obtenir manuellement l'empreinte numérique pour s'assurer que la console a récupéré l'empreinte numérique appropriée.

Obtenez l'empreinte numérique du certificat racine et sa date d'expiration :

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)}'

Remarque : Remplacez votre-code-de-région par la région AWS dans laquelle se trouve votre cluster.

Exemple de sortie :

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

Dans l'exemple de sortie précédent, 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 est l'empreinte numérique, 2 000000 2009 gmt est la date de début du certificat et 28 juin 173916 2034 est la date d'expiration du certificat.

Vérifiez la configuration de la politique de confiance de votre rôle IAM

Si la politique de confiance de rôle IAM est mal configurée, vous verrez s'afficher l'erreur suivante :

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

Pour résoudre ce problème, assurez-vous d'utiliser le bon fournisseur OIDC IAM. Si le fournisseur OIDC IAM est correct, utilisez le guide de configuration du rôle IAM pour vérifier si les conditions de la politique de confiance sont correctement configurées.

Vérifiez que la configuration du webhook d'identité de votre pod existe et qu'elle est valide

Si vous avez involontairement supprimé ou modifié la configuration de votre webhook, IRSA cessera de fonctionner.

Exécutez la commande suivante pour vérifier que votre configuration de webhook est existante et valide :

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Assurez-vous d'utiliser des kits SDK AWS pris en charge

Assurez-vous d'utiliser une version du kit SDK AWS qui prend en charge l'attribution d'un rôle IAM via le fichier de jeton d'identité Web OIDC.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?