MongoDB Enterprise는 인증 요청을 LDAP(Lightweight Directory Access Protocol) 서비스로 프록시하는 기능을 지원합니다.
MongoDB는 LDAP 서버에 대한 간단한 바인딩과 SASL 바인딩을 지원합니다:
| 경유 | 설명 | 
|---|---|
| 운영 체제 라이브러리 | MongoDB 는 운영 체제 라이브러리를 통해 LDAP 서버 에 대한 바인딩을 지원합니다. 이를 통해 Linux 및 Windows의 MongoDB 서버는 인증에 LDAP 서버를 사용할 수 있습니다. 이전 버전에서는 Microsoft Windows의 MongoDB가 LDAP 서버에 연결할 수 없습니다. | 
| 
 | Linux의 MongoDB 서버는  Windows의 MongoDB에는 사용할 수 없습니다. | 
고려 사항
Docker에 대한 전체 설명은 이 문서의 범위를 벗어납니다. 이 페이지에서는 Docker에 대한 사전 지식이 있다고 가정합니다.
이 설명서는 오로지 MongoDB LDAP 인증에 대해 설명하며 LDAP의 다른 리소스를 대체하지는 않습니다. LDAP 인증을 구성하기 전에 LDAP 및 관련 주제를 철저히 숙지하는 것이 좋습니다.
MongoDB는 MongoDB deployment를 위한 LDAP 인증의 최적 구성을 위한 전문 서비스를 제공할 수 있습니다.
연결 풀
인증/권한 부여를 위해 LDAP 서버에 연결할 때 MongoDB는 기본적으로 다음을 수행합니다.
- 실행하면 연결 풀링을 사용합니다: - 또는 
- MongoDB Enterprise 바이너리가 libldap_r에 연결되는 Linux의 경우. 
 
- 실행하면 연결 풀링을 사용하지 않습니다: - MongoDB Enterprise 바이너리가 libldap에 대해 링크되는 Linux의 경우. 
 
연결 풀링 동작을 변경하려면 ldapUseConnectionPool 매개변수를 업데이트 합니다.
saslauthd 및 디렉터리 사용 권한
중요
security.sasl.saslauthdSocketPath 또는 --setParameter saslauthdPath로 지정된 saslauthd Unix 도메인 소켓 파일의 상위 디렉토리에 다음 대상에 대해 읽기 및 실행(r-x) 권한을 부여해야 합니다:
mongod 또는 mongos는 saslauthd 디렉토리 및 해당 콘텐츠에 대해 지정된 권한이 없으면 saslauthd를 통해 인증할 수 없습니다.
libldap 개인정보 정책에 libldap_r
libldap (예: RHEL에서 실행되는 경우) 에 연결된 MongoDB 4.2 엔터프라이즈 바이너리의 경우 libldap 액세스가 동기화되므로 일부 성능/대기 시간 비용이 발생합니다.
0}에 연결된 MongoDB 4.2 Enterprise 바이너리의 libldap_r 경우 이전 MongoDB 버전과 동작이 변경되지 않습니다.
MongoDB 서버에서 LDAP 사용자 관리하기
LDAP  권한 부여 LDAP 인증 하는 경우, 사용자 관리 를 위해서는 LDAP 서버 와 MongoDB 서버 모두에서 사용자를 관리해야 합니다. LDAP 를 통해 인증하는 각 사용자에 대해 MongoDB 에는 $external 데이터베이스 의 사용자 이름이 인증 사용자 이름 이름과 정확히 일치하는 사용자가 필요합니다. LDAP 서버 의 사용자를 변경하려면 해당 MongoDB $external 사용자를 변경해야 할 수 있습니다.
$external 인증 사용자(Kerberos, LDAP 또는 X.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장 을 사용하려면 사용자 이름이 10KB보다 클 수 없습니다.
예시
사용자가 sam@dba.example.com로 인증합니다. MongoDB 서버는 LDAP 서버에 바인딩하고 username transformations을 준수하여 사용자를 인증합니다. 인증에 성공하면 MongoDB 서버는 $external 데이터베이스에서 사용자 sam@dba.example.com 를 확인하고 인증된 사용자에게 해당 사용자와 관련된 역할 및 권한을 부여합니다.
MongoDB 서버에서 사용자를 관리하려면 해당 MongoDB $external 사용자가 $external 데이터베이스에 대한 사용자 관리자 권한(예: userAdmin에서 제공한 권한)을 가진 LDAP 사용자로 인증해야 합니다.
중요
$external 데이터베이스에 대한 사용자 관리 권한을 가진 $external 사용자가 없는 경우 LDAP 인증에 대한 사용자 관리를 수행할 수 없습니다. 이 시나리오는 LDAP 인증을 활성화하기 전에 사용자를 구성했지만 적절한 사용자 관리자를 생성하지 않은 경우 발생할 수 있습니다.
기존 비LDAP 사용자 관리
$external 데이터베이스에 없는 기존 사용자가 있는 경우 지속적인 액세스를 보장하려면 각 사용자에 대해 다음 요구 사항을 충족해야 합니다.
- 사용자가 LDAP 서버에 해당 사용자 객체를 가지고 있습니다. 
- 사용자가 동등한 역할과 권한을 가진 - $external데이터베이스에 존재합니다.
$external 데이터베이스에 없는 사용자의 액세스를 계속 허용하려면 SCRAM-SHA-1 및/또는 SCRAM-SHA-256을(를) 적절히 포함하도록 setParameter authenticationMechanisms을(를) 구성해야 합니다. 그런 다음 사용자는 인증할 때 --authenticationMechanism SCRAM-SHA-1 또는 SCRAM-SHA-256을(를) 지정해야 합니다.
LDAP 인증을 복제본 세트에 배포
복제본 세트의 경우 프라이머리를 구성하기 전에 먼저 세컨더리 및 중재자 멤버에 대한 LDAP 인증을 구성합니다. 이는 샤드 복제본 세트 또는 config 서버 복제본 세트에도 적용됩니다. 한 번에 하나의 복제본 세트 멤버를 설정하여 대다수의 멤버가 쓰기 가용성을 유지하도록 합니다.
샤딩된 클러스터에 LDAP 인증 배포
샤딩된 클러스터에서는 클러스터 수준 사용자에 대해 config 서버 및 각 mongos에서 LDAP 인증을 구성해야 합니다. 샤드-로컬 사용자를 위해 각 샤드에 LDAP 권한 부여을 선택적으로 구성할 수 있습니다.
운영 체제 LDAP 라이브러리를 통한 LDAP 인증
OS 라이브러리 프로세스를 통한 LDAP 인증은 아래에 요약되어 있습니다.
- 클라이언트는 사용자의 자격 증명을 제공하여 MongoDB에 인증합니다. 
- 사용자 이름을 LDAP 서버에 바인딩하기 전에 LDAP DN에 매핑해야 하는 경우 MongoDB는 구성된 - security.ldap.userToDNMapping설정에 따라 변환을 적용할 수 있습니다.
- MongoDB는 제공된 사용자 이름 또는 변환이 적용된 경우 변환된 사용자 이름을 사용하여 - security.ldap.servers에 지정된 LDAP 서버에 바인딩합니다.- MongoDB는 기본적으로 단순 바인딩을 사용하지만 - security.ldap.bind.method및- security.ldap.bind.saslMechanisms에 구성된 경우- sasl바인딩을 사용할 수도 있습니다.- 변환에 LDAP 서버를 조회해야 하거나 LDAP 서버가 익명 바인드를 허용하지 않는 경우 MongoDB는 제공된 사용자 신임 정보를 인증하기 전에 - security.ldap.bind.queryUser및- security.ldap.bind.queryPassword바인드에 지정된 사용자 이름 및 비밀번호를 사용하여 LDAP 서버에 바인드합니다.
- LDAP 서버는 바인드 시도 결과를 MongoDB에 반환합니다. 성공하면 MongoDB는 사용자에게 권한 부여를 시도합니다. 
- MongoDB 서버는 사용자 이름을 - $external데이터베이스의 사용자에게 매핑하려고 시도하여 일치하는 사용자와 관련된 역할이나 권한을 사용자에게 할당합니다. MongoDB가 일치하는 사용자를 찾을 수 없으면 인증이 실패합니다.
- 클라이언트는 MongoDB가 인증한 사용자 역할 또는 권한을 부여한 조치를 수행할 수 있습니다. 
운영 체제 라이브러리를 통한 인증에 LDAP를 사용하려면 mongod 또는 mongos 구성 파일의 일부로 다음 설정을 지정합니다.
| 옵션 | 설명 | 필수 사항 | 
|---|---|---|
| 따옴표로 묶은 쉼표로 구분된  LDAP 서버의 접두사 앞에  연결 문자열에  연결 문자열이  | 네 | |
| 아니요, LDAP 서버에 바인딩하기 위해  | ||
| 아니요. 단,  | ||
| 고유 이름(DN) 또는 SASL 이름으로 식별되는 LDAP 엔티티로, MongoDB Server 이 LDAP 서버에 연결할 때 인증하거나 바인딩합니다. 지정된 사용자는 LDAP 서버에서 쿼리를 실행할 수 있는 적절한 권한을 가지고 있어야 합니다. | 아니요,  | |
| 
 | 아니요,  | |
| Windows MongoDB 배포는 LDAP 서버에 연결할 때와 마찬가지로 인증 또는 바인딩을 위해  | 아니요,  | |
| 클라이언트는 구성된  
 변환의 일부로 LDAP 쿼리를 사용하는  | 아니요, 클라이언트가 변환이 필요한 사용자 이름을 사용하여 인증하지 않는 한 필요하지 않습니다. | 
LDAP 인증을 통한 saslauthd
경고
Windows용 MongoDB Enterprise는 saslauthd를 통한 바인딩을 지원하지 않습니다.
고려 사항
- Linux MongoDB 서버는 - saslauthd데몬을 통해 LDAP 서버에 대한 바인딩을 지원합니다.
- 클라이언트와 서버, - saslauthd서버와 LDAP 서버 간에는 암호화되거나 신뢰할 수 있는 보안 연결을 사용하세요. LDAP 서버는- SASL PLAIN메커니즘을 사용하여 일반 텍스트로 데이터를 보내고 받습니다. VPN과 같은 신뢰할 수 있는 채널, TLS/SSL로 암호화된 연결 또는 신뢰할 수 있는 유선 네트워크만 사용해야 합니다.
구성
saslauthd을(를) 사용하여 MongoDB 서버를 LDAP 서버에 바인딩하도록 구성하려면 다음 명령줄 옵션 또는 구성 파일 설정을 사용하여 mongod을(를) 시작합니다.
- --auth액세스 제어를 활성화하려면
- authenticationMechanisms이(가)- PLAIN(으)로 설정된- --setParameter및
- 매개변수가 - saslauthdPath인- --setParameter을(를)- saslauthd인스턴스의 Unix 도메인 소켓 경로로 설정합니다. 기본 Unix 도메인 소켓 경로를 사용하려면 빈 문자열- ""을(를) 지정합니다.
배포에 필요한 다른 명령줄 옵션을 포함합니다. mongod 명령줄 옵션에 대한 전체 문서는 mongod을(를) 참조하세요.
- security.authorization- enabled으로 설정하다 ,
- setParameter- authenticationMechanisms매개 변수를- PLAIN로 설정하다 하고
- setParameter- saslauthdPath를 saslauthd 인스턴스 의 Unix 도메인 소켓 경로로 설정하다 합니다. 기본값 Unix 도메인 소켓 경로를 사용하려면 빈 string- ""를 지정합니다.
배포서버 에 필요한 다른 구성 파일 설정을 포함합니다. 구성 파일에 대한 전체 문서는 YAML 구성 파일 을 참조하세요.
LDAP 서버에 적합한 매개변수를 사용하여 saslauthd.conf 파일을 생성하거나 업데이트해야 합니다. saslauthd.conf을(를) 문서화하는 것은 이 문서의 범위를 벗어납니다.
중요
security.sasl.saslauthdSocketPath 또는 --setParameter saslauthdPath로 지정된 saslauthd Unix 도메인 소켓 파일의 상위 디렉토리에 다음 대상에 대해 읽기 및 실행(r-x) 권한을 부여해야 합니다:
mongod 또는 mongos는 saslauthd 디렉토리 및 해당 콘텐츠에 대해 지정된 권한이 없으면 saslauthd를 통해 인증할 수 없습니다.
다음 튜토리얼에서는 널리 사용되는 두 가지 LDAP 서비스와 작동하도록 saslauthd.conf을(를) 구성하는 방법에 대한 기본 정보를 제공합니다.
지침은 saslauthd 및 특정 LDAP 서비스에 대한 설명서를 참조하세요.
LDAP 인증을 통해 MongoDB 서버에 연결하기
LDAP 인증을 통해 MongoDB Server에 인증하려면 다음 매개 변수와 함께 $external 데이터베이스에서 db.auth()를 사용합니다.
| 옵션 | 설명 | 
|---|---|
| 
 | 인증할 사용자 이름입니다. | 
| 
 | 인증할 비밀번호입니다. | 
| 
 | 
 |