ActiveDirectory와 함께 자체 관리형 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
참조하세요. .
ActiveDirectory로 LDAP 옵션을 구성합니다.
saslauthd.conf
파일이 없는 경우 파일을 만듭니다. saslauthd.conf
파일은 일반적으로 /etc
폴더에 있습니다. 다른 파일 경로를 지정하는 경우 -O 옵션 을 saslauthd
참조하세요. .
ActiveDirectory와 함께 사용하려면 saslauthd.conf
파일에 설정된 다음 구성 옵션을 사용하여 saslauthd
를 시작합니다.
ldap_servers: <ldap uri> ldap_use_sasl: yes ldap_mech: DIGEST-MD5 ldap_auth_method: fastbind
<ldap uri>
에 대해 LDAP 서버의 URL을 지정합니다. 예시: ldap_servers: ldaps://ad.example.net
구성에 대한 자세한 내용은 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
데이터베이스에 사용자를 추가합니다. 사용자의 권한을 지정하려면 사용자에게 역할을 할당합니다.
$external
인증 사용자(Kerberos, LDAP 또는 x.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장 을 사용하려면 사용자 이름이 10k 바이트를 초과할 수 없습니다.
예를 들어 다음은 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, 신뢰할 수 있는 유선 네트워크)에서만 사용하세요. 고려 사항을 참조하세요.