Comment puis-je corriger les erreurs liées aux IRSA dans Amazon EKS ?

Lecture de 6 minute(s)
0

Je reçois des erreurs lorsque j’utilise les rôles IAM (Gestion des identités et des accès AWS) pour les comptes de service (IRSA) avec Amazon Elastic Kubernetes Service (Amazon EKS).

Résolution

Vérifier le format de l’ARN IAM

Si vous avez mal formaté votre ARN IAM dans l’annotation du compte de service, vous obtiendrez le message d’erreur suivant :

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

Vous trouverez ci-après un exemple d’ARN dont le format est incorrect :

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

Le format erroné de l’ARN est à l’origine du message d’erreur, car l’ARN contient un deux-points en trop ( : ). Pour connaître le bon format d’ARN, consultez la page ARN IAM.

Vérifier la présence d’un fournisseur OIDC IAM pour votre compte AWS

Si vous n’avez pas créé de fournisseur OpenID Connect (OIDC), vous obtiendrez le message d’erreur suivant :

« 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 »

Pour résoudre ce problème, vous devez récupérer l’URL du fournisseur OIDC IAM :

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

Remarque : remplacez cluster name par le nom de votre cluster.

Vous obtiendrez une sortie de ce type :

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

Exécutez la commande suivante pour répertorier les fournisseurs OIDC IAM :

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

Remarque : remplacezEXAMPLED539D4633E53DE1B716D3041E par l’URL du fournisseur OIDC IAM.

le fournisseur OIDC n’existe pas, exécutez la commande eksctl suivante pour en créer un :

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

Remarque : remplacez cluster name par le nom de votre cluster.

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

Vérifier le public du fournisseur OIDC IAM

Vous devez utiliser sts.amazonaws.com comme public lorsque vous créez un fournisseur OIDC IAM. Ce message d’erreur s’affichera si le public est incorrect :

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

Pour connaître le public du fournisseur OIDC IAM, exécutez la commande suivante :

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

Remarque : remplacez ARN-of-OIDC-provider par l’ARN de votre fournisseur OIDC.

Sous le paramètre ClientIDList, la sortie doit afficher sts.amazonaws.com . Procédez comme suit pour vérifier le public à l’aide de la console Amazon EKS :

  1. Ouvrez la console Amazon EKS.
  2. Sélectionnez le nom de votre cluster, puis choisissez l’onglet Présentation générale.
  3. Dans la section Détails, notez la valeur de l’URL du fournisseur OIDC.
  4. Ouvrez la console IAM.
  5. Dans le volet de navigation, sous Gestion des accès, choisissez Fournisseurs d’identité.
  6. Sélectionnez le fournisseur qui correspond à l’URL de votre cluster.

Procédez comme suit pour modifier le public :

  1. Ouvrez la console IAM.
  2. Dans le volet de navigation, sous Gestion des accès, choisissez Fournisseurs d’identité.
  3. Sélectionnez le fournisseur qui correspond à l’URL de votre cluster.
  4. Choisissez Actions, puis Ajouter le public.
  5. Ajoutez sts.amazonaws.com.

Vérifier que la ressource OIDC IAM a été créée avec une empreinte de certificat racine

L’erreur suivante se produit si vous n’avez pas utilisé d’empreinte de certificat racine pour créer le fournisseur OIDC :

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

Remarque : les empreintes de certificats qui ne sont pas racines sont renouvelées chaque année. Les empreintes de certificats racines sont renouvelées tous les dix ans. Il est recommandé d’utiliser une empreinte de certificat racine lorsque vous créez un OIDC IAM.

Vous utilisez, par exemple, l’un des services suivants pour créer votre OIDC IAM :

  • L’interface de la ligne de commande AWS (AWS CLI)
  • Les outils AWS pour PowerShell
  • L’API IAM

Vous devrez alors obtenir l’empreinte manuellement. Si vous avez créé votre OIDC IAM dans la console IAM, il est recommandé d’obtenir l’empreinte numérique manuellement. Cette empreinte vous permettra de vérifier que la console a obtenu un OIDC IAM correct.

Exécutez la commande suivante pour trouver l’empreinte 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>/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)}'

Remarque : remplacez your-region-code 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 la sortie précédente, 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 est l’empreinte numérique, sep 2 000000 2009 gmt est la date de démarrage du certificat et jun 28 173916 2034 est la date d’expiration du certificat.

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

Si la politique de confiance du rôle IAM est mal configurée, le message d’erreur suivant s’affichera :

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

Ce problème peut être résolu en utilisant le fournisseur OIDC IAM correct. Si le fournisseur OIDC IAM est correct, examinez le rôle IAM pour voir si les conditions de la politique de confiance sont correctement configurées.

Vérifier que la configuration du webhook d’identité du pod est existante et valide

Le webhook d’identité du pod injecte les variables d’environnement nécessaires, ainsi que le volume projeté. L’IRSA cesse de fonctionner si vous supprimer accidentellement ou modifiez la configuration de votre webhook.

Afin de vérifier que votre configuration webhook est existante et valide, exécutez la commande suivante :

kubectl get mutatingwebhookconfiguration pod-identity-webhook  -o yaml

Si la configuration pod-identity-webhook n’existe pas, exécutez la commande suivante pour la créer :

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

Remarque : remplacez CLUSTER_NAME par le nom de votre cluster et REGION_CODE par la région du cluster.

Vérifier que le webhook d’identité du pod injecte des variables d’environnement dans les pods qui utilisent l’IRSA

Exécutez l’une des commandes suivantes pour vérifier que le webhook d’identité du pod injecte des variables d’environnement dans les pods qui utilisent l’IRSA :

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

-ou-

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

Vérifier que vous utilisez des kits SDK AWS pris en charge

Examinez vos kits SDK AWS. Vérifiez que vous utilisez une version de kit SDK AWS qui vous permet d’assumer un rôle IAM par l’intermédiaire du fichier de jetons d’identité Web OIDC.

Informations connexes

Pourquoi ne puis-je pas utiliser un rôle IAM pour le compte de service dans mon pod Amazon EKS ?

Comment puis-je résoudre les problèmes liés à un fournisseur OIDC et à un IRSA dans Amazon EKS ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 mois