In che modo è possibile risolvere l'errore “InvalidIdentityToken” quando utilizzo il ruolo IAM di Amazon EKS per accedere all'account di servizio?

5 minuti di lettura
0

L'identificazione personale del mio cluster Amazon Elastic Kubernetes Service (Amazon EKS) è cambiata e ha causato il mancato aggiornamento del controller Application Load Balancer. Oppure, i pod Amazon EKS restituiscono l’errore “InvalidIdentityToken”.

Risoluzione

Gli account di servizio Amazon EKS utilizzano OpenID Connect (OIDC) per l'autenticazione. Quando crei un gestore dell’identità digitale OIDC AWS Identity and Access Management (IAM) per il cluster Amazon EKS, l'identificazione personale generata utilizza il certificato root. La Certificate Authority (CA) root di Amazon ha un periodo di convalida di circa 25 anni.

L’errore "WebIdentityErr: failed to retrieve credentials\r\ncaused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint\r\n" viene visualizzato nei seguenti scenari:

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

Per risolvere questo problema e ottenere un'identificazione personale, installa e configura lo strumento a linea di comando OpenSSL.

Ricerca dell'URL per l'IdP OIDC

Per trovare l'URL dell'IdP OIDC, completa i seguenti passaggi:

  1. Apri la console Amazon EKS.

  2. Nel riquadro di navigazione, scegli Cluster.

  3. Seleziona il cluster che desideri controllare.

  4. Scegli la scheda Configurazione.

  5. Nella sezione Dettagli, annota l'URL dell'IdP OICD.
    Esempio: https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/

    Includi /.well-known/openid-configuration alla fine dell'URL IdP OICD per formare l'URL del 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 annota il valore jwks\ _uri dell'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"]}

Visualizzazione dei certificati

Usa lo strumento a linea di comando OpenSSL per eseguire il seguente comando e visualizzare tutti i certificati utilizzati:
Nota: sostituisci oidc. eks.us-east-2.amazonaws.com con il nome del tuo dominio.

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

L'output è simile al seguente:

[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

Se vengono visualizzati più certificati, cerca l'ultimo alla fine dell'output. L'ultimo certificato è la CA root nella catena delle autorità di certificazione.

Creazione di un file di certificato

Crea un file di certificato (esempio: certificate.crt) e copia il contenuto dell'ultimo certificato nel file.

Quindi, esegui il seguente comando:

openssl x509 -in certificate.crt -text

L'output è simile al seguente:

[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

Verifica la validità del certificato dai valori nei campi Not Before e Not After. Nell’output precedente, la validità della CA è di circa 25 anni.

Sostituzione di un certificato scaduto

Se l'output mostra che il certificato è scaduto, devi rinnovarlo con il tuo IdP OIDC.

Una volta rinnovato il certificato, esegui il seguente comando con lo strumento a linea di comando OpenSSL per ottenere l'identificazione personale più recente:

openssl x509 -in certificate.crt -fingerprint -noout

L'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

Esegui il comando seguente per ottenere l'identificazione personale più recente:

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

Aggiornamento all'identificazione personale più recente

Se l'identificazione personale corrente è scaduta, utilizza la console IAM o l’interfaccia della linea di comando AWS (AWS CLI) per sostituirla con l'identificazione personale più recente.

Console IAM

Per utilizzare la console IAM, completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel riquadro di navigazione, scegli Provider di identità.
  3. Scegli l'IdP che desideri aggiornare.
  4. Nella sezione Identificazioni personali scegli Gestisci.
  5. Scegli Aggiungere identificazione personale, quindi inserisci il nuovo valore.
  6. Scegli Salva modifiche.

AWS CLI

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Esegui il comando di AWS CLI update-open-id-connect-provider-thumbprint:

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

Informazioni correlate

Creating OpenID Connect (OIDC) identity providers

AWS UFFICIALE
AWS UFFICIALEAggiornata 9 mesi fa