OpenLDAP와 함께 자체 관리형 SASL 및 LDAP 를 사용하여 인증
이 페이지의 내용
MongoDB Enterprise는 사용자의 프록시 인증을 지원합니다. 이를 통해 관리자는 인증 요청을 지정된 LDAP(경량 디렉토리 액세스 프로토콜) 서비스로 프록시하여 사용자를 인증하도록 MongoDB 클러스터를 구성할 수 있습니다.
참고
libldap
에 연결된 MongoDB 4.2 엔터프라이즈 바이너리의 경우(예: RHEL에서 실행하는 경우), libldap
에 대한 액세스가 동기화되어 일부 성능/지연 비용이 발생합니다.
0}에 연결된 MongoDB 4.2 Enterprise 바이너리의 libldap_r
경우 이전 MongoDB 버전과 동작이 변경되지 않습니다.
고려 사항
경고
Windows용 MongoDB Enterprise는 saslauthd
를 통한 바인딩을 지원하지 않습니다.
Linux MongoDB 서버는
saslauthd
데몬을 통해 LDAP 서버에 대한 바인딩을 지원합니다.클라이언트와 서버,
saslauthd
서버와 LDAP 서버 간에는 암호화되거나 신뢰할 수 있는 보안 연결을 사용하세요. LDAP 서버는SASL PLAIN
메커니즘을 사용하여 일반 텍스트로 데이터를 보내고 받습니다. VPN과 같은 신뢰할 수 있는 채널, TLS/SSL로 암호화된 연결 또는 신뢰할 수 있는 유선 네트워크만 사용해야 합니다.
구성 saslauthd
사용자 인증을 위한 LDAP 지원을 위해서는 saslauthd
데몬 프로세스와 MongoDB 서버의 적절한 구성이 필요합니다.
캐싱 동작을 조정합니다.
특정 Linux 배포판에서는 인증 자격 증명 캐싱이 활성화된 상태에서 saslauthd
가 시작됩니다. 다시 시작되거나 캐시가 만료될 때까지 saslauthd
는 LDAP 서버에 접속하여 인증 캐시에 있는 사용자를 재인증하지 않습니다. 이렇게 하면 LDAP 서버가 다운되었거나 캐시된 사용자의 자격 증명이 해지된 경우에도 saslauthd
가 캐시에 있는 사용자를 성공적으로 인증할 수 있습니다.
인증 캐시의 만료 시간(초)을 설정하려면 -t 옵션 을 saslauthd
참조하세요. .
OpenLDAP로 LDAP 옵션을 구성합니다.
saslauthd.conf
파일이 없는 경우 파일을 만듭니다. saslauthd.conf
파일은 일반적으로 /etc
폴더에 있습니다. 다른 파일 경로를 지정하는 경우 -O 옵션 을 saslauthd
참조하세요. .
OpenLDAP 서버에 연결하려면 다음 구성 옵션으로 saslauthd.conf
파일을 업데이트하세요.
ldap_servers: <ldap uri> ldap_search_base: <search base> ldap_filter: <filter>
ldap_servers
는 인증에 사용되는 LDAP 서버의 URI를 지정합니다. 일반적으로 로컬 시스템에 설치된 OpenLDAP의 경우 ldap://localhost:389
값을 지정하거나, TLS/SSL을 통한 LDAP를 사용하는 경우 ldaps://localhost:636
값을 지정할 수 있습니다.
ldap_search_base
는 검색의 기준이 되는 고유 이름을 지정합니다. 검색에는 아래의 기준 또는 객체가 포함됩니다.
ldap_filter
는 검색 필터를 지정합니다.
이러한 구성 옵션의 값은 테스트에 특정한 값과 일치해야 합니다. 예를 들어 이메일을 필터링하려면 ldap_filter: (mail=%n)
을 대신 지정합니다.
OpenLDAP 예시
OpenLDAP용 샘플 saslauthd.conf
파일에는 다음 내용이 포함되어 있습니다:
ldap_servers: ldaps://ad.example.net ldap_search_base: ou=Users,dc=example,dc=com ldap_filter: (uid=%u)
이 샘플 OpenLDAP 구성을 사용하려면 uid
속성(로그인 이름)으로 사용자를 생성하고 도메인 구성 요소(dc
) example
및 com
아래의 Users
조직 단위(ou
) 아래에 배치합니다.
구성에 대한 자세한 내용은 saslauthd
http://www.openldap.org/doc/admin24/guide.html#Configuringsaslauthd 를 참조하세요. .
saslauthd
구성을 테스트합니다.
testsaslauthd
유틸리티를 사용하여 saslauthd
구성을 테스트합니다. 예시:
testsaslauthd -u testuser -p testpassword -f /var/run/saslauthd/mux
0: OK "Success"
: 인증에 성공했음을 나타냅니다.0: NO "authentication failed"
: 사용자 이름, 비밀번호 또는 구성 오류를 나타냅니다.
호스트 운영 체제의 saslauthd
디렉토리 위치를 기준으로 파일 경로를 수정합니다.
중요
security.sasl.saslauthdSocketPath
또는 --setParameter saslauthdPath
로 지정된 saslauthd
Unix 도메인 소켓 파일의 상위 디렉토리는 다음 대상에 대해 읽기 및 실행(r-x
) 권한을 부여해야 합니다.
mongod
또는 mongos
는 saslauthd
디렉토리 및 해당 콘텐츠에 대해 지정된 권한이 없으면 saslauthd
를 통해 인증할 수 없습니다.
MongoDB 구성
인증을 위해 MongoDB에 사용자를 추가합니다.
MongoDB의 $external
데이터베이스에 사용자를 추가합니다. 사용자의 권한을 지정하려면 사용자에게 역할을 할당합니다.
2} 인증 사용자(Kerberos, LDAP 또는 x.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장을 사용하려면 사용자 이름이 10KB보다 클 수 없습니다. $external
예를 들어 다음은 records
데이터베이스에 대한 읽기 전용 액세스 권한이 있는 사용자를 추가합니다.
db.getSiblingDB("$external").createUser( { user : <username>, roles: [ { role: "read", db: "records" } ] } )
필요에 따라 주체(principals)를 추가합니다. 사용자 생성 및 관리에 대한 자세한 내용은 사용자 관리 명령을 참조하세요.
MongoDB 서버를 구성합니다.
프록시 인증에 saslauthd
인스턴스를 사용하도록 MongoDB 서버를 구성하려면 mongod
를 시작할 때 다음 옵션을 포함하세요:
--auth
명령줄 옵션 또는security.authorization
설정,authenticationMechanisms
매개 변수가PLAIN
으로 설정되었습니다,saslauthdPath
매개 변수가saslauthd
인스턴스의 Unix 도메인 소켓 경로로 설정되어 있습니다.중요
security.sasl.saslauthdSocketPath
또는--setParameter saslauthdPath
로 지정된saslauthd
Unix 도메인 소켓 파일의 상위 디렉토리에 다음 대상에 대해 읽기 및 실행(r-x
) 권한을 부여해야 합니다:mongod
또는mongos
는saslauthd
디렉토리 및 해당 콘텐츠에 대해 지정된 권한이 없으면saslauthd
를 통해 인증할 수 없습니다.
authorization
옵션을 사용하여 인증을 적용하는 경우 사용자를 만들려면 권한이 필요합니다.
특정 saslauthd
소켓 경로를 사용합니다.
소켓 경로가 /<some>/<path>/saslauthd
인 경우 다음 명령줄 예시에서와 같이 saslauthdPath
를 /<some>/<path>/saslauthd/mux
로 설정합니다:
mongod --auth --setParameter saslauthdPath=/<some>/<path>/saslauthd/mux --setParameter authenticationMechanisms=PLAIN
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 구성원이 다른 호스트에서 실행되도록 하려면 --bind_ip
를 지정합니다.
또는 YAML 형식의 구성 파일을 사용하는 경우 파일에 다음 설정을 지정합니다:
security: authorization: enabled setParameter: saslauthdPath: /<some>/<path>/saslauthd/mux authenticationMechanisms: PLAIN
auth=true setParameter=saslauthdPath=/<some>/<path>/saslauthd/mux setParameter=authenticationMechanisms=PLAIN
기본 Unix 도메인 소켓 경로를 사용합니다.
기본 Unix 도메인 소켓 경로를 사용하려면 다음 명령줄 예제에서와 같이 saslauthdPath
를 빈 문자열 ""
으로 설정합니다:
mongod --auth --setParameter saslauthdPath="" --setParameter authenticationMechanisms=PLAIN
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 구성원이 다른 호스트에서 실행되도록 하려면 --bind_ip
를 지정합니다.
또는 YAML 형식의 구성 파일을 사용하는 경우 파일에 다음 설정을 지정합니다:
security: authorization: enabled setParameter: saslauthdPath: "" authenticationMechanisms: PLAIN
auth=true setParameter=saslauthdPath="" setParameter=authenticationMechanisms=PLAIN
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트가 배포에 연결하거나 배포 멤버가 다른 호스트에서 실행되도록 하려면 net.bindIp
설정을 지정하세요.
mongosh
에서 사용자를 인증합니다.
연결 중 명령줄에서 인증하거나 먼저 연결한 다음 db.auth()
메서드를 사용하여 인증할 수 있습니다.
mongosh
으로 연결할 때 인증하려면 다음 명령줄 옵션으로 <host>
및 <user>
을(를) 대체하여 mongosh
를 실행하고 메시지가 표시되면 비밀번호를 입력합니다.
mongosh --host <host> --authenticationMechanism PLAIN --authenticationDatabase '$external' -u <user> -p
또는 자격 증명을 제공하지 않고 연결한 다음 $external
데이터베이스에서 db.auth()
메서드를 호출합니다. mechanism
필드에 "PLAIN"
값을 지정하고, user
및 pwd
필드에 각각 사용자 및 비밀번호를 지정합니다. 다음 예와 같이 서버가 saslauthd
로 전달하려면 다이제스트되지 않은 비밀번호를 수신해야 하므로 기본값 digestPassword
값(false
)을 사용합니다.
팁
메서드/명령 호출에서 암호를 직접 지정하는 대신 passwordPrompt()
메서드를 다양한 사용자 인증/관리 메서드/명령과 함께 사용하여 암호를 묻는 메시지를 표시할 수 있습니다. 그러나 이전 버전의 mongo
shell에서와 마찬가지로 비밀번호를 직접 지정할 수도 있습니다.
db.getSiblingDB("$external").auth( { mechanism: "PLAIN", user: <username>, pwd: passwordPrompt() // or cleartext password } )
메시지가 표시되면 비밀번호를 입력합니다.
서버는 일반 텍스트로 비밀번호를 전달합니다. 일반적으로 신뢰할 수 있는 채널(VPN, TLS/SSL, 신뢰할 수 있는 유선 네트워크)에서만 사용하세요. 고려 사항을 참조하세요.