Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何對我使用 Amazon EKS IAM 角色存取服務帳戶時出現的 "InvalidIdentityToken" 錯誤進行疑難排解?
我的 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集的指紋已變更,導致 Application Load Balancer 控制器更新失敗。或者,我的 Amazon EKS Pod 處於失敗狀態,並出現 "InvalidIdentityToken" 錯誤。
解決方法
Amazon EKS 服務帳戶使用 OpenID Connect (OIDC) 進行身分驗證。當您為 Amazon EKS 叢集建立 AWS 身分與存取管理 (IAM) OIDC 身分提供者 (IdP) 時,產生的指紋會使用根憑證。Amazon 根憑證授權單位 (CA) 的驗證期間大約為 25 年。
您在下列情況下收到 "WebIdentityErr: failed to retrieve credentials\r\ncaused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint\r\n" 错误:
- OIDC 提供者中使用的指紋已過期。
- 指紋與 CA 不相符。
若要對此問題疑難排解並取得指紋,請安裝並設定 OpenSSL 命令列工具。
尋找 OIDC IDP 的 URL
若要尋找 OIDC IdP 的 URL,請完成下列步驟:
-
開啟 Amazon EKS 主控台。
-
在導覽窗格中,選擇叢集。
-
選取要檢查的叢集。
-
選擇組態標籤。
-
在詳細資訊區段下,記下 OICD IdP URL。
**範例:**https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/在 OICD IdP URL 末尾加入 /.well-known/openid-configuration,以形成 IdP 的組態文件的 URL。
**範例:**https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/.well-known/openid-configuration.在 Web 瀏覽器中存取此 URL,並記下輸出中的 jwks_uri 值。瀏覽器輸出類似下列內容:
{"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"]}
顯示憑證
使用 OpenSSL 命令列工具執行下列命令以顯示所有使用的憑證:
**注意:**使用您的網域名稱取代 oidc.eks.us-east-2.amazonaws.com。
openssl s_client -connect oidc.eks.us-east-2.amazonaws.com:443 -showcerts
輸出訊息類似下列內容:
[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
如果您在輸出中看到多個憑證,請在輸出末尾尋找最後一個憑證。最後一個憑證是憑證授權單位鏈中的根 CA。
建立憑證檔案
建立憑證檔案 (範例:certificate.crt),並將最後一個憑證的內容複製到檔案中。
然後,執行下列命令:
openssl x509 -in certificate.crt -text
輸出訊息類似下列內容:
[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
從 Not Before 和 Not After 欄位中的值檢查憑證的有效性。在上述輸出中,CA 的有效期大約為 25 年。
取代已過期的憑證
如果輸出顯示憑證已過期,則必須使用 OIDC IdP 續約憑證。
續約憑證後,請使用 OpenSSL 命令列工具執行下列命令以取得最新的指紋:
openssl x509 -in certificate.crt -fingerprint -noout
輸出訊息類似下列內容:
SHA1 Fingerprint=9E:99:A4:8A:99:60:B1:49:26:BB:7F:3B:02:E2:2D:A2:B0:AB:72:80
從此字串中刪除冒號 (:) 以取得最終的指紋:
9E99A48A9960B14926BB7F3B02E22DA2B0AB7280
執行下列命令以取得最新的指紋:
$ openssl x509 -in certificate.crt -fingerprint -noout | sed s/://g
更新至最新的指紋
如果目前的指紋已過期,請使用 IAM 主控台或 AWS Command Line Interface (AWS CLI) 以最新的指紋取代它。
IAM 主控台
若要使用 IAM 主控台,請完成下列步驟:
- 開啟 IAM 主控台。
- 在導覽窗格中,選擇身分提供者。
- 選擇您要更新的 IdP。
- 在指紋區段中,選擇管理。
- 選擇新增指紋,然後輸入新值。
- 選擇儲存變更。
AWS CLI
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
執行 update-open-id-connect-provider-thumbprint 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
相關資訊
- 語言
- 中文 (繁體)

相關內容
- 已提問 1 年前