LDAP 서버 문제 해결

이 문서에서는 GKE Identity Service의 LDAP 서버 문제를 해결하는 방법을 안내합니다.

연결 문제

GKE Identity Service를 구성할 때 LDAP 서버에 연결을 시도하는 동안 연결 문제가 발생할 수 있습니다. 연결 문제는 LDAP 서버를 식별하는 데 사용된 인증서가 ClientConfig에 언급된 인증서와 일치하지 않는 경우에도 발생할 수 있습니다.

오류 메시지

다음 메시지는 gcloud anthos auth login 명령어를 실행할 때 발생하는 오류에 적용됩니다.

  • ERROR: LDAP login failed: could not obtain an STS token: Post "https://127.0.0.1:15001/sts/v1beta/token": failed to obtain an endpoint for deployment anthos-identity-service/ais: Unauthorized
  • ERROR: Configuring Anthos authentication failed

솔루션

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

  • GKE Identity Service가 LDAP 서버에 연결되지 않는 경우 다음 안내를 따르세요.
    • 클러스터에서 네트워크 트래픽이 LDAP 서버(ID 공급업체)에 도달할 수 있는지 확인하려면 telnet, nc 또는 비슷한 명령어를 사용하여 LDAP 서버에 연결합니다. LDAP 서버에 연결하려면 GKE Identity Service가 실행되는 노드 또는 포드에서 명령어를 실행해야 합니다.
    • 명령어가 성공하면 GKE Identity Service 포드가 LDAP 서버에 연결됩니다.
    • 명령어가 실패하면 네트워크 연결에 문제가 있음을 나타냅니다. 네트워크 설정을 확인하거나 네트워크 관리자에게 문의하여 연결 문제를 해결해야 합니다.
  • 구성의 공개 인증서가 올바른 형식이고 다음과 같은 경우에 LDAP 서버와 일치하는지 확인합니다.
    • TLS와 함께 LDAP를 사용합니다.
    • 서비스 계정을 사용하여 LDAP에 인증합니다. 인증서를 사용하여 LDAP 서버에서 서비스 계정을 식별합니다.

인증 문제

인증 문제가 발생하는 상황은 다음과 같습니다.

  • GKE Identity Service용 ClientConfig에서 LDAP 공급업체 설정이 잘못 구성되었습니다.
  • 입력한 사용자 인증 정보가 LDAP 서버에 존재하지 않습니다.
  • LDAP 서버가 다운되었습니다.

오류 메시지

다음 메시지는 gcloud anthos auth login 명령어를 실행할 때 발생하는 오류에 적용됩니다.

  • ERROR: LDAP login failed: could not obtain an STS token: Post "https://127.0.0.1:15001/sts/v1beta/token": failed to obtain an endpoint for deployment anthos-identity-service/ais: Unauthorized
  • ERROR: Configuring Anthos authentication failed

해결책

클러스터 관리자는 GKE Identity Service 로그를 검토하고 다음과 같은 방법으로 인증 문제를 해결합니다.

  • Can't contact LDAP server: 이 문제를 해결하는 방법에 대한 자세한 내용은 연결 문제를 참조하세요.
  • Attempting to bind as the LDAP service account: GKE Identity Service가 ClientConfig에 제공된 서비스 계정 사용자 인증 정보를 사용하여 LDAP 서버에 연결을 시도합니다. 이 로그 메시지가 없으면 연결 문제가 있음을 나타냅니다.
  • Successfully completed BIND as LDAP service account: GKE Identity Service가 LDAP 서버에 성공적으로 연결되고 서비스 계정을 사용자 인증에 사용할 수 있습니다. 이 로그 메시지가 없으면 구성 문제가 있음을 나타냅니다.
  • Successfully found an entry for the user in the database: LDAP 서버에 사용자 항목이 있습니다. 이는 baseDN, filter, loginAttribute 필드가 올바르게 구성되어 사용자를 검색할 수 있음을 의미합니다. 이 메시지는 로깅 세부정보 수준이 기본 수준보다 높은 경우에만 표시됩니다. 로그 사용 설정에 대한 자세한 내용은 디버그 로그 사용 설정을 참조하세요.
  • Attempting to BIND as the user to verify their credentials: GKE Identity Service가 사용자 인증 정보를 확인하려고 시도합니다.
  • Successfully completed LDAP authentication: 사용자 인증이 완료되었습니다. 이 로그 메시지가 없으면 사용자 인증 정보가 잘못되었음을 나타냅니다.

인증 토큰 만료됨

로그인에 성공하더라도 인증 토큰이 만료된 문제가 발생할 수 있습니다.

오류 메시지

ERROR: You must be logged in to the server (Unauthorized)

솔루션

서버에 다시 로그인하면 문제를 해결할 수 있습니다.

사용자 또는 그룹에 대한 RBAC 역할 결합 문제

이 문제는 인증에 성공했지만 사용자 또는 그룹에 대한 RBAC 역할 바인딩이 없기 때문에 승인이 실패할 때 발생합니다. 예를 들어 kubectl get pods 명령어를 실행하려고 할 때 이 문제가 지속됩니다.

오류 메시지

Error from server (Forbidden): <SERVICE or PODS> is forbidden: <MORE DETAILS>

솔루션

다음을 수행하여 문제를 해결할 수 있습니다.

  1. LDAP 서버에 로그인하여 대상 사용자 그룹을 봅니다.
  2. Kubernetes 역할과 역할 바인딩이 올바르게 정의되어 있고 LDAP 디렉터리의 값과 일치하는지 확인합니다. 관리자는 Kubernetes 사용자 가장을 통해 역할 바인딩을 확인할 수 있습니다.
  3. 대상 사용자 그룹이 필요한 작업을 수행하도록 승인되도록 역할 결합을 업데이트합니다.
  4. baseDN의 값은 물론 필요에 따라 그룹의 filteridentifierAttribute가 올바른지 확인합니다. GKE Identity Service는 이러한 필드의 그룹 구성을 사용하여 사용자가 속한 모든 그룹을 쿼리합니다. baseDN이 비어 있으면 Kubernetes API 서버에 그룹이 제공되지 않습니다. 이 경우 로깅된 메시지가 없습니다. baseDN가 비어 있지 않으면 GKE Identity Service가 데이터베이스에서 사용자 그룹을 쿼리합니다.
    • 쿼리가 성공하면 Kubernetes API 서버에 그룹이 제공됩니다.
    • 쿼리가 실패하면 Kubernetes API 서버에 그룹이 제공되지 않습니다. 이 경우 그룹의 baseDNfilter 구성 값을 수정해야 합니다.

사용자가 여러 그룹에 속함

이 문제는 사용자가 여러 그룹에 속한 경우에 발생합니다.

오류 메시지

could not obtain an STS token: STS token exceeds allowed size limit. Possibility of too many groups associated with the credentials provided.

솔루션

클러스터 관리자는 ClientConfig의 filter 필드를 구성하여 쿼리에서 LDAP 서버로 반환되는 그룹 수를 줄여야 합니다.

버전 호환성 문제

이 문제는 GKE Identity Service와 설치된 Google Cloud CLI 버전 간에 버전 호환성 불일치가 있을 때 발생합니다.

오류 메시지

  • unable to parse STS Token Response
  • could not obtain an STS token: JSON parse error: The request was malformed.
  • could not obtain an STS token: Grant type must confirm that the request is intended for a token exchange.
  • could not obtain an STS token: Requested token type must correspond to an access token.
  • could not obtain an STS token: Subject token type must be a valid token type supported for token exchange.

해결책

gcloud 유틸리티 및 GKE Identity Service를 사용 가능한 최신 버전으로 업그레이드해야 합니다.

401 인증 실패 상태 코드

이 문제는 Kubernetes API 서버에서 서비스를 인증할 수 없고 401 오류 코드를 반환하면 발생합니다.

오류 메시지

  • ERROR: LDAP login failed: STSToken() failed: could not obtain an STS token: Post "https://127.0.0.1:15001/sts/v1beta/token": DialContext() failed: podEndpoint() failed to obtain an endpoint for deployment anthos-identity-service/ais: Unauthorized

  • ERROR: Configuring Anthos authentication failed

솔루션

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

  • 다음 명령어를 사용하여 GKE Identity Service 포드가 running 상태인지 확인합니다.
    kubectl get pods -l k8s-app=ais -n anthos-identity-service --kubeconfig USER_CLUSTER_KUBECONFIG
    
  • ClientConfig에서 다음 명령어를 사용하여 LDAP 구성을 확인합니다.
    kubectl get clientconfig -n kube-public -o jsonpath='{.items[].spec.authentication[].ldap}' --kubeconfig USER_CLUSTER_KUBECONFIG
    
  • 오류에 대한 자세한 내용은 로그를 검토하세요. 로깅에 대한 자세한 내용은 시스템 구성요소에 로깅 및 모니터링 사용을 참조하세요.