Wie kann ich den Fehler "InvalidIdentityToken - Das HTTPS-Zertifikat des OpenIDConnect-Anbieters stimmt nicht mit dem konfigurierten Fingerabdruck überein" beheben, wenn ich die Amazon EKS IAM-Rolle für den Zugriff auf das Servicekonto verwende?

Letzte Aktualisierung: 09.11.2021

Der Fingerabdruck für meinen Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster hat sich geändert, was dazu führt, dass der Application Load Balancer-Controller keine Updates mehr durchführen kann.

-oder-

Meine Amazon EKS-Pods befinden sich in einem fehlgeschlagenen Zustand mit dem folgenden Fehler: "WebIdentityErr: Abruf der Anmeldeinformationen fehlgeschlagen,\r\nverursacht durch: InvalidIdentityToken: Das HTTPS-Zertifikat des OpenIDConnect-Anbieters stimmt nicht mit dem konfigurierten Fingerabdruck überein\r\n".

Auflösung

Alle Amazon EKS Servicekonten verwenden OpenID Connect (OIDC) zur Authentifizierung. Wenn Sie einen AWS Identity and Access Management (IAM) OIDC-Anbieter für Ihren Amazon EKS-Cluster erstellen, verwendet der erzeugte Fingerabdruck das Stammzertifikat. Die Amazon Stammzertifizierungsstelle (CA) hat eine Gültigkeitsdauer von etwa 25 Jahren. Sie erhalten die Fehlermeldung "HTTPS-Zertifikat stimmt nicht mit dem konfigurierten Fingerabdruck überein" unter einer der folgenden Bedingungen:

  • Der im OIDC-Anbieter verwendete Fingerabdruck ist abgelaufen.
  • Der Fingerabdruck stimmt nicht mit der Stammzertifizierungsstelle überein.

Um dieses Problem zu beheben und einen Fingerabdruck zu erhalten, müssen Sie das OpenSSL-Befehlszeilen-Tool installieren und konfigurieren.

Um einen Fingerabdruck für den OIDC-Anbieter zu erhalten, gehen Sie wie folgt vor:

1.    Gehen Sie wie folgt vor, um die URL für den OIDC-Identitätsanbieter (IdP) zu finden:

  1. Öffnen Sie die Amazon EKS-Konsole.
  2. Wählen Sie im Navigationsbereich Cluster.
  3. Wählen Sie den Cluster aus, den Sie prüfen möchten.
  4. Wählen Sie die Registerkarte Konfiguration.
  5. Notieren Sie sich die URL des OICD-Anbieters im Abschnitt Details.
    Beispiel: https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/

Fügen Sie /.well-known/openid-configuration am Ende der OICD-Anbieter-URL ein, um die URL für das Konfigurationsdokument des IdP zu bilden.

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

Rufen Sie diese URL in einem Webbrowser auf und notieren Sie sich den jwks_uri-Wert von der Ausgabe. Die Browserausgabe sieht ähnlich aus wie die folgende:

{"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.    Verwenden Sie das OpenSSL-Befehlszeilen-Tool und führen Sie den folgenden Befehl aus, um alle verwendeten Zertifikate anzuzeigen:

Hinweis: Ersetzen Sie oidc.eks.us-east-2.amazonaws.com durch den in Schritt 1 angegebenen Domänennamen.

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

Die Ausgabe sieht ähnlich aus wie die folgende:

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

Wenn Sie mehr als ein Zertifikat in der Ausgabe sehen, suchen Sie das letzte Zertifikat, das am Ende der Ausgabe angezeigt wird. Das letzte Zertifikat ist die Stammzertifizierungsstelle in der Kette der Zertifizierungsstellen.

3.    Erstellen Sie eine Zertifikatsdatei (Beispiel: certificate.crt), und kopieren Sie den Inhalt des letzten Zertifikats in diese Datei. Führen Sie dann den folgenden Befehl aus:

openssl x509 -in certificate.crt -text

Die Ausgabe sieht ähnlich aus wie die folgende:

[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

Sie können die Gültigkeit des Zertifikats anhand der Werte in den Feldern Nicht vor und Nicht nach überprüfen. Aus der Ausgabe können Sie ersehen, dass die Gültigkeit der Amazon Stammzertifizierungsstelle etwa 25 Jahre beträgt.

4.    Wenn die Ausgabe anzeigt, dass das Zertifikat abgelaufen ist, müssen Sie das Zertifikat bei Ihrem OIDC-Anbieter erneuern. Nachdem Sie das Zertifikat erneuert haben, führen Sie den folgenden Befehl mit dem OpenSSL-Befehlszeilen-Tool aus, um den neuesten Fingerabdruck zu erhalten:

openssl x509 -in certificate.crt -fingerprint -noout

Die Ausgabe sieht ähnlich aus wie die folgende:

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

Löschen Sie die Doppelpunkte (:) aus dieser Zeichenfolge, um den endgültigen Fingerabdruck zu erhalten:

9E99A48A9960B14926BB7F3B02E22DA2B0AB7280

-oder-

Führen Sie den folgenden Befehl aus, um den letzten Fingerabdruck zu erhalten, nachdem Sie die Semikolons ausgeschlossen haben:

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

5.    Wenn der aktuelle Fingerabdruck abgelaufen ist, verwenden Sie den neuesten Fingerabdruck aus Schritt 4, um ihn zu ersetzen. Sie können dies über die IAM-Konsole oder über das AWS Command Line Interface (AWS CLI). tun.

Um den Fingerabdruck über die Konsole zu ersetzen, gehen Sie wie folgt vor:

  1. Öffnen Sie die IAM-Konsole.
  2. Wählen Sie im Navigationsbereich die Option Identitätsanbieter.
  3. Wählen Sie den Identitätsanbieter, den Sie aktualisieren möchten.
  4. Wählen Sie im Abschnitt Fingerabdrücke die Option Verwalten.
  5. Wählen Sie Fingerabdruck hinzufügen und geben Sie den neuen Wert ein.
  6. Wählen Sie Änderungen speichern.

-oder-

Führen Sie einen Befehl ähnlich dem folgenden über die AWS CLI aus:

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

Hinweis: Wenn Sie beim Ausführen von AWS CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.