OIDC 공급업체 문제 해결

이 문서에서는 GKE Identity Service의 OIDC 및 AzureAD ID 공급업체 문제를 해결하는 방법을 안내합니다.

잘못된 인증서 형식

이 문제는 인증서 값에 형식 오류가 있는 경우 발생합니다. 형식 문제는 인증서 값이 base64로 인코딩되지 않은 경우 및 값이 base64로 인코딩되었지만 올바르지 않은 경우에 해당할 수 있습니다. 루트 인증 기관에서 인증서에 서명하지 않았거나 올바른 형식의 신뢰 체인이 제공되지 않은 경우에도 이 문제가 발생할 수 있습니다.

오류 메시지

다음은 인증서 형식이 잘못된 경우의 오류 메시지 예시입니다.

  • base64로 인코딩되지 않은 인증서: Failed creating HTTP client to fetch the Discovery URI "<Discovery-document URI>" with error: Unable to decode data field, the value should be Base64 encoded

  • 형식이 올바르지 않거나 base64로 인코딩되었지만 잘못된 인증서: Unable to connect to 'https://example.com', encountered the following error: Problem with the SSL CA cert (path? access rights?). Details: error setting certificate verify locations: CAfile: /tmp/example.pem CApath: none (The certificate could not be read, this is most likely because it's empty or contains a formatting error. Please check your configuration.)

  • 형식이 올바르지 않거나 base64로 인코딩되었지만 잘못된 인증서: Failed fetching the Discovery URI "<Discovery-document URI>" with error: Unable to load TLS certificates.

솔루션

다음 방법 중 하나로 문제를 해결할 수 있습니다.

  • ClientConfig에 제공하는 인증서 값은 base64 인코딩 문자열 및 PEM 형식 문자열이어야 합니다. 자세한 내용은 CA 인증서 인코딩을 참조하세요.
  • 공급업체가 루트 인증 기관에서 서명한 인증서를 사용하지 않는 경우 인증서 신뢰 체인으로 GKE ID 서비스를 구성해야 합니다. 자세한 내용은 중간 인증서를 참조하세요.

잘못된 인증서 값

이 문제는 인증서에 일치하지 않는 값이 있는 경우 발생합니다. 이 경우 인증서의 형식은 올바르지만 서버와 일치하지 않습니다. 구성에 인증서가 없는 경우일 수도 있습니다.

다음 시나리오에 하나라도 해당하면 인증서 값이 잘못된 것으로 간주될 수 있습니다.

  • ClientConfig에 잘못된 인증서 값이 공유되었습니다. 서버 인증서의 issuer이 구성된 인증서의 subject와 일치하지 않으면 인증서 값이 잘못된 것입니다.
  • ClientConfig의 인증서가 base64로 인코딩된 문자열이 아닙니다.
  • 중간 인증서를 사용하여 서버 인증서를 발급했지만 인증서 체인이 제공되지 않았습니다.

오류 메시지

다음은 인증서 값에 불일치가 있는 경우의 오류 메시지 예시입니다.

  • 인증서 체인이 불완전하거나 서버와 일치하지 않음: SSL peer certificate was not OK. Details: SSL certificate problem: unable to get local issuer certificate

  • 불완전한 인증서 체인(루트에서 시작되지 않거나 연속적이지 않은 잘못된 부분 체인에 해당): Failed fetching the Discovery URI "<Discovery-document URI>" with error: The server's TLS certificate did not match expectations.

  • 인증서 체인은 유효하지만 OIDC 서버와 일치하지 않음: AIS was expecting the server to have a different certificate

  • 인증서 체인은 유효하지만 OIDC 서버와 일치하지 않음: Failed fetching the Discovery URI "<Discovery-document URI>" with error: The server's TLS certificate did not match expectations.

솔루션

ClientConfig에 제공하는 인증서 값은 ID 공급업체와 일치하는 올바른 형식의 인증서 체인을 포함해야 합니다. 인증서 형식을 지정하고 인코딩하는 방법에 관한 자세한 내용은 CA 인증서 인코딩을 참조하세요.

gcloud anthos auth login 명령어로 생성된 kubeconfig 파일을 사용하면 kubectl 명령어가 실패함

Windows 머신에서 OIDC와 함께 gcloud anthos auth login 명령어를 사용하여 클러스터 액세스를 위한 kubeconfig 파일을 생성하면 kubectl 명령어가 다음 오류 메시지와 함께 실패할 수 있습니다. The command line is too long. 이 문제는 특히 Windows 시스템에서 발생하며 동일한 kubeconfig 파일을 사용하는 Linux 머신에는 영향을 미치지 않습니다. 근본 원인은 사용자가 다수의 그룹(그룹 이름 길이에 따라 약 70~200개 그룹)에 속해 있을 때 Azure Active Directory(Azure AD)에서 생성하는 인증 토큰의 크기와 관련이 있습니다.

이 큰 토큰은 Windows에서 허용하는 명령줄의 최대 길이인 8,191자를 초과하므로 kubectl 명령어 실행에 실패합니다.

오류 메시지

$ kubectl --kubeconfig test-kubeconfig.yml get nodes

The command line is too long.
The command line is too long.
E0102 11:02:29.115256 24320 memcache.go:265] couldn't get current server API group list: Get "https://10.35.0.86:443/api?timeout=32s": getting credentials: exec: executable gcloud failed with exit code 1
The command line is too long.
E0102 11:02:29.350238 24320 memcache.go:265] couldn't get current server API group list: Get "https://10.35.0.86:443/api?timeout=32s": getting credentials: exec: executable gcloud failed with exit code 1
The command line is too long.
E0102 11:02:30.062811 24320 memcache.go:265] couldn't get current server API group list: Get "https://10.35.0.86:443/api?timeout=32s": getting credentials: exec: executable gcloud failed with exit code 1
Unable to connect to the server: getting credentials: exec: executable gcloud failed with exit code 1

솔루션

이 문제를 해결하려면 다음 단계를 따르세요.

  • GKE 클러스터 버전 1.28 이상으로 업그레이드

    1.28 이전 버전의 GKE 클러스터를 실행하는 경우 지원되는 버전으로 업그레이드하는 것이 좋습니다.

  • 영향을 받는 사용자의 그룹 멤버십 줄이기

    인증하는 사용자가 속한 그룹 수를 문제가 되는 기준점(약 70개 그룹) 미만으로 줄이면 이 문제가 해결될 수 있습니다.

  • 영향을 받는 사용자의 그룹 멤버십 늘리기

    Microsoft Entra ID 기능에는 토큰에 포함할 수 있는 그룹 수에 제한이 있습니다. 그룹 멤버십이 70~200개 있으면 인증 문제가 발생할 수 있습니다. 하지만 이 한도를 초과하여 그룹 멤버십 수를 늘리면 ID 공급업체 문제를 해결할 수 있습니다. 이 제한의 동작으로 인해 Azure AD는 멤버십 수가 지나치게 많아지면 id_token에서 그룹을 생략하여 명령줄이 너무 길어지는 것을 방지하고 ID 공급업체 문제를 해결합니다. 한도 및 자세한 내용은 Microsoft Entra ID 문서를 참조하세요.