Pourquoi l'erreur « webidentityerr » s'affiche-t-elle lorsque j'utilise AWS Load Balancer Controller dans Amazon EKS ?

Lecture de 4 minute(s)
0

Lorsque j'essaie d'utiliser le contrôleur AWS Load Balancer dans Amazon Elastic Kubernetes Service (Amazon EKS), je reçois un message d'erreur « WebIdentityErr ».

Brève description

Lorsque vous utilisez le contrôleur AWS Load Balancer dans Amazon EKS, l'erreur suivante peut s'afficher :

« Impossible de trouver l'équilibreur de charge existant en raison de WebIdentityErr : impossible de récupérer les informations d'identification\n à cause de : Accès refusé : Non autorisé à exécuter sts:AssumeRoleWithWebIdentity\n\tcode d'état : 403 »

L'erreur se produit pour les raisons suivantes :

  • Configurations de compte de service incorrectes
  • Relation de confiance incorrecte entre le rôle AWS Identity and Access Management (IAM) que vous utilisez dans le compte de service

Avec AWS Load Balancer Controller, les nœuds de travail exécutent les tâches. Vous devez utiliser les autorisations IAM pour accorder à ces nœuds de travail l'accès aux ressources de l'équilibreur de charge d'application ou de l'équilibreur de charge réseau. Pour configurer les autorisations IAM, utilisez les rôles IAM pour le compte de service. Vous pouvez également associer les autorisations IAM directement aux rôles IAM du nœud de travail. Pour plus d'informations, consultez la section Installation du Load Balancer Controller sur le site Web de Kubernetes.

Résolution

Configurations de compte de service incorrectes

Pour vérifier si vous avez correctement configuré votre compte de service, procédez comme suit :

1.    Vérifiez le nom du compte de service défini dans votre déploiement :

kubectl describe deploy LOAD_BALANCER_CONTROLLER -n kube-system | grep -i "Service Account"

2.    Décrivez le compte de service :

kubectl describe sa LOAD_BALANCER_CONTROLLER -n kube-system

3.    Vérifiez l'annotation du compte de service pour le rôle IAM :

Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxxxxx:role/AMAZON_EKS_LOAD_BALANCER_CONTROLLER_ROLE

4.    Si cette annotation est manquante ou incorrecte, mettez-la à jour. Assurez-vous d'avoir correctement associé le rôle IAM à un compte de service :

kubectl annotate serviceaccount -n SERVICE_ACCOUNT_NAMESPACE SERVICE_ACCOUNT_NAME \ eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME

5.    Supprimez et recréez tous les pods Amazon EKS existants associés au compte de service. Veillez à appliquer les variables d'environnement d'identification :

kubectl delete pods AWS_LOAD_BALANCER_CONTROLLER_POD -n KUBBE_SYSTEM

Relation de confiance incorrecte entre le rôle IAM utilisé et le compte de service

Les exemples suivants présentent certaines erreurs courantes lors de l'établissement de la relation de confiance entre votre rôle IAM et votre compte de service :

Exemple 1 : Le rôle IAM ou la relation de confiance n'est pas correctement défini pour l'action « sts:AssumeRoleWithWebIdentity »

Vérifiez que la relation de confiance est correctement définie pour l'action sts:AssumeRoleWithWebIdentity(et non pour l'action sts:AssumeRole).

L'exemple suivant est une relation de confiance mal définie :

{
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "xxxxx.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
}

Pour corriger ce problème, définissez la relation de confiance pour l'action sts:AssumeRoleWithWebIdentity :

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Effect": "Allow",  
      "Principal": {  
        "Federated": "arn:aws:iam::AWS_ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC-PROVIDER_ID"  
      },  
      "Action": "sts:AssumeRoleWithWebIdentity",  
      "Condition": {  
        "StringEquals": {  
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC_PROVIDER_ID:sub": "system:serviceaccount:kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",  
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"  
        }  
      }  
    }  
  ]  
}

Remarque : Veillez à remplacer toutes les variables par vos propres valeurs.

Pour utiliser le même rôle IAM pour plusieurs clusters dans un même compte, définissez la relation de confiance comme dans l'exemple suivant :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::AWS-ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC-PROVIDER_ID"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:sub": "system:serviceaccount: kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::AWS_ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID:sub": "system:serviceaccount: kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
      }
    }
  ]
}

**Exemple 2 : ID de fournisseur OIDC incorrect lors de la création d'un cluster Amazon EKS **

Créez et vérifiez correctement un fournisseur OpenID Connect (OIDC) pour votre cluster Amazon EKS. Vérifiez que l'ID du fournisseur OIDC et la région AWS associée sont correctement répertoriés. Dans le cas contraire, vous recevez une erreur WebIdentityErr.

Exemple 3 : Le nom du compte de service ou son espace de noms n'ont pas été correctement saisis

Lorsque vous mettez à jour votre déploiement d'AWS Load Balancer Controller, entrez le nom de compte de service correct et son espace de nommage.

Exemple 4 : Étapes « sts.amazonaws.com » manquantes dans la relation de confiance

Si le rôle de service associé à votre pod EKS ne peut pas effectuer l'opération STS sur l'action AssumeRoleWithWebIdentity, mettez à jour la relation de confiance. Pour effectuer une opération STS, la relation de confiance doit inclure sts.amazonaws.com :

"Condition": {
        "StringEquals": {
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:sub": "system:serviceaccount:kube-system:LOAD_BALANCER_CONTROLLER_ACCOUNT",
          "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com"
        }
}

Pour plus d'informations sur les conditions IAM avec plusieurs clés ou valeurs, consultez la section Création d'une condition avec plusieurs clés ou valeurs.

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