자체 관리형 Kerberos 인증 문제 해결
mongokerberos
유효성 검사 도구
mongokerberos
프로그램은 MongoDB 와 함께 사용할 플랫폼의 Kerberos 구성을 확인하고 MongoDB 클라이언트 에서 Kerberos 인증 이 예상대로 작동하는지 테스트할 수 있는 편리한 방법을 제공합니다.
mongokerberos
도구는 일반적인 구성 문제를 진단하는 데 도움이 될 수 있으며, Kerberos 구성 문제를 해결할 때 시작하는 것이 좋습니다. 자세한 내용은 mongokerberos
문서를 참조하세요.
mongokerberos
MongoDB Enterprise에서만 사용할 수 있습니다.
Kerberos 구성 디버깅 전략
Kerberos 를 사용하여 mongos
또는 에 mongod
대해 시작하거나 인증하는 데 문제가 있는 경우 다음 사항을 고려하세요.
MongoDB Community Edition이 아닌 MongoDB Enterprise를 실행 중인지 확인하세요. Kerberos 인증은 MongoDB Enterprise 기능이며 MongoDB Community Edition 바이너리에서는 작동하지 않습니다.
MongoDB 엔터프라이즈를 사용하고 있는지 확인하려면
--version
명령줄 옵션을mongod
또는mongos
에 전달합니다.mongod --version 이 명령의 출력에서
modules: subscription
또는modules: enterprise
문자열을 찾아 MongoDB Enterprise 바이너리를 사용하고 있는지 확인합니다.mongod
또는mongos
인스턴스의 표준 시스템 호스트 이름이 확인 가능한 정규화된 도메인 이름인지 확인합니다.Linux에서는 시스템 프롬프트에서
hostname -f
명령을 사용하여 시스템 호스트 이름 확인을 확인할 수 있습니다.Linux에서는 서비스 주체 이름(SPN 의 기본 구성 요소가 인지
mongodb
확인합니다. 의 SPN은 입니다. SPN 의 프라이머리 컴포넌트가mongodb
이 아닌 경우--setParameter saslServiceName
을 사용하여 프라이머리 컴포넌트를 지정해야 합니다.
Linux에서는 SPN(서비스 주체 이름)의 인스턴스 구성 요소가 키탭 파일 의 또는
mongod
인스턴스의 표준mongos
시스템 호스트 이름과 일치합니다.mongod
또는mongos
인스턴스의 시스템 호스트 이름이 키탭 파일에 없는 경우GSSAPI error acquiring credentials.
오류 메시지와 함께 인증이 실패합니다.에서 반환된
mongod
또는mongos
인스턴스의hostname -f
--setParameter saslHostName
호스트 이름이 정규화되지 않은 경우 또는 를 시작할 때 를mongod
mongos
사용하여 인스턴스의 정규화된 도메인 이름을 설정합니다.정방향 및 역방향 DNS 조회를 모두 제공하기 위해
mongod
또는mongos
인스턴스를 실행하는 각 호스트에A
및PTR
DNS 레코드가 있는지 확인합니다.A
레코드는mongod
또는mongos
의 FQDN에 매핑되어야 합니다.MongoDB 인스턴스와 Kerberos 인프라를 호스팅하는 서버의 시계가 최대 시간 왜곡(기본값 5분) 이내인지 확인합니다. 시간 차이가 최대 시간 왜곡보다 크면 인증에 성공할 수 없습니다.
Linux KRB5 키탭에
@<KERBEROS REALM>
로 끝나는 주체 이름이 포함되어 있는지 확인합니다. SPN 의 유효성을 검사하려면 Active Directory에서setspn -Q <spn>
를 실행합니다. 올바르게 구성된 경우 이 명령은 SPN에 연결된 계정에 대해 하나의 고유 이름을 반환합니다. Linux에서klist -k <keytab>
를 실행하면 키 탭에<spn>@<KERBEROS REALM>
이(가) 나타납니다.Active Directory를 KDC 로 사용하는 경우 MongoDB 서비스 계정이 컴퓨터 계정이 아닌 사용자 계정인지 확인합니다.
Active Directory에서 AES 암호화를 사용하는 경우,
msDS-SupportedEncryptionTypes
속성 또는 "네트워크 보안: Kerberos에 허용된 암호화 유형 구성" 정책 설정을 사용하여 MongoDB 서비스 계정에서 AES를 사용하도록 설정합니다.Kerberos는 동일한 비밀번호를 가진 두 사용자가 서로 다른 키를 생성하도록 키 생성 알고리즘에 솔트를 적용합니다. Linux의
ktutil
와 Active Directory(AD)는 솔트를 생성하는 데 동일한 프로세스를 사용하지 않습니다. 이러한 불일치로 인해 Linux 및 Windows 환경에서 작업할 때 인증 실패가 발생할 수 있습니다. 이 문제를 완화하려면 다음을 수행할 수 있습니다.AD 서버에서 키탭 파일을 생성하고 결과 파일을 Linux 서버로 이동합니다.
ktpass /out <outfile.keytab> /princ <spn>@<KERBEROS REALM> /mapuser <current userPrincipalName> /crypto ALL /ptype KRB5_NT_PRINCIPAL +rndpass 참고
이렇게 하면
userPrincipalName
이/princ
의 값으로 변경됩니다.Linux에서
ktutil
을(를) 사용하고 올바른 솔트를 사용하도록 강제합니다.ktutil
가 올바른 솔트를 사용하도록 강제하려면 다음을 수행합니다.userPrincipalName
을 주체 이름으로 사용하는 키탭 항목을 생성합니다.ktutil: add_entry -password -p <userPrincipalName>@<KERBEROS REALM> -e aes256-cts-hmac-sha1-96 -k <KVNO> Password for <userPrincipalName>@<KERBEROS REALM>: ktutil: list -k slot KVNO Principal 키를 16진수 덤프합니다.
<spn>@<KERBEROS REALM>
을 주체 이름으로 사용하여 새 키탭 항목을 만들고 16진수 덤프 키를 사용합니다.1 <KVNO> <userPrincipalName>@<KERBEROS REALM>(0x<HEXDUMP>) ktutil: add_entry -key -p <spn>@<KERBEROS REALM> -e aes256-cts-hmac-sha1-96 -k <KVNO> Key for <spn>@<KERBEROS REALM> (hex): <HEXDUMP> ktutil: write_kt mongodb_ad.keytab
솔트를 사용하지 않는 RC4-HMAC를 사용하지만, 이는 권장되지 않습니다.
Linux의 Kerberos 추적 로깅
MIT Kerberos는 트레이스 로깅 출력을 위한 KRB5_TRACE
환경 변수를 제공합니다. Linux에서 MIT Kerberos에 지속적으로 문제가 발생하는 경우 mongod
, mongos
또는 mongosh
인스턴스를 시작할 때 KRB5_TRACE
를 설정하여 자세한 로깅을 생성할 수 있습니다.
예를 들어, 다음 명령은 키탭 파일이 기본 /etc/krb5.keytab
경로에 있는 독립형 mongod
를 시작하고 /logs/mongodb-kerberos.log
KRB5_TRACE
설정합니다.
env KRB5_KTNAME=/etc/krb5.keytab \ KRB5_TRACE=/logs/mongodb-kerberos.log \ mongod --dbpath /data/db --logpath /data/db/mongodb.log \ --auth --setParameter authenticationMechanisms=GSSAPI \ --bind_ip localhost,<hostname(s)|ip address(es)> --fork
일반적인 오류 메시지
경우에 따라 MongoDB는 Kerberos 서비스에 문제가 있는 경우 GSSAPI 인터페이스에서 오류 메시지를 반환합니다. 몇 가지 일반적인 오류 메시지는 다음과 같습니다: