문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ /

LDAP 인증

이 페이지의 내용

  • 고려 사항
  • 구성
  • 튜토리얼
  • LDAP 권한 부여를 사용하여 MongoDB 서버에 연결하기
  • LDAP 권한 부여를 위한 MongoDB 역할

MongoDB Enterprise 는 인증된 사용자가 속한 LDAP 그룹에 대한 LDAP 서버 쿼리를 지원합니다. MongoDB는 반환된 각 그룹의 고유 이름(DN)을 admin 데이터베이스의 역할 에 매핑합니다. MongoDB는 매핑된 역할 및 관련 권한을 기반으로 사용자에게 권한을 부여합니다. 자세한 내용은 LDAP 권한 부여 를 참조하세요.

LDAP 인증 프로세스는 아래에 요약되어 있습니다:

  1. 클라이언트는 MongoDB에 연결하고 외부 인증을 지원 하는 인증메커니즘을 사용하여 인증을 수행합니다.

    2} 인증 사용자(Kerberos, LDAP 또는 x.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장을 사용하려면 사용자 이름이 10KB보다 클 수 없습니다. $external

  2. MongoDB는 security.ldap.servers로 지정된 LDAP 서버에 security.ldap.bind.queryUsersecurity.ldap.bind.queryPassword 로 지정된 자격 증명을 사용하여 바인딩합니다.

    MongoDB는 기본적으로 단순 바인딩을 사용하지만 security.ldap.bind.methodsecurity.ldap.bind.saslMechanisms으로구성된 경우 sasl 바인딩을 대신 사용할 수 있습니다.

  3. MongoDB는 security.ldap.authz.queryTemplate을 사용하여 LDAP 쿼리를 구성하고 인증된 사용자의 그룹 노드십을 LDAP 서버에 쿼리합니다.

    MongoDB는 security.ldap.userToDNMapping 옵션으로 사용자 이름을 변환하여 쿼리 템플릿을 지원할 수 있습니다.

  4. LDAP 서버는 쿼리를 평가하고 인증된 사용자가 속한 그룹 목록을 반환합니다.

  5. MongoDB는 반환된 각 그룹의 고유 이름(DN)을 admin 데이터베이스의 역할 에 매핑하여 서버에서 작업을 수행할 수 있는 권한을 사용자에게 부여합니다. 반환된 그룹 DN이 admin 데이터베이스의 기존 역할 이름과 정확히 일치하는 경우, MongoDB는 사용자에게 해당 역할에 할당된 역할 및 권한을 부여합니다. 자세한 내용 은 LDAP 권한 부여를 위한 MongoDB 역할을 참조하세요.

  6. 클라이언트는 MongoDB 서버에서 인증된 사용자에게 부여된 역할 또는 권한이 필요한 조치를 수행할 수 있습니다.

  7. ldapUserCacheInvalidationInterval로 정의된 간격으로 MongoDB는 $external 캐시를 플러시합니다. 외부에서 권한이 부여된 사용자가 수행하는 후속 작업을 실행하기 전에 MongoDB는 LDAP 서버에서 해당 사용자의 그룹 멤버십을 다시 획득합니다.

Docker에 대한 전체 설명은 이 문서의 범위를 벗어납니다. 이 페이지에서는 Docker에 대한 사전 지식이 있다고 가정합니다.

이 문서에서는 MongoDB LDAP 권한 부여에 대해서만 설명하며 LDAP의 다른 리소스를 대체하지 않습니다. LDAP 인증을 구성하기 전에 LDAP 및 관련 주제를 철저히 숙지하는 것이 좋습니다.

MongoDB는 MongoDB 배포서버를 위한 LDAP 권한 부여의 최적 구성을 위한 전문 서비스 를 제공할 수 있습니다.

MongoDB는 다음과 같은 권한 부여 방법으로 LDAP 인증을 지원합니다:

이 구성에서 MongoDB는 LDAP, X.509 또는 Kerberos 권한 부여를 사용하여 클라이언트 연결을 인증합니다.

인증/권한 부여를 위해 LDAP 서버에 연결할 때 MongoDB는 기본적으로 다음을 수행합니다.

  • 실행하면 연결 풀링을 사용합니다:

    • 또는

    • 를 사용하여 MongoDB Enterprise 바이너리가 libldap_r에대해 링크되는 Linux에서.

  • 실행하면 연결 풀링을 사용하지 않습니다:

    • MongoDB Enterprise 바이너리는 Linux에서 libldap에 대해 링크됩니다.

연결 풀링 동작을 변경하려면 ldapUseConnectionPool 매개변수를 업데이트하십시오.

libldap (예: RHEL에서 실행되는 경우) 에 연결된 MongoDB 4.2 엔터프라이즈 바이너리의 경우 libldap 액세스가 동기화되므로 일부 성능/대기 시간 비용이 발생합니다.

0}에 연결된 MongoDB 4.2 Enterprise 바이너리의 libldap_r 경우 이전 MongoDB 버전과 동작이 변경되지 않습니다.

LDAP 권한 부여를 사용하면 LDAP 서버에서 사용자 생성 및 관리가 이루어집니다. MongoDB를 사용하려면 admin 데이터베이스에 각 역할의 이름이 LDAP 그룹의 고유 이름(DN)과 정확히 일치하는 역할을 생성해야 합니다. 이는 $external 데이터베이스에 사용자를 생성해야 하는 MongoDB 관리형 권한 부여와 대조됩니다.

MongoDB 서버에서 역할을 관리하려면, 역할 관리 권한을 가진admin데이터베이스 역할과 연관된 그룹 멤버인 사용자로 인증해야 합니다. 이는 userAdmin과 같은 역할을 통해 제공됩니다. LDAP 그룹 DN에 해당하는 역할을 생성하거나 업데이트하여 해당 그룹의 구성원이 있는 사용자가 적절한 역할 및 권한을 받을 수 있도록 합니다.

예를 들어, 데이터베이스 관리자용 LDAP 그룹에는 어드민 역할 및 권한이 있는 역할이 있을 수 있습니다. 마케팅 또는 분석 사용자를 위한 LDAP 그룹에는 특정 데이터베이스에서 읽기 권한만 있는 역할이 있을 수 있습니다.

중요

해당 LDAP 그룹에 대한 역할을 구성할 때 해당 그룹의 구성원 자격을 가진 모든 사용자가 구성된 역할 및 권한을 받을 수 있으니 주의하시기 바랍니다. MongoDB 역할, LDAP 그룹 또는 그룹 멤버십을 구성할 때는 최소 권한 원칙을 적용하는 것이 좋습니다.

역할 관리 권한이 있는 역할이 존재하지 않고 이러한 권한이 없는$external 사용자가 존재하지 않으면 LDAP 서버에서 그룹 또는 그룹 멤버십의 추가 또는 변경을 반영하도록 새 역할이나 기존 역할을 변경할 수 없으므로 사실상 사용자 관리를 수행할 수 없습니다.

MongoDB 서버에서 역할을 관리할 수 없는 시나리오를 해결하려면 다음 절차를 수행하세요.

  1. 권한 부여 및 LDAP 인증 없이 MongoDB 서버 다시 시작

  2. 이름이 적절한 LDAP 그룹 고유 이름(Distinguished Name)에 해당하는 admin 데이터베이스에 역할을 만듭니다. 그룹 DN을 선택할 때 데이터베이스 관리에 가장 적합한지 고려하십시오.

  3. 인증 및 LDAP 권한 부여를 통해 MongoDB Server를 다시 시작합니다.

  4. 생성된 관리 역할에 해당하는 그룹 멤버로서 인증합니다.

LDAP를 사용하여 권한을 부여하는 MongoDB 서버는 $external 데이터베이스의 기존 사용자에게 액세스할 수 없습니다. $external데이터베이스에 기존 사용자가 있는 경우 계속 액세스할 수 있도록 하려면 데이터베이스의 각 사용자에 대해 다음 요구 사항$external을 충족해야 합니다:

  • 사용자가 LDAP 서버에 해당 사용자 개체를 가지고 있습니다.

  • 사용자 객체는 적절한 LDAP 그룹의 멤버십을 가지고 있습니다

  • MongoDB는 사용자의 LDAP 그룹을 나타내는 admin 데이터베이스에 역할을 가지고 있으며, 이를 통해 부여된 역할과 권한은$external 이 아닌 사용자에게 부여된 것과 동일합니다.

$external 데이터베이스에 없는 사용자가 액세스할 수 있도록 계속 허용하려면 authenticationMechanisms 매개 변수에 SCRAM-SHA-1 및/또는 SCRAM-SHA-256가 적절하게 포함되어 있는지 확인합니다. 또는 해당 사용자를 LDAP 권한 부여로 전환하기 위해 위에 나열된 요구 사항을 적용합니다.

복제본 세트의 경우, 프라이머리를 구성하기 전에 먼저 세컨더리중재자 멤버에 대한 LDAP 권한 부여를 구성합니다. 이는 샤드 복제본 세트 또는 config 서버 복제본 세트에도 적용됩니다. 한 번에 하나의 복제본 세트 멤버를 설정하여 대다수의 멤버가 쓰기 가용성을 유지하도록 합니다.

샤드 클러스터는 클러스터 수준 사용자를 위해 config 서버 LDAP 권한을 구성해야 합니다. 필요한 경우 각 샤드에서 샤드 로컬 사용자를 위한 LDAP 권한을 구성할 수도 있습니다.

LDAP 권한 부여를 사용하려면 다음 설정을 구성해야 합니다.

운영 체제 라이브러리를 통해 LDAP를 권한 부여에 사용하려면, mongod 또는 mongos 구성 파일에서 특정 설정을 지정해야 합니다.

옵션
설명
필수 사항
security.ldap.servers

따옴표로 묶은 쉼표로 구분된 host[:port] 형식의 LDAP 서버 목록입니다.

LDAP 서버의 접두사 앞에 srv:srv_raw:를 붙일 수 있습니다.

연결 문자열에 "srv:<DNS_NAME>"이 지정되어 있는 경우 mongod는 Active Directory를 지원하는 SRV에 "_ldap._tcp.gc._msdcs.<DNS_NAME>"이 있는지 확인합니다. 이를 찾을 수 없는 경우 mongod는 SRV에 대해 "_ldap._tcp.<DNS_NAME>"이 존재하는지 확인합니다. SRV 레코드를 찾을 수 없는 경우 mongod"srv_raw:<DNS_NAME>"을 대신 사용하라는 경고를 표시합니다.

연결 문자열이 "srv_raw:<DNS_NAME>"을 지정하는 경우 mongod"<DNS NAME>"에 대한 SRV 레코드 조회를 수행합니다.

RFC4515RFC4516 사용자가 속한 LDAP 그룹을 가져오기 위해 MongoDB에서 실행하는 LDAP 형식의 쿼리 URL 템플릿입니다. 쿼리는 servers 에 지정된 하나 이상의 호스트를 기준으로 합니다.

템플릿에서 다음 토큰을 사용할 수 있습니다.

  • {USER}
    인증된 사용자 이름 또는 transformed 사용자 이름을 LDAP 쿼리로 대체합니다.
  • {PROVIDED_USER}
    인증 또는 LDAP 변환 전에 제공된 사용자 이름을 LDAP 쿼리로 대체합니다.

mongod 만 이 매개변수를 지원합니다. mongosconfig서버에 구성된 대로 이 설정을 참조합니다.

LDAP 서버에 연결하고 작업과 쿼리를 실행할 때 MongoDB Server가 바인딩하는 ID입니다.

queryPassword 와 함께 사용하세요.

지정한 사용자는 구성된 queryTemplate에서 생성된 LDAP 쿼리를 지원할 수 있는 적절한 권한이 있어야 합니다.

queryUser 사용 시 LDAP 서버에 바인딩하는 데 사용되는 비밀번호입니다.

mongod 또는 mongos 가 LDAP 서버에 인증하거나 바인드하는 데 사용하는 방법을 지정하는 데 사용됩니다. security.ldap.bind.saslMechanisms에 정의된 SASL 프로토콜 중 하나를 사용하도록 sasl 지정합니다 .

기본값은 simple입니다.

아니요, LDAP 서버에 바인딩하기 위해 sasl 사용하지 않는 한.

2} 또는 mongos 가 LDAP 서버를 인증하거나 mongod 바인딩할 때 사용할 수 있는 SASL 메커니즘을 지정하는 데 사용됩니다. MongoDB와 LDAP 서버는 하나 이상의 SASL 메커니즘에 동의해야 합니다.

기본값은 DIGEST-MD5입니다.

아니요, method sasl로 설정하지 않는 이상, 다른 또는 추가적인 SASL 메커니즘은 필요하지 않습니다.
Windows MongoDB 배포는 LDAP 서버에 연결할 때와 마찬가지로 인증 또는 바인딩을 위해 queryUserqueryPassword 대신 운영 체제 자격 증명을 사용할 수 있습니다.
아니요, queryUser queryPassword대체하지 않는 한.
queryTemplate에 따라, 인증된 클라이언트 사용자 이름을 LDAP 쿼리 URL을 지원하도록 변환할 필요가 있을 수 있습니다. userToDNMapping 를 통해 MongoDB는 들어오는 사용자 이름을 변환할 수 있습니다.
클라이언트 사용자 이름을 LDAP DN으로 변환해야 하는 경우가 아니면 NO입니다.

LDAP 권한 부여을(를) 구성했으면 mongod 또는 mongos 다시 시작해야 합니다. 이제 서버는 X.509, Kerberos 또는 LDAP을 사용하여 클라이언트 연결을 인증합니다.

MongoDB는 를 사용하여 security.ldap.authz.queryTemplate RFC4516 를 생성합니다. 형식이 지정된 LDAP 쿼리 URL입니다. 템플릿에서는 다음 중 하나를 사용할 수 있습니다.

  • {USER} 플레이스홀더를 사용하여 인증된 사용자 이름을 LDAP 쿼리 URL로 대체할 수 있습니다. MongoDB가 userToDNMapping 을 사용하여 사용자 이름을 변환한 경우 MongoDB는 LDAP 쿼리 URL을 구성할 때 {USER} 토큰을 변환된 사용자 이름으로 바꿉니다.

  • {PROVIDED_USER} 인증 또는 LDAP 변환 전에 제공된 사용자 이름은 LDAP 쿼리로 대체하는 자리 표시자입니다.

사용자 그룹을 조회하기 위한 쿼리 템플릿을 디자인하세요.

예제

다음 쿼리 템플릿은 LDAP 사용자 객체의 memberOf 속성에 나열된 모든 그룹을 반환합니다. 이 쿼리는 memberOf 속성이 존재한다고 가정합니다. 특정 LDAP 배포에서는 그룹 멤버십을 추적하는 데 다른 속성이나 방법론을 사용할 수 있습니다. 또한 이 쿼리에서는 사용자가 전체 LDAP DN을 사용자 이름으로 사용하여 인증한다고 가정합니다.

"{USER}?memberOf?base"

LDAP 쿼리 URL은 RFC 에 정의된4516 형식을 준수해야 합니다. :

[ dn [ ? [attributes] [ ? [scope] [ ? [filter] [ ? [Extensions] ] ] ] ] ]

RFC4516에서 인용된 대로 각 구성 요소의 정의를 고려하세요.

은(는)dn RFC4514 에 설명된 문자열 형식을 사용하는 LDAP 고유 이름입니다. . 이는 LDAP 검색의 기본 객체 또는 비검색 작업의 대상을 식별합니다.

attributes 구성은 항목에서 반환해야 하는 특성을 나타내는 데 사용됩니다.

scope 구성은 지정된 LDAP 서버에서 수행할 검색 범위를 지정하는 데 사용됩니다. 허용되는 범위는 기본 객체 검색의 경우 'base', 단일 수준 검색의 경우 'one' 또는 하위 트리 검색의 경우 'sub'입니다.

filter는 검색 중에 지정된 범위 내의 항목에 적용할 검색 필터를 지정하는 데 사용됩니다. 이 형식은 [RFC4515]에 지정되어 있습니다.

extensions 구문은 LDAP URL에 확장성 메커니즘을 제공하여 URL의 기능을 향후 확장할 수 있도록 합니다.

쿼리에 attribute이 포함된 경우 MongoDB는 쿼리가 이 엔터티가 속한 DN을 검색한다고 가정합니다.

쿼리에 속성이 포함되어 있지 않으면 MongoDB는 쿼리가 사용자가 속한 모든 엔터티를 검색한다고 가정합니다.

MongoDB는 현재 LDAP 쿼리에 지정된 모든 확장자를 무시합니다.

중요

RFC4516 또는 LDAP 쿼리 URL 구성에 대한 전체적인 설명은 이 문서의 범위를 벗어납니다.

다음 튜토리얼에는 운영 체제 LDAP 라이브러리를 통해 LDAP 서버에 연결하는 절차가 포함되어 있습니다.

권한 부여에 LDAP를 사용하는 경우 mongosh 를 통해 연결하는 사용자는 다음을 수행해야 합니다.

배포와 관련된 다른 옵션과 함께 MongoDB 서버의 --host--port 를 포함합니다.

예를 들어, 다음 작업은 LDAP 인증 및 권한 부여를 통해 실행 중인 MongoDB Server를 인증합니다.

mongosh --username alice@dba.example.com --password --authenticationDatabase '$external' --authenticationMechanism "PLAIN" --host "mongodb.example.com" --port 27017

--password 명령줄 옵션에 비밀번호를 지정하지 않으면 mongosh 에서 비밀번호를 입력하라는 메시지를 표시합니다.

중요

셸이 $external을 변수로 해석하지 못하도록 하려면 $external 인수를 큰따옴표가 아닌 작은따옴표로 묶어야 합니다.

MongoDB는 LDAP query에서 반환된 각 반환된 그룹 DN(고유 이름)을 admin 데이터베이스의 역할에 매핑합니다.

만약 MongoDB가 DN이 기존 역할의 이름과 정확히 일치하는 그룹을 얻는다면, 인증된 사용자에게 해당 역할과 관련된 권한을 부여합니다. MongoDB가 반환된 그룹 중 어느 것도 역할에 매핑할 수 없다면, 사용자에게는 어떠한 권한도 부여되지 않습니다.

참고

LDAPKerberos 인증은 일반적으로 $external 데이터베이스에 사용자를 만들어야 합니다. 권한 부여에도 LDAP를 사용하는 경우 $external 데이터베이스에서 사용자를 생성할 필요가 없습니다. admin 데이터베이스에서 적절한 역할을 생성하기만 하면 됩니다. 사용자는 여전히 $external 데이터베이스에 대해 인증합니다.

중요

권한 부여에 LDAP를 사용하고 LDAP 그룹 DN에 RFC4514 가 포함된 경우 이스케이프된 시퀀스의 경우 admin 데이터베이스에서 생성하는 역할도 RFC4514 에 따라 이스케이프 처리해야 합니다.

예제

데이터베이스에 다음과 같은 역할이 admin 데이터베이스에 구성되어 있습니다:

{
role: "CN=dba,CN=Users,DC=example,DC=com",
privileges: [],
roles: [ "dbAdminAnyDatabase", "clusterAdmin" ]
}
{
role: "CN=analytics,CN=Users,DC=example,DC=com"
privileges: [],
roles: [
{ role : "read", db : "web_statistics" },
{ role : "read", db : "user_statistics" }
]
}

$external 데이터베이스에 대해 사용자 alice@dba.example.com를 인증한 후 MongoDB 서버는 구성된 query template에서 파생된 쿼리를 수행하여 인증된 사용자를 멤버로 포함하는 그룹을 검색합니다. 이 예제에서 MongoDB 서버는 사용자에 대해 다음 그룹 DN을 검색합니다.

dn:CN=dba,CN=Users,dc=example,dc=com
dn:CN=admin,CN=Users,dc=example,dc=com

MongoDB는 이러한 그룹 DN을 admin 데이터베이스의 역할에 매핑합니다. 첫 번째 그룹 DN은 첫 번째 역할과 일치하며, MongoDB는 인증된 사용자에게 그 역할과 권한을 부여합니다. 두 번째 그룹 DN은 서버의 어떠한 역할과도 일치하지 않으므로, MongoDB는 추가적인 권한을 부여하지 않습니다.

새 사용자 bob@analytics.example.com$external 데이터베이스에 대해 인증합니다. MongoDB 서버는 쿼리 템플릿에 제공된 사용자 이름을 사용하여 쿼리 프로세스를 반복합니다. 이 예제에서 MongoDB 서버는 사용자에 대해 다음 그룹 DN을 검색합니다.

dn:cn=analytics,CN=Users,dc=example,dc=com

MongoDB는 이러한 그룹 DN을 admin 데이터베이스의 역할에 매핑하고 인증된 사용자에게 두 번째 역할의 역할 및 권한을 부여합니다.

새 사용자 workstation@guest.example.com$external 데이터베이스에 대해 인증합니다. MongoDB 서버는 쿼리 템플릿에 제공된 사용자 이름을 사용하여 쿼리 프로세스를 반복합니다. 이 예제에서 MongoDB 서버는 사용자에 대해 다음 그룹 DN을 검색합니다.

dn:cn=guest,CN=Users,dc=example,dc=com

MongoDB는 그룹을 admin 데이터베이스의 역할에 매핑하고, 일치하는 역할이 없기 때문에 사용자에게 추가 권한을 부여하지 않습니다.

← 컬렉션 수준 액세스 제어