Come posso risolvere l'errore "InvalidIdentityToken - OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint" (InvalidIdentityToken - Il certificato HTTPS del provider OpenIDConnect non corrisponde all'identificazione personale configurata) quando utilizzo il ruolo IAM di Amazon EKS per accedere all'account del servizio?

Ultimo aggiornamento: 09/11/2021

L'identificazione personale per il cluster Amazon Elastic Kubernetes Service (Amazon EKS) è cambiata, impedendo al controller di Application Load Balancer di eseguire gli aggiornamenti.

-oppure-

I pod Amazon EKS sono in stato non riuscito con il seguente messaggio di errore: "WebIdentityErr: failed to retrieve credentials\r\ncaused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint\r\n" (WebIdentityErr: impossibile recuperare le credenziali\r\ncausato da: InvalidIdentityToken: il certificato HTTPS del provider OpenIDConnect non corrisponde all'identificazione personale configurata\r\n).

Risoluzione

Tutti gli account del servizio Amazon EKS utilizzano OpenID Connect (OIDC) per l'autenticazione. Quando crei un provider OIDC AWS Identity and Access Management (IAM) per il tuo cluster Amazon EKS, l'identificazione personale generata utilizza il certificato radice. L'autorità di certificazione (CA) radice di Amazon ha un periodo di convalida di circa 25 anni. L'errore "HTTPS certificate doesn't match configured thumbprint" (Il certificato HTTPS non corrisponde all'identificazione personale configurata) viene visualizzato quando si verifica una delle seguenti condizioni:

  • L'identificazione personale utilizzata nel provider OIDC è scaduta.
  • L'identificazione personale non corrisponde alla CA.

Per risolvere questo problema e ottenere un'identificazione personale, è necessario installare e configurare gli strumenti a riga di comando OpenSSL.

Per ottenere un'identificazione personale per il provider OIDC, effettua le seguenti operazioni:

1.    Individua l'URL del provider di identità OIDC (IdP) procedendo come segue:

  1. Apri la console di Amazon EKS.
  2. Nel pannello di navigazione, scegli Clusters (Cluster).
  3. Seleziona il cluster che desideri controllare.
  4. Seleziona la scheda Configuration (Configurazione).
  5. Prendi nota dell'URL del provider OICD nella sezione Details (Dettagli).
    Esempio: https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/

Inserisci /.well-known/openid-configuration alla fine dell'URL del provider OICD per formare l'URL per il documento di configurazione dell'IdP.

Esempio: https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/.well-known/openid-configuration

Accedi a questo URL in un browser Web e prendi nota del valore di jwks_uri dall'output. L'output del browser è simile al seguente:

{"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"]}

2.    Utilizza gli strumenti a riga di comando OpenSSL per eseguire il seguente comando e visualizzare tutti i certificati utilizzati:

Nota: assicurati di sostituire oidc.eks.us-east-2.amazonaws.com con il nome di dominio restituito al passaggio 1.

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

Dovresti visualizzare un output simile al seguente:

[root@ip-172-31-1-202 ~]# openssl s_client -connect oidc.eks.us-east-2.amazonaws.com:443 -showcerts
CONNECTED(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
---

Se nell'output vedi più di un certificato, cerca l'ultimo visualizzato alla fine dell'output. L'ultimo certificato è la CA radice nella catena dell'autorità di certificazione.

3.    Crea un file di certificato (esempio: certificate.crt) e copia il contenuto dell'ultimo certificato in questo file. Quindi esegui il seguente comando:

openssl x509 -in certificate.crt -text

Dovresti visualizzare un output simile al seguente:

[root@ip-172-31-1-202 ~]# openssl x509 -in certificate.crt -text
Certificate:    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

È possibile verificare la validità del certificato dai valori presenti nei campi Not Before (Non prima) e Not After (Non dopo). Dall'output, puoi vedere che la validità di Amazon CA è di circa 25 anni.

4.    Se l'output indica che il certificato è scaduto, è necessario rinnovare il certificato con il provider OIDC. Dopo aver rinnovato il certificato, esegui il seguente comando utilizzando gli strumenti a riga di comando OpenSSL per ottenere l'identificazione personale più recente:

openssl x509 -in certificate.crt -fingerprint -noout

Dovresti visualizzare un output simile al seguente:

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

Elimina i due punti (:) da questa stringa per ottenere l'identificazione personale finale:

9E99A48A9960B14926BB7F3B02E22DA2B0AB7280

-oppure-

Esegui il seguente comando per ottenere l'ultima identificazione personale dopo aver escluso i punti e virgola:

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

5.    Se l'identificazione personale corrente è scaduta, utilizza l'ultima identificazione personale del passaggio 4 per sostituirla. Puoi farlo dalla console IAM o utilizzando l'AWS Command Line Interface (AWS CLI).

Per sostituire l'identificazione personale utilizzando la console, procedi come segue:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, scegli Identity providers (Provider di identità).
  3. Scegli il provider di identità che desideri aggiornare.
  4. Nella sezione Thumbprints (Identificazioni personali), scegli Manage (Gestisci).
  5. Scegli Add thumbprint (Aggiungi identificazione personale) e inserisci il nuovo valore.
  6. Scegli Save changes (Salva modifiche).

-oppure-

Esegui un comando simile al seguente utilizzando 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

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi AWS CLI, assicurati di utilizzarne la versione più recente.