Comment résoudre l'erreur « InvalidIdentityToken » qu survient lorsque j'utilise le rôle IAM Amazon EKS pour accéder au compte de service ?

Lecture de 5 minute(s)
0

L'empreinte numérique de mon cluster Amazon Elastic Kubernetes Service (Amazon EKS) a changé, ce qui a entraîné l'échec des mises à jour du Application Load Balancer Controller. Ou bien, mes pods Amazon EKS sont en état d'échec avec l'erreur « InvalidIdentityToken ».

Résolution

Les comptes de service Amazon EKS utilisent OpenID Connect (OIDC) pour s'authentifier. Lorsque vous créez un fournisseur d'identité (IdP) OIDC Gestion des identités et des accès AWS (AWS IAM) pour votre cluster Amazon EKS, l'empreinte numérique générée utilise le certificat racine. L'autorité de certification (CA) racine d'Amazon dispose d’une période de validation d'environ 25 ans.

Le message d’erreur « WebIdentityErr: failed to retrieve credentials\r\ncaused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint\r\n" survient dans les scénarios suivants :

  • L'empreinte numérique utilisée par le fournisseur OIDC a expiré.
  • L'empreinte numérique ne correspond pas à l’autorité de certification.

Pour résoudre ce problème et obtenir une empreinte numérique, vous devez installer et configurer l'outil de ligne de commande OpenSSL.

Identification de l'URL du fournisseur d'identité OIDC

Pour identifier l'URL du fournisseur d'identité OIDC, procédez comme suit :

  1. Ouvrez la console Amazon EKS.

  2. Dans le volet de navigation, choisissez Clusters.

  3. Sélectionnez le cluster que vous souhaitez examiner.

  4. Ouvrez l'onglet Configuration.

  5. Dans la section Détails, notez l'URL du fournisseur d'identité OIDC.
    Exemple : https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/

    Ajoutez /.well-known/openid-configuration à la fin de l'URL du fournisseur d'identité OIDC pour former l'URL du document de configuration du fournisseur d'identité.

    Exemple : https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/.well-known/openid-configuration. Accédez à cette URL à partir d’un navigateur Web et notez la valeur jwks_uri dans la sortie. La sortie du navigateur ressemble à ce qui suit :

    {"issuer":"https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F","jwks_uri":"https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/keys","authorization_endpoint":"urn:kubernetes:programmatic_authorization","response_types_supported":["id_token"],"subject_types_supported":["public"],"claims_supported":["sub","iss"],"id_token_signing_alg_values_supported":["RS256"]}

Affichage des certificats

Utilisez l'outil de ligne de commande OpenSSL pour exécuter la commande suivante afin d'afficher tous les certificats utilisés :
Remarque : remplacez oidc.eks.us-east-2.amazonaws.com par votre nom de domaine.

openssl s_client -connect oidc.eks.us-east-2.amazonaws.com:443 -showcerts

La sortie se présente de la manière suivante :

[root@ip-172-31-1-202 ~]# openssl s_client -connect oidc.eks.us-east-2.amazonaws.com:443 -showcertsCONNECTED(00000003)
depth=4 C = US, O = "Starfield Technologies, Inc.", OU = Starfield Class 2 Certification Authority
verify return:1
depth=3 C = US, ST = Arizona, L = Scottsdale, O = "Starfield Technologies, Inc.", CN = Starfield Services Root Certificate Authority - G2
verify return:1
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, OU = Server CA 1B, CN = Amazon
verify return:1
depth=0 CN = *.execute-api.us-east-2.amazonaws.com
verify return:1
---
Certificate chain
 0 s:/CN=*.execute-api.us-east-2.amazonaws.com
   i:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
-----BEGIN CERTIFICATE-----
CERTIFICATE Redacted
-----END CERTIFICATE-----
 1 s:/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
   i:/C=US/O=Amazon/CN=Amazon Root CA 1
-----BEGIN CERTIFICATE-----
CERTIFICATE Redacted
-----END CERTIFICATE-----
 2 s:/C=US/O=Amazon/CN=Amazon Root CA 1
   i:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
-----BEGIN CERTIFICATE-----
CERTIFICATE Redacted
-----END CERTIFICATE-----
 3 s:/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
   i:/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
-----BEGIN CERTIFICATE-----
MIIEdTCCA12gAwIBAgIJAKcOSkw0grd/MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
BAYTAlVTMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIw
MAYDVQQLEylTdGFyZmllbGQgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
eTAeFw0wOTA5MDIwMDAwMDBaFw0zNDA2MjgxNzM5MTZaMIGYMQswCQYDVQQGEwJV
UzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTElMCMGA1UE
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjE7MDkGA1UEAxMyU3RhcmZp
ZWxkIFNlcnZpY2VzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVDDrEKvlO4vW+GZdfjohTsR8/
y8+fIBNtKTrID30892t2OGPZNmCom15cAICyL1l/9of5JUOG52kbUpqQ4XHj2C0N
Tm/2yEnZtvMaVq4rtnQU68/7JuMauh2WLmo7WJSJR1b/JaCTcFOD2oR0FMNnngRo
Ot+OQFodSk7PQ5E751bWAHDLUu57fa4657wx+UX2wmDPE1kCK4DMNEffud6QZW0C
zyyRpqbn3oUYSXxmTqM6bam17jQuug0DuDPfR+uxa40l2ZvOgdFFRjKWcIfeAg5J
Q4W2bHO7ZOphQazJ1FTfhy/HIrImzJ9ZVGif/L4qL8RVHHVAYBeFAlU5i38FAgMB
AAGjgfAwge0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0O
BBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtV
rNzXEMIOqYjnME8GCCsGAQUFBwEBBEMwQTAcBggrBgEFBQcwAYYQaHR0cDovL28u
c3MyLnVzLzAhBggrBgEFBQcwAoYVaHR0cDovL3guc3MyLnVzL3guY2VyMCYGA1Ud
HwQfMB0wG6AZoBeGFWh0dHA6Ly9zLnNzMi51cy9yLmNybDARBgNVHSAECjAIMAYG
BFUdIAAwDQYJKoZIhvcNAQELBQADggEBACMd44pXyn3pF3lM8R5V/cxTbj5HD9/G
VfKyBDbtgB9TxF00KGu+x1X8Z+rLP3+QsjPNG1gQggL4+C/1E2DUBc7xgQjB3ad1
l08YuW3e95ORCLp+QCztweq7dp4zBncdDQh/U90bZKuCJ/Fp1U1ervShw3WnWEQt
8jxwmKy6abaVd38PMV4s/KCHOkdp8Hlf9BRUpJVeEXgSYCfOn8J3/yNTd126/+pZ
59vPr5KW7ySaNRB6nJHGDn2Z9j8Z3/VyVOEVqQdZe4O/Ui5GjLIAZHYcSNPYeehu
VsyuLAOQ1xk4meTKCRlb/weWsKh/NEnfVqn3sF/tM+2MR7cEXAMPLE=
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=*.execute-api.us-east-2.amazonaws.com
issuer=/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon

Si plusieurs certificats apparaissent dans la sortie, recherchez le dernier certificat à la fin de la sortie. Le dernier certificat correspond à l'autorité de certification racine de la chaîne d'autorités de certification.

Création d'un fichier de certificat

Créez un fichier de certificat (par exemple : certificate.crt) et copiez le contenu du dernier certificat pour le coller dans ce fichier.

Exécutez ensuite la commande suivante :

openssl x509 -in certificate.crt -text

La sortie se présente de la manière suivante :

[root@ip-172-31-1-202 ~]# openssl x509 -in certificate.crt -textCertificate:    Data:
        Version: 3 (0x2)
        Serial Number:
            a7:0e:4a:4c:34:82:b7:7f
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Starfield Technologies, Inc., OU=Starfield Class 2 Certification Authority
        Validity
            Not Before: Sep  2 00:00:00 2009 GMT
            Not After : Jun 28 17:39:16 2034 GMT

Vérifiez la validité du certificat sur la base des valeurs dans les champs Not Before et Not After. Dans le résultat précédent, la validité de l’autorité de certification est d'environ 25 ans.

Remplacement d’un certificat expiré

Si la sortie indique que le certificat a expiré, vous devez le renouveler auprès de votre fournisseur d'identité OIDC.

Une fois le certificat renouvelé, exécutez la commande suivante à l'aide de l'outil de ligne de commande OpenSSL pour obtenir la dernière empreinte numérique :

openssl x509 -in certificate.crt -fingerprint -noout

La sortie se présente de la manière suivante :

SHA1 Fingerprint=9E:99:A4:8A:99:60:B1:49:26:BB:7F:3B:02:E2:2D:A2:B0:AB:72:80

Supprimez les deux-points (:) de cette chaîne pour obtenir l'empreinte numérique finale :

9E99A48A9960B14926BB7F3B02E22DA2B0AB7280

Exécutez la commande suivante pour obtenir la dernière empreinte numérique :

$ openssl x509 -in certificate.crt -fingerprint -noout | sed s/://g

Mise à jour vers la dernière empreinte numérique 

Si l'empreinte numérique actuelle a expiré, utilisez la console IAM ou l'interface de la ligne de commande AWS (AWS CLI) pour la remplacer par la dernière empreinte numérique.

Console IAM

Pour utiliser la console IAM, procédez comme suit :

  1. Ouvrez la console IAM.
  2. Dans le volet de navigation, choisissez Fournisseurs d'identité.
  3. Choisissez le fournisseur d'identité que vous souhaitez mettre à jour.
  4. Dans la section Empreintes, choisissez Gérer.
  5. Choisissez Ajouter une empreinte, puis saisissez la nouvelle valeur.
  6. Choisissez Enregistrer les modifications.

AWS CLI

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez la version la plus récente de l'interface AWS CLI.

Exécutez la commande update-open-id-connect-provider-thumbprint de l'AWS CLI :

aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/5ECB2797CB1324A37FC79E3C46851CED --thumbprint-list 9E99A48A9960B14926BB7F3B02E22DA2B0AB7280

Informations connexes

Création de fournisseurs d'identité OpenID Connect (OIDC)

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an