Amazon EKS IAM 역할을 사용하여 서비스 계정에 액세스할 때 발생하는 “InvalidIdentityToken” 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 지문이 변경되어 Application Load Balancer 컨트롤러가 업데이트에 실패했습니다. 또는 Amazon EKS 포드가 “InvalidIdentityToken” 오류와 함께 장애 상태에 있습니다.

해결 방법

Amazon EKS 서비스 계정은 OpenID Connect(OIDC)를 사용하여 인증합니다. Amazon EKS 클러스터를 위한 AWS Identity and Access Management(IAM) OIDC IdP(ID 공급자)를 만들생성되는 지문은 루트 인증서를 사용합니다. 아마존 루트 인증 기관(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. 웹 브라우저에서 이 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 Command Line Interface(AWS CLI)를 사용하여 최신 지문으로 교체하십시오.

IAM 콘솔

또는 IAM 콘솔을 사용하려면 다음 단계를 완료하세요.

  1. IAM 콘솔을 엽니다.
  2. 탐색 창에서 ID 공급자선택합니다.
  3. 업데이트하려는 IdP를 선택합니다.
  4. 지문 섹션에서 관리를 선택합니다.
  5. 지문 추가를 선택한 다음 새 값을 입력합니다.
  6. 변경 사항 저장을 선택합니다.

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

관련 정보

OpenID Connect(OIDC) ID 공급자 생성

AWS 공식
AWS 공식업데이트됨 10달 전
댓글 없음