Amazon EKS IAM 역할을 사용하여 서비스 계정에 액세스할 때 “InvalidIdentityToken - OpenIDConnect 공급자의 HTTPS 인증서가 구성된 지문과 일치하지 않음(InvalidIdentityToken - OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint)” 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 지문이 변경되어 Application Load Balancer 컨트롤러가 업데이트에 실패했습니다. 또는 내 Amazon EKS 포드가 다음 오류와 함께 실패 상태입니다. "WebIdentityErr: 자격 증명을 검색하지 못함\r\n원인: InvalidIdentityToken: OpenIDConnect 공급자의 HTTPS 인증서가 구성된 지문과 일치하지 않음\r\n(WebIdentityErr: failed to retrieve credentials\r\ncaused by: InvalidIdentityToken: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint\r\n)"

해결 방법

모든 Amazon EKS 서비스 계정은 OpenID Connect(OIDC)를 사용하여 인증합니다. Amazon EKS 클러스터용 AWS Identity and Access Management(IAM) OIDC 공급자를 생성할 때 생성된 지문은 루트 인증서를 사용합니다. Amazon 루트 인증 기관(CA)의 유효 기간은 약 25년입니다. 다음 조건 중 하나에 해당하는 경우 "HTTPS 인증서가 구성된 지문과 일치하지 않음(HTTPS certificate doesn't match configured thumbprint)" 오류가 발생합니다.

  • OIDC 공급자에 사용된 지문이 만료되었습니다.
  • 지문이 CA와 일치하지 않습니다.

이 문제를 해결하고 지문을 가져오려면 OpenSSL 명령줄 도구를 설치하고 구성해야 합니다.

OIDC 공급자의 지문을 가져오려면 다음을 수행합니다.

1.    다음을 수행하여 OIDC 자격 증명 공급자(IdP)의 URL을 찾습니다.

  1. Amazon EKS 콘솔을 엽니다.
  2. 탐색 창에서 [클러스터(Clusters)]를 선택합니다.
  3. 확인할 클러스터를 선택합니다.
  4. [구성(Configuration)] 탭을 선택합니다.
  5. [세부 정보(Details)] 섹션에서 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. 탐색 창에서 [자격 증명 공급자(Identity providers)]를 선택합니다.
  3. 업데이트하려는 자격 증명 공급자를 선택합니다.
  4. [지문(Thumbprints)] 섹션에서 [관리(Manage)]를 선택합니다.
  5. [지문 추가(Add thumbprint)]를 선택하고 새 값을 입력합니다.
  6. [변경 사항 저장(Save changes)]을 선택합니다.

또는

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를 사용하고 있는지 확인하세요.


관련 정보

OpenID Connect 자격 증명 공급자에 대한 루트 CA 지문 얻기

OpenID Connect(OIDC) 자격 증명 공급자 생성

클러스터에 대한 IAM OIDC 공급자 생성

AWS 공식
AWS 공식업데이트됨 2년 전