Amazon EKS IAM ロールを使用してサービスアカウントにアクセスしているときに発生する「InvalidIdentityToken - OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint」(InvalidIdentityToken - OpenIDConnect プロバイダーの HTTPS 証明書が設定済みサムプリントと一致しません) というエラーのトラブルシューティング方法を教えてください。

最終更新日: 2021 年 11 月 9 日

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターのサムプリントが変更されたため、Application Load Balancer コントローラーの更新が失敗しました。

- または -

Amazon EKS ポッドが「WebIdentityErr: failed to retrieve credentials\r\ncaused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint\r\n」(次のエラーで失敗状態です:「WebIdentityErr: 認証情報の取得に失敗しました\ r\ n原因: InvalidIdentityToken: OpenIDConnect プロバイダーの HTTPS 証明書が設定済みサムプリントと一致しません\ r\ n) のエラーで失敗しています。

解決方法

すべての Amazon EKS サービスアカウントは認証に OpenID Connect (OIDC) を使用します。Amazon EKS クラスターに AWS Identity and Access Management (IAM) OIDC プロバイダーを作成すると、生成されたサムプリントはルート証明書を使用します。Amazon ルート認証機関 (CA) の検証期間は約 25 年です。「HTTPS certificate doesn't match configured thumbprint」エラーは、次のいずれかの条件で発生します。

  • OIDC プロバイダで使用されているサムプリントの有効期限が切れている。
  • サムプリントが CA に一致しない。

この問題のトラブルシューティングを行ってサムプリントを取得するには、OpenSSL コマンドラインツールをインストールして設定する必要があります。

OIDC プロバイダーのサムプリントを取得するには、次の手順を実行します。

1.    次の手順を実行して、OIDC ID プロバイダー (IdP) の URL を見つけます。

  1. Amazon EKS コンソールを開きます。
  2. ナビゲーションペインで [クラスター] を選択します。
  3. 確認するクラスターを選択します。
  4. [設定] タブを選択します。
  5. [詳細] セクションの下にある OICD プロバイダーの URL をメモします。
    例: https://oidc.eks.us-east-1.amazonaws.com/id/1111222233334444555566667777888F/

OICD プロバイダー URL の末尾に /.well-known/openid-configuration を含めて、IdP の設定ドキュメントの URL を形成します。

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

この 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"]}

2.    OpenSSL コマンドラインツールを使用して次のコマンドを実行し、使用されているすべての証明書を表示します。

注: oidc.eks.us-east-2.amazonaws.com の部分をステップ 1 で返されたドメイン名で置き換えてください。

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

出力に複数の証明書が表示された場合は、出力の最後に表示された最後の証明書を探します。最後の証明書が認証機関チェーン内のルート CA です。

3.    証明書ファイル (例: certificate.crt) を作成し、最後の証明書の内容をこのファイルにコピーします。次のコマンドを実行します。

openssl x509 -in certificate.crt -text

出力は次のようになります。

[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

証明書の有効性は、[Not Before] (これ以前は無効) および [Not After] (これ以降は無効) フィールドの値から確認できます。この出力から、Amazon CA の有効期間は約 25 年であることがわかります。

4.    出力で証明書の有効期限が切れていることが示された場合は、OIDC プロバイダーに証明書を更新する必要があります。証明書を更新した後、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

5.    現在のサムプリントの有効期限が切れている場合は、ステップ 4 で取得した最新のサムプリントを使用して置き換えます。この操作は、IAM コンソールまたは AWS Command Line Interface (AWS CLI) を使用して実行できます。

コンソールを使用してサムプリントを置き換えるには、次の操作を行います。

  1. IAM コンソールを開きます。
  2. ナビゲーションペインで、[ID プロバイダ] を選択します。
  3. 更新する ID プロバイダーを選択します。
  4. [サムプリント] セクションで、[管理] を選択します。
  5. [サムプリントを追加] を選択し、新しい値を入力します。
  6. [変更を保存] を選択します。

- または -

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

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください