¿Cómo puedo solucionar el error “InvalidIdentityToken - El certificado HTTPS del proveedor de OpenIDConnect no coincide con la huella digital configurada” al utilizar el rol de IAM de Amazon EKS para acceder a la cuenta de servicio?

Última actualización: 9 de noviembre de 2021

La huella digital de mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS) ha cambiado, lo que ha provocado que el controlador del balanceador de carga de aplicaciones falle en las actualizaciones.

-o bien-

Mis pods de Amazon EKS están en estado de error con el siguiente error: “WebIdentityErr: failed to retrieve credentials\r\ncaused by: InvalidIdentityToken: El certificado HTTPS del proveedor OpenIDConnect no coincide con la huella configurada thumbprint\r\n”.

Resolución

Todas las cuentas de servicio de Amazon EKS usan OpenID Connect (OIDC) para autenticarse. Al crear un proveedor de OIDC de AWS Identity and Access Management (IAM) para su clúster de Amazon EKS, la huella digital generada utiliza el certificado raíz. La autoridad de certificación (CA) raíz de Amazon tiene un período de validación de unos 25 años. Aparece el error “El certificado HTTPS no coincide con la huella digital configurada” en cualquiera de las siguientes condiciones:

  • La huella digital utilizada en el proveedor de OIDC ha caducado.
  • La huella digital no coincide con la CA.

Para solucionar este problema y obtener una huella digital, debe instalar y configurar las herramientas de línea de comandos de OpenSSL.

Para obtener una huella digital del proveedor de OIDC, haga lo siguiente:

1.    Busque la URL del proveedor de identidad (IdP) de OIDC haciendo lo siguiente:

  1. Abra la consola de Amazon EKS.
  2. En el panel de navegación, elija Clusters (Clústeres).
  3. Seleccione el clúster que desea verificar.
  4. Seleccione la pestaña Configuration (Configuración).
  5. Observe la URL del proveedor de OICD en la sección Details (Detalles).
    Ejemplo: https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/

Incluya /.well-known/openid-configuration al final de la URL del proveedor de OICD para formar la URL del documento de configuración del IdP.

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

Acceda a esta URL en un navegador web y anote el valor de jwks_uri en la salida. La salida del navegador es similar a la siguiente:

{"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.    Utilice las herramientas de línea de comandos OpenSSL para ejecutar el siguiente comando y mostrar todos los certificados utilizados:

Nota: Asegúrese de sustituir oidc.eks.us-east-2.amazonaws.com por el nombre de dominio devuelto en el paso 1.

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

El resultado es similar al siguiente:

[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
---

Si ve más de un certificado en la salida, busque el último certificado que aparece al final de la salida. El último certificado es la CA raíz de la cadena de autoridades de certificación.

3.    Cree un archivo de certificado (por ejemplo: certificate.crt) y copie el contenido del último certificado en este archivo. A continuación, ejecute el siguiente comando:

openssl x509 -in certificate.crt -text

El resultado es similar al siguiente:

[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

Puede comprobar la validez del certificado a partir de los valores de los campos No antes y No después. En el resultado se puede comprobar que la validez de la CA de Amazon es de unos 25 años.

4.    Si el resultado indica que el certificado ha caducado, debe renovarlo con su proveedor de OIDC. Después de renovar el certificado, ejecute el siguiente comando utilizando las herramientas de línea de comandos OpenSSL para obtener la huella digital más reciente:

openssl x509 -in certificate.crt -fingerprint -noout

El resultado es similar al siguiente:

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

Elimine los puntos (:) de esta cadena para obtener la huella digital final:

9E99A48A9960B14926BB7F3B02E22DA2B0AB7280

-o bien-

Ejecute el siguiente comando para obtener la huella digital más reciente después de excluir el punto y coma:

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

5.    Si la huella digital actual ha caducado, utilice la huella digital más reciente del paso 4 para reemplazarla. Puede hacerlo desde la consola de IAM o utilizando la AWS Command Line Interface (AWS CLI).

Para reemplazar la huella digital usando la consola, haga lo siguiente:

  1. Abra la consola de IAM.
  2. En el panel de navegación, elija Identity providers (Proveedores de identidades).
  3. Elija el proveedor de identidades que desea actualizar.
  4. En la sección Thumbprints (Huellas digitales), elige Manage (Administrar).
  5. Elija Add thumbprint (Agregar huella digital) e ingrese el nuevo valor.
  6. Elija Save changes (Guardar cambios).

-o bien-

Ejecute un comando similar al siguiente utilizando la 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: Si recibe errores al ejecutar comandos de AWS CLI, asegúrese de que está utilizando la versión más reciente de AWS CLI.