Kerberos 통합 GitLab의 문제 해결

Tier: Free, Premium, Ultimate Offering: Self-Managed

Kerberos 통합 GitLab 작업 중 다음과 같은 문제가 발생할 수 있습니다.

Windows AD에 대한 Kerberos 인증을 사용한 Google Chrome 사용

Google Chrome을 사용하여 Kerberos로 GitLab에 로그인하려면 전체 사용자 이름을 입력해야 합니다. 예를 들어 username@domain.com입니다.

전체 사용자 이름을 입력하지 않으면 로그인에 실패합니다. 이 로그인 실패의 증거로 다음 이벤트 메시지를 확인하려면 로그를 확인하세요.

"message":"OmniauthKerberosController: failed to process Negotiate/Kerberos authentication: gss_accept_sec_context did not return GSS_S_COMPLETE: An unsupported mechanism was requested\nUnknown error".

GitLab 및 Kerberos 서버 간의 연결성 테스트

GitLab 서버와 Kerberos 서버 간의 연결성을 테스트하려면 kinitklist와 같은 유틸리티를 사용할 수 있습니다. 이러한 것을 설치하는 방법은 특정 OS에 따라 다릅니다.

서비스 주체 이름(SP)을 보거나 각 SP에 대한 암호화 유형을 확인하려면 klist를 사용하세요.

klist -ke /etc/http.keytab

Ubuntu 서버의 경우 다음과 유사한 출력이 나타날 것입니다.

Keytab name: FILE:/etc/http.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   3 HTTP/my.gitlab.domain@MY.REALM (des-cbc-crc)
   3 HTTP/my.gitlab.domain@MY.REALM (des-cbc-md5)
   3 HTTP/my.gitlab.domain@MY.REALM (arcfour-hmac)
   3 HTTP/my.gitlab.domain@MY.REALM (aes256-cts-hmac-sha1-96)
   3 HTTP/my.gitlab.domain@MY.REALM (aes128-cts-hmac-sha1-96)

GitLab이 keytab 파일을 사용하여 Kerberos 서버에 연결할 수 있는지 확인하려면 상세 모드의 kinit를 사용하세요.

KRB5_TRACE=/dev/stdout kinit -kt /etc/http.keytab HTTP/my.gitlab.domain@MY.REALM

이 명령은 인증 프로세스의 상세한 출력을 보여줍니다.

지원되지 않는 GSSAPI 메커니즘

Kerberos SPNEGO 인증에서 브라우저는 GitLab에 지원하는 메커니즘 디렉터리을 보내야 합니다. 지원하는 메커니즘이 없는 경우 로그에 이러한 메시지와 함께 인증에 실패합니다.

OmniauthKerberosController: failed to process Negotiate/Kerberos authentication: gss_accept_sec_context did not return GSS_S_COMPLETE: An unsupported mechanism was requested Unknown error

이 오류 메시지에 대한 잠재적인 원인 및 해결 방법이 있습니다.

전용 포트를 사용하지 않는 Kerberos 통합

Kerberos를 사용하는 GitLab 인스턴스는 전용 포트를 사용하지 않으면 GitLab CI/CD가 작동하지 않습니다. 전용 포트 사용으로 Kerberos 통합이 구성되어 있는지 확인합니다.

클라이언트 기기와 Kerberos 서버 간의 연결 누락

브라우저가 Kerberos 서버에 직접 연락하지 못할 때 발생하는 문제로, IAKERB라고 하는 지원되지 않는 메커니즘을 시도하여 GitLab 서버를 Kerberos 서버의 중계로 사용합니다.

이 오류를 겪고 있는 경우 클라이언트 기기와 Kerberos 서버 간에 연결이 있는지 확인하세요. 이것은 선행 조건입니다. 방화벽에 의해 트래픽이 차단될 수 있거나 DNS 레코드가 올바르지 않을 수 있습니다.

GitLab DNS 레코드가 CNAME 레코드 오류

GitLab이 CNAME 레코드로 지정된 경우 Kerberos는 이 오류로 실패합니다. 이 문제를 해결하려면 GitLab에 대한 DNS 레코드가 A 레코드인지 확인하세요.

GitLab 인스턴스 호스트 이름의 전방 및 후방 DNS 레코드 불일치

GitLab 서버의 전방 및 후방 DNS 레코드가 일치하지 않을 때 다른 실패 모드가 발생합니다. 종종 Windows 클라이언트는 작동하지만 Linux 클라이언트는 실패합니다. Linux 클라이언트는 Kerberos 영역을 감지하는 동안 후방 DNS를 사용합니다. 잘못된 영역을 얻으면 일반 Kerberos 메커니즘이 실패하여 클라이언트는 상기 오류 메시지로 넘어가기 위해 IAKERB를 시도합니다.

이 문제를 해결하려면 GitLab 서버의 전방 및 후방 DNS가 일치함을 확인하세요. 예를 들어, gitlab.example.com으로 GitLab에 액세스하고 IP 주소가 10.0.2.2로 변환되면 2.2.0.10.in-addr.arpagitlab.example.comPTR 레코드여야 합니다.

브라우저 또는 클라이언트 기기에서 누락된 Kerberos 라이브러리

마지막으로, 브라우저나 클라이언트 기기에 Kerberos 지원이 완전히 없을 수 있습니다. Kerberos 라이브러리가 설치되어 있는지 확인하고 다른 Kerberos 서비스에 인증할 수 있는지 확인하세요.

클론 시 HTTP 기본: 액세스 거부

remote: HTTP Basic: Access denied
fatal: Authentication failed for '<KRB5 path>'

Git v2.11 이상을 사용하고 위와 같은 오류가 발생하는 경우 http.emptyAuth Git 옵션을 true로 설정하여 이 문제를 해결할 수 있습니다.

git config --global http.emptyAuth true

참조: Git v2.11 릴리스 노트

유용한 링크