Direkt zum Inhalt

Wie behebe ich den Fehler „invalidIdentityToken“, wenn ich die Amazon EKS-IAM-Rolle für den Zugriff auf das Dienstkonto verwende?

Lesedauer: 5 Minute
0

Der Fingerabdruck für meinen Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster änderte sich und führte dazu, dass Updates des Application Load Balancer-Controllers fehlschlugen. Oder meine Amazon EKS-Pods befinden sich im ausgefallenen Zustand mit dem Fehler „InvalidIdentityToken“.

Behebung

Amazon EKS-Dienstkonten verwenden OpenID Connect (OIDC) zur Authentifizierung. Wenn Sie einen OIDC-Identitätsanbieter (IAM) von AWS Identity and Access Management (IAM) für Ihren Amazon EKS-Cluster erstellen, verwendet der generierte Fingerabdruck das Stammzertifikat. Die Amazon Root Certificate Authority (CA) hat einen Validierungszeitraum von etwa 25 Jahren.

Sie erhalten den Fehler „WebIdentityErr: failed to retrieve credentials\r\ncaused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint\r\n“ in den folgenden Szenarien:

  • Der Fingerabdruck, der im OIDC-Anbieter verwendet wird, ist abgelaufen.
  • Der Fingerabdruck stimmt nicht mit der CA überein.

Um dieses Problem zu beheben und einen Fingerabdruck zu erhalten, installieren und konfigurieren Sie das OpenSSL-Befehlszeilentool.

Die URL für den OIDC-IdP finden

Gehen Sie wie folgt vor, um die URL für den OIDC-IdP zu finden:

  1. Öffnen Sie die Amazon-EKS-Konsole.

  2. Wählen Sie im Navigationsbereich die Option Cluster aus.

  3. Wählen Sie den Cluster aus, den Sie prüfen möchten.

  4. Wählen Sie die Registerkarte Konfiguration aus.

  5. Notieren Sie sich im Abschnitt Details die OICD-IdP-URL.
    Beispiel: https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/

    Fügen Sie /.well-known/openid-configuration am Ende der OICD-IdP-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. Greifen Sie in einem Webbrowser auf diese URL zu und notieren Sie sich den jwks_uri-Wert aus der Ausgabe. Die Ausgabe sieht etwa wie folgt aus:

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

Zertifikate anzeigen

Verwenden Sie das OpenSSL-Befehlszeilentool, um den folgenden Befehl auszuführen, um alle verwendeten Zertifikate anzuzeigen:
Hinweis: Ersetzen Sie oidc.eks.us-east-2.amazonaws.com durch Ihren Domainnamen.

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

Die Ausgabe sieht etwa wie folgt aus:

[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

Wenn Sie in der Ausgabe mehr als ein Zertifikat sehen, suchen Sie am Ende der Ausgabe nach dem letzten Zertifikat. Das letzte Zertifikat ist die Stammzertifizierungsstelle in der Zertifizierungsstellenkette.

Eine Zertifikatsdatei erstellen

Erstellen Sie eine Zertifikatsdatei (Beispiel: certificate.crt) und kopieren Sie den Inhalt des letzten Zertifikats in die Datei.

Führen Sie dann den folgenden Befehl aus:

openssl x509 -in certificate.crt -text

Die Ausgabe sieht etwa wie folgt aus:

[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

Überprüfen Sie die Gültigkeit des Zertifikats anhand der Werte in den Feldern Nicht vorher und Nicht danach. In der vorherigen Ausgabe beträgt die Gültigkeit der CA ungefähr 25 Jahre.

Ein abgelaufenes Zertifikat ersetzen

Wenn die Ausgabe zeigt, dass das Zertifikat abgelaufen ist, müssen Sie das Zertifikat mit Ihrem OIDC-IdP erneuern.

Nachdem Sie das Zertifikat erneuert haben, führen Sie den folgenden Befehl mit dem OpenSSL-Befehlszeilentool aus, um den neuesten Fingerabdruck abzurufen:

openssl x509 -in certificate.crt -fingerprint -noout

Die Ausgabe sieht etwa wie folgt aus:

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

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

9E99A48A9960B14926BB7F3B02E22DA2B0AB7280

Führen Sie den folgenden Befehl aus, um den neuesten Fingerabdruck abzurufen:

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

Auf den neuesten Fingerabdruck aktualisieren

Wenn der aktuelle Fingerabdruck abgelaufen ist, verwenden Sie die IAM-Konsole oder das AWS Command Line Interface (AWS CLI), um ihn durch den neuesten Fingerabdruck zu ersetzen.

IAM-Konsole

Gehen Sie wie folgt vor, um die IAM-Konsole zu verwenden:

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

AWS CLI

**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, finden Sie weitere Informationen unter Troubleshoot AWS CLI errors. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Führen Sie den AWS-CLI-Befehl update-open-id-connect-provider-thumbprint 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

Ähnliche Informationen

OpenID Connect (OIDC)-Identitätsanbieter erstellen

AWS OFFICIALAktualisiert vor 2 Jahren