スキップしてコンテンツを表示

Amazon EKS IAM ロールを使用してサービスアカウントにアクセスする場合の「InvalidIdentityToken」エラーをトラブルシューティングする方法を教えてください。

所要時間3分
0

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターのサムプリントが変更され、Application Load Balancer の更新が失敗しました。または、Amazon EKS ポッドが失敗して「InvalidIdentityToken」エラーが表示されます。

解決策

Amazon EKS サービスアカウントでは、認証に OpenID コネクト (OIDC) を使用します。Amazon EKS クラスターの AWS Identity and Access Management (IAM) OIDC ID プロバイダー (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 を特定するには、次の手順を実行します。

  1. Amazon EKS コンソールを開きます。

  2. ナビゲーションペインで、[クラスター] を選択します。

  3. 確認するクラスターを選択します。

  4. [設定] タブを開きます。

  5. [詳細] セクションで、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

[次以降] フィールドと [失効日] フィールドの値から証明書が有効かどうかを確認します。前の出力では、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 コマンドラインインターフェイス (AWS CLI) を使用して最新のサムプリントに置き換えます。

**IAM コンソール **

または、IAM コンソールで以下の手順通りに実行します。

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

AWS CLI

**注:**AWS コマンドラインインターフェイス (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

関連情報

IAM で OpenID Connect (OIDC) ID プロバイダーを作成する

AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ