Kerberos 인증 및 Active Directory 권한 부여로 자체 관리 MongoDB 구성하기
MongoDB Enterprise 는 인증된 사용자가 속한 LDAP 그룹에 대한 LDAP 서버 쿼리를 지원합니다. MongoDB 는 반환된 각 그룹 의 LDAP 고유 이름(DN)을 admin
데이터베이스 의 역할 에 매핑합니다. MongoDB 는 매핑된 역할 및 관련 권한을 기반으로 사용자에게 권한을 부여합니다. 자세한 내용은 LDAP 권한 부여 를 참조하세요.
MongoDB Enterprise는 Kerberos 서비스를 사용한 인증을 지원합니다. Kerberos는 대규모 클라이언트/서버 시스템을 위한 업계 표준 인증 프로토콜입니다.
이 튜토리얼에서는 플랫폼 라이브러리를 통해 Kerberos 서버를 통한 인증과 AD(Active Directory) 서버를 통한 권한 부여를 수행하도록 MongoDB를 구성하는 방법을 설명합니다.
전제 조건
중요
계속 진행하기 전에 다음 주제를 철저히 숙지합니다.
AD 에 대한 전체 설명은 이 튜토리얼의 범위를 벗어납니다. 이 튜토리얼에서는 AD 에 대한 사전 지식이 있다고 가정합니다.
MongoDB는 MongoDB 서버와 AD 간의 바인딩에 SASL 메커니즘 사용을 지원합니다. SASL, SASL 메커니즘에 대한 전체 설명 또는 특정 SASL 메커니즘에 대한 특정 AD 구성 요구 사항은 이 튜토리얼의 범위를 벗어납니다. 이 튜토리얼은 SASL 및 관련 주제에 대한 사전 지식이 있다고 가정합니다.
Kerberos 배포 설정 및 구성은 이 문서의 범위를 벗어납니다. 이 튜토리얼에서는 MongoDB 배포에서 각 mongod
및 mongos
인스턴스에 대해 Kerberos 서비스 주체를 구성했으며 각 mongod
및 mongos
인스턴스에 대해 유효한 keytab 파일을 가지고 있다고 가정합니다.
복제본 세트 및 샤딩된 클러스터의 경우, 구성에서 IP 주소나 정규화되지 않은 호스트 이름 대신 FQDN(정규화된 도메인 이름)을 사용해야 합니다. Kerberos 영역을 올바르게 확인하고 연결할 수 있도록 하려면 GSSAPI용 FQDN을 사용해야 합니다.
MongoDB 엔터프라이즈를 사용하고 있는지 확인하려면 --version
명령줄 옵션을 mongod
또는 mongos
에 전달합니다.
mongod --version
이 명령의 출력에서 modules:
subscription
또는 modules: enterprise
문자열을 찾아 MongoDB Enterprise 바이너리를 사용하고 있는지 확인합니다.
고려 사항
이 튜토리얼에서는 Kerberos 인증 및 AD 권한 부여를 위해 MongoDB를 구성하는 방법을 설명합니다.
자체 MongoDB Server에서 이 절차를 수행하려면 자체 특정 인프라, 특히 Kerberos 구성, AD 쿼리 구성 또는 사용자 관리와 관련하여 지정된 절차를 수정해야 합니다.
전송 계층 보안
기본적으로 MongoDB는 AD 서버에 바인딩할 때 TLS/SSL 연결을 생성합니다. 이를 위해서는 MongoDB Server의 호스트가 AD 서버의 인증 기관(CA) 인증서에 액세스할 수 있도록 구성해야 합니다.
이 튜토리얼에서는 필요한 호스트 구성에 대한 지침을 제공합니다.
이 튜토리얼에서는 사용자가 AD 서버의 CA 인증서에 액세스할 수 있고 MongoDB 서버에 인증서 복사본을 만들 수 있다고 가정합니다.
Active Directory 스키마 예시
이 튜토리얼에서는 다음 예제 AD 객체를 제공된 쿼리, 구성 및 출력의 기반으로 사용합니다. 각 객체는 가능한 속성의 하위 집합만 표시합니다.
사용자 객체
dn:CN=bob,CN=Users,DC=marketing,DC=example,DC=com userPrincipalName: bob@marketing.example.com memberOf: CN=marketing,CN=Users,DC=example,DC=com dn:CN=alice,CN=Users,DC=engineering,DC=example,DC=com userPrincipalName: alice@engineering.example.com memberOf: CN=web,CN=Users,DC=example,DC=com memberOf: CN=PrimaryApplication,CN=Users,DC=example,DC=com dn:CN=sam,CN=Users,DC=dba,DC=example,DC=com userPrincipalName: sam@dba.example.com memberOf: CN=dba,CN=Users,DC=example,DC=com memberOf: CN=PrimaryApplication,CN=Users,DC=example,DC=com dn:CN=joe,CN=Users,DC=analytics,DC=example,DC=com userPrincipalName: joe@analytics.example.com memberof: CN=marketing,CN=Users,DC=example,DC=com
객체 그룹화
dn:CN=marketing,CN=Users,DC=example,DC=com member:CN=bob,CN=Users,DC=marketing,DC=example,DC=com member:CN=joe,CN=Users,DC=analytics,DC=example,DC=com dn:CN=engineering,CN=Users,DC=example,DC=com member:CN=web,CN=Users,DC=example,DC=com member:CN=dba,CN=users,DC=example,DC=com dn:CN=web,CN=Users,DC=example,DC=com member:CN=alice,CN=Users,DC=engineering,DC=example,DC=com dn:CN=dba,CN=Users,DC=example,DC=com member:CN=sam,CN=Users,DC=dba,DC=example,DC=com dn:CN=PrimaryApplication,CN=Users,DC=example,DC=com member:CN=sam,CN=Users,DC=dba,DC=example,DC=com member:CN=alice,CN=Users,DC=engineering,DC=example,DC=com
액티브 디렉토리 자격 증명
이 튜토리얼에서는 사용자 이름과 비밀번호를 사용하여 AD 서버에서 쿼리를 수행합니다. 제공된 자격 증명에는 security.ldap.userToDNMapping
또는 security.ldap.authz.queryTemplate
와 관련된 쿼리를 지원하기 위한 AD 서버에 대한 충분한 권한이 있어야 합니다.
복제본 세트
MongoDB LDAP 권한 부여를 받으려면 복제본 세트의 모든 mongod
가 최소한 MongoDB 3.4.0 이상에 있어야 합니다.
샤딩된 클러스터
MongoDB LDAP 권한 부여를 위해서는 샤딩된 클러스터의 모든 mongod
및 mongos
가 최소한 MongoDB 3.4.0 이상이어야 합니다.
절차
MongoDB를 실행하는 서버에 TLS/SSL을 구성합니다.
TLS/SSL을 통해 AD (AD) 서버에 연결하려면 mongod
또는 mongos
이(가) AD 서버의 인증 기관(CA) 인증서에 액세스해야 합니다.
Linux에서는 ldap.conf
파일의 TLS_CACERT
또는 TLS_CACERTDIR
옵션을 통해 AD 서버의 CA 인증서를 지정합니다.
플랫폼의 패키지 관리자는 MongoDB Enterprise의 libldap
종속성을 설치하는 동안 ldap.conf
파일을 생성합니다. 구성 파일 또는 참조된 옵션에 대한 전체 문서를 확인하려면 ldap.conf를 참조하세요.
Microsoft Windows 에서는 플랫폼의 자격 증명 관리 도구를 사용하여 AD 서버의 인증 기관(CA) 인증서를 로드합니다. 정확한 자격 증명 관리 도구는 Windows 버전에 따라 다릅니다. 이 도구를 사용하려면 사용 중인 Windows 버전에 대한 설명서를 참조하세요.
mongod
또는 mongos
가 AD CA 파일에 액세스할 수 없는 경우, Active Directory 서버에 대한 TLS/SSL 연결을 생성할 수 없습니다.
선택적으로 TLS/SSL을 비활성화하려면 security.ldap.transportSecurity
를 none
으로 설정합니다.
경고
transportSecurity
를 none
로 설정하면 MongoDB와 AD 서버 간에 사용자 자격 증명을 포함한 일반 텍스트 정보가 전송됩니다.
(Windows만 해당) MongoDB Windows 서비스에 서비스 주체 이름을 할당합니다.
Windows 운영 체제에서 실행되는 MongoDB 서버의 경우, 다음을 사용해야 합니다. MongoDB 서비스를 실행하는 계정에 SPN(서비스 주체 이름)을 할당합니다.
setspn.exe -S <service>/<fully qualified domain name> <service account name>
예시
예를 들어, mongod
가 서비스 계정 이름 mongodb_dev@example.com
를 사용하여 mongodbserver.example.com
에서 mongodb
라는 서비스로 실행되는 경우 SPN을 할당하는 명령은 다음과 같습니다.
setspn.exe -S mongodb/mongodbserver.example.com mongodb_dev@example.com
참고
Windows MongoDB Server 2003 는 setspn.exe -S
을(를) 지원하지 않습니다. 에 대한 전체 문서는 setspn.exe
setspn.exe 를 참조하세요. .
(Linux만 해당) MongoDB 서버용 keytab 파일을 만듭니다.
Linux 플랫폼에서 실행되는 MongoDB 서버의 경우 해당 서버에서 실행 중인 MongoDB 인스턴스와 관련된 keytab 파일의 복사본이 있는지 확인해야 합니다.
반드시 MongoDB 서비스를 실행하는 Linux 사용자에게 키탭 파일 읽기 권한을 부여해야 합니다. 키탭 파일 위치의 전체 경로를 기록해 두세요.
MongoDB 서버에 연결합니다.
--host
및 --port
옵션을 통해 mongosh
(을)를 사용해 MongoDB 서버에 연결합니다.
mongosh --host <hostname> --port <port>
현재 MongoDB 서버가 인증을 시행하는 경우 userAdmin
또는 userAdminAnyDatabase
에서 제공하는 것과 같은 역할 관리 권한이 있는 사용자로 admin
데이터베이스에 인증해야 합니다. MongoDB 서버의 구성된 인증 메커니즘에 적합한 --authenticationMechanism
을 포함하세요.
mongosh --host <hostname> --port <port> --username <user> --password <pass> --authenticationDatabase="admin" --authenticationMechanism="<mechanism>"
사용자 관리 역할을 만듭니다.
AD 를 사용하여 MongoDB 사용자를 관리하려면 userAdmin
또는 userAdminAnyDatabase
에서제공하는 역할과 같이 역할을 생성하고 관리할 수 있는 admin
데이터베이스에 역할을 하나 이상 생성해야 합니다.
역할의 이름은 AD 그룹의 고유 이름과 정확히 일치해야 합니다. 이 그룹에는 AD 사용자가 한 명 이상 있어야 합니다.
사용 가능한 Active Directory 그룹이 주어지면 다음 작업이 수행됩니다.
AD 그룹
CN=dba,CN=Users,DC=example,DC=com
에 해당하는 역할을 생성합니다.admin
데이터베이스에서userAdminAnyDatabase
역할을 할당합니다.
var admin = db.getSiblingDB("admin") admin.createRole( { role: "CN=dba,CN=Users,DC=example,DC=com", privileges: [], roles: [ "userAdminAnyDatabase" ] } )
사용자가 사용자 관리자 권한을 가져야 하는 각 데이터베이스에 userAdmin
역할을 부여할 수도 있습니다. 이러한 역할은 역할 생성 및 관리에 필요한 권한을 제공합니다.
중요
최소 권한 원칙 적용 고려 MongoDB 역할, AD 그룹 또는 그룹 멤버십을 구성할 때 사용합니다.
MongoDB 구성 파일을 생성합니다.
MongoDB 구성 파일은 파일 확장자가 .conf
인 일반 텍스트 YAML 파일입니다.
기존 MongoDB 배포를 업그레이드하는 경우 현재 구성 파일을 복사하고 해당 복사본에서 작업하세요.
(Linux만 해당) 신규 배포이고 플랫폼의 패키지 관리자를 사용하여 MongoDB Enterprise를 설치한 경우, 설치에는
/etc/mongod.conf
기본값 구성 파일이 포함됩니다. 해당 기본값 구성 파일을 사용하거나 해당 파일의 복사본을 만들어 작업할 수 있습니다.해당 파일이 없는 경우 확장자가
.conf
인 빈 파일을 만들고 새 구성 파일에서 작업합니다.
Active Directory에 연결하도록 MongoDB를 구성합니다.
MongoDB 구성 파일에서 security.ldap.servers
를 AD 서버의 호스트 및 포트로 설정합니다. AD 인프라에 복제 목적의 여러 AD 서버가 포함된 경우 서버의 호스트와 포트를 쉼표로 구분된 목록으로 security.ldap.servers
지정하세요.
예시
activedirectory.example.net
에 있는 AD 서버에 연결하려면 구성 파일에 다음을 포함합니다.
security: ldap: servers: "activedirectory.example.net"
쿼리를 수행하려면 MongoDB가 AD 서버에 바인딩되어야 합니다. 기본적으로 MongoDB는 간단한 인증 메커니즘을 사용하여 AD 서버에 자체적으로 바인딩합니다.
또는 구성 파일에서 다음 설정을 구성하여 SASL
를 사용하여 AD 서버에 바인딩할 수 있습니다.
security.ldap.bind.method
를sasl
로 설정합니다.security.ldap.bind.saslMechanisms
, AD 서버가 지원하는 쉼표로 구분된 SASL 메커니즘 문자열을 지정합니다.
이 튜토리얼에서는 기본값 simple
LDAP 인증 메커니즘을 사용합니다.
Kerberos 인증을 위한 MongoDB를 구성합니다.
MongoDB 구성 파일에서 security.authorization
을 enabled
로, setParameter
authenticationMechanisms
를 GSSAPI
로 설정합니다.
Kerberos를 통한 인증을 사용하려면 구성 파일에 다음을 포함하세요.
security: authorization: "enabled" setParameter: authenticationMechanisms: "GSSAPI"
권한 부여를 위한 LDAP 쿼리 템플릿을 구성합니다.
MongoDB 구성 파일에서 security.ldap.authz.queryTemplate
을 RFC4516 형식의 LDAP 쿼리 URL 템플릿으로 설정합니다.
템플릿에서는 다음 중 하나를 사용할 수 있습니다.
{USER}
플레이스홀더를 사용하여 인증된 사용자 이름을 LDAP 쿼리 URL로 대체할 수 있습니다.{PROVIDED_USER}
인증 또는 LDAP 변환 전에 제공된 사용자 이름은 LDAP 쿼리로 대체하는 자리 표시자입니다.
사용자 그룹을 조회하기 위한 쿼리 템플릿을 디자인하세요.
참고
RFC4515 에 대한 전체 설명 , RFC4516 또는 AD 쿼리는 이 튜토리얼의 범위를 벗어납니다. 이 튜토리얼에서 제공하는 queryTemplate
는 예시일 뿐이며 특정 AD 배포서버에는 적용되지 않을 수 있습니다.
예시
다음 쿼리 템플릿은 재귀 그룹 멤버십에 따라 {USER}
을(를) 멤버로 나열하는 모든 그룹을 반환합니다. 이 LDAP 쿼리는 그룹 객체가 member
속성을 사용하여 전체 사용자 DN(고유 이름)을 저장하여 사용자 멤버십을 추적한다고 가정합니다. 쿼리에는 1.2.840.113556.1.4.1941
LDAP_MATCHING_RULE_IN_CHAIN 에 대한 AD 특정 일치 규칙 OID 가 포함됩니다. . 이 일치 규칙은 LDAP Atlas Search 필터에 대한 AD 특정 확장입니다.
security: ldap: authz: queryTemplate: "DC=example,DC=com??sub?(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={USER}))"
MongoDB는 쿼리 템플릿을 사용하여 {USER}
를 인증된 사용자 이름으로 대체하여 LDAP 서버를 쿼리합니다.
예를 들어 사용자가 CN=sam,CN=Users,DC=dba,DC=example,DC=com
으로 인증합니다. MongoDB는 queryTemplate
기반으로 LDAP 쿼리를 생성하고, {USER}
토큰을 인증된 사용자 이름으로 대체합니다. Active Directory 서버는 사용자를 구성원으로 직접 또는 전이적으로 나열하는 모든 그룹에 대해 재귀적 그룹 조회를 수행합니다. Active Directory 그룹 을 기반으로 AD 서버는 CN=dba,CN=Users,DC=example,DC=com
및 CN=engineering,CN=Users,DC=example,DC=com
를 반환합니다.
MongoDB는 반환된 각 그룹 DN 을 admin
데이터베이스의 역할에 매핑합니다. 매핑된 각 그룹 DN 에 대해 admin
데이터베이스에 이름이 정확히 DN 과 일치하는 기존 역할이 있는 경우 MongoDB는 사용자에게 해당 역할에 할당된 역할 및 권한을 부여합니다.
매칭 규칙 LDAP_MATCHING_RULE_IN_CHAIN
에서는 인증 사용자의 전체 고유 이름 을 제공해야 합니다. Kerberos를 userPrincipalName
사용하려면 사용자의 으로 인증해야 하므로 을 사용하여 들어오는 사용자 이름을 DN 으로 security.ldap.userToDNMapping
변환해야 합니다. 다음 단계에서는 수신 사용자 이름을 queryTemplate
을 지원하도록 변환하는 방법에 대한 지침을 제공합니다.
들어오는 사용자 이름을 Active Directory를 통해 인증하도록 변환합니다.
MongoDB 구성 파일에서 설정하여 userToDNMapping
인증 사용자가 제공한 사용자 이름을 을 지원하는 AD 고유 queryTemplate
이름으로 변환합니다.
예시
다음 userToDNMapping
구성은 match
정규 표현식 필터를 사용하여 제공된 사용자 이름을 캡처합니다. MongoDB는 쿼리를 실행하기 전에 캡처된 사용자 이름을 ldapQuery
쿼리 템플릿에 삽입합니다.
security: ldap: userToDNMapping: '[ { match : "(.+)", ldapQuery: "DC=example,DC=com??sub?(userPrincipalName={0})" } ]'
배포서버와 일치하도록 지정된 샘플 구성을 수정해야 합니다. 예를 들어, ldapQuery
기본 고유 이름 은 사용자 엔터티가 포함된 기본 고유 이름 과 일치해야 합니다. AD 배포를 지원하기 위해 다른 수정이 필요할 수 있습니다.
예시
사용자가 alice@ENGINEERING.EXAMPLE.COM
으로 인증합니다. MongoDB는 먼저 userToDNMapping
에 지정된 모든 변환을 적용합니다. MongoDB는 제공된 구성에 따라 match
단계에서 사용자 이름을 캡처하고 LDAP 쿼리를 실행합니다.
DC=example,DC=com??sub?(userPrincipalName=alice@ENGINEERING.EXAMPLE.COM)
구성된 Active Directory 사용자 에 따라 AD 서버는 CN=alice,CN=Users,DC=engineering,DC=example,DC=com
를 반환해야 합니다.
그런 다음 MongoDB는 queryTemplate
에 구성된 LDAP 쿼리를 실행하여 {USER}
토큰을 변환된 사용자 이름 CN=alice,CN=Users,DC=engineering,DC=example,DC=com
으로 바꿉니다.
중요
userToDNMapping
의 substitution
매개 변수를 사용하여 그룹 이름을 변환하는 경우 대체 결과는 반드시 RFC4514 이스케이프된 문자열이어야 합니다.
쿼리 자격 증명을 구성합니다.
MongoDB는 AD 서버에서 쿼리를 수행하려면 자격 증명이 필요합니다.
구성 파일에서 다음 설정을 구성합니다.
, AD
security.ldap.bind.queryUser
서버에서 쿼리를 수행하기mongos
위해 또는mongod
바인드하는 Kerberos 사용자를 지정합니다.security.ldap.bind.queryPassword
를 통해 지정된queryUser
의 비밀번호를 지정합니다.
security: ldap: bind: queryUser: "mongodbadmin@dba.example.com" queryPassword: "secret123"
Windows MongoDB Server에서는 security.ldap.bind.useOSDefaults
를 true
로 설정하여 queryUser
및 queryPassword
대신 OS 사용자의 자격 증명을 사용할 수 있습니다.
queryUser
에는 MongoDB를 대신하여 모든 LDAP 쿼리를 수행할 수 있는 권한이 있어야 합니다.
선택 사항: 추가 구성 설정을 추가합니다.
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트가 배포에 연결하거나 배포 멤버가 다른 호스트에서 실행되도록 하려면 net.bindIp
설정을 지정하세요.
Kerberos 인증 및 액티브 디렉토리 권한 부여로 MongoDB 서버 시작하기
이 절차 중에 생성된 구성 파일의 경로를 지정하여 --config
옵션으로 MongoDB 서버를 시작합니다. 현재 MongoDB 서버가 실행 중인 경우 서버를 중지할 수 있도록 적절한 준비를 합니다.
Linux MongoDB Servers
Linux에서는 MongoDB 서버의 keytab 파일 경로를 지정하여 KRB5_KTNAME
환경 변수를 지정해야 합니다.
env KRB5_KTNAME <path-to-keytab> mongod --config <path-to-config-file>
Microsoft Windows MongoDB Servers
Windows 에서는 절차의 앞부분에서 구성된 대로 MongoDB Server를 서비스 주체 계정으로 시작해야 합니다.
mongod.exe --config <path-to-config-file>
MongoDB 서버에 연결합니다.
MongoDB 서버에 연결하여 직접 또는 전이적 그룹 멤버십이 userAdmin
과 userAdminAnyDatabase
가 있는 admin
데이터베이스의 MongoDB 역할 또는 이와 동등한 권한이 있는 사용자 지정 역할에 해당하는 사용자로 인증합니다.
mongosh
를 사용하여 MongoDB 서버에 인증하고 다음 옵션을 설정합니다.
--host
를 MongoDB 서버의 호스트 이름으로 사용--port
를 MongoDB 서버의 포트로 사용--username
사용자의userPrincipalName
--password
로 사용자의 비밀번호를 설정합니다(또는 생략하여 비밀번호를 묻는mongosh
프롬프트 표시).--authenticationMechanism
to"GSSAPI"
--authenticationDatabase
to"$external"
예시
이 절차의 이전 단계에서는 필요한 권한으로 admin
데이터베이스에서 dn:CN=dba,CN=Users,DC=example,DC=com
역할을 구성했습니다. 이 역할은 AD 그룹에 해당합니다. 구성된 AD 사용자 를 기반으로 sam@dba.example.com
사용자로 인증하고 필요한 권한을 받을 수 있습니다.
mongosh --username sam@DBA.EXAMPLE.COM --password --authenticationMechanisms="GSSAPI" --authenticationDatabase "$external" --host <hostname> --port <port>
Windows MongoDB 배포에서는mongosh
대신 mongo.exe
를 사용해야 합니다
구성된 활성화 디렉토리 사용자가 주어지면 사용자는 성공적으로 인증되고 적절한 권한을 받습니다.
참고
기존 비$external
사용자로 인증하려면 --authenticationMechanism
SCRAM 인증 메커니즘으로 설정하세요(예: SCRAM-SHA-1
또는 SCRAM-SHA-256
). 이를 위해서는 MongoDB 서버의 setParameter
authenticationMechanisms
에 SCRAM-SHA-1
및/또는 SCRAM-SHA-256
가 적절하게 포함되어야 합니다.
반환된 AD 그룹을 매핑하기 위한역할을 만듭니다.
MongoDB 권한 부여에 사용하려는 AD 서버의 각 그룹에 대해 MongoDB 서버의 admin
데이터베이스에서 일치하는 역할을 생성해야 합니다.
예시
다음 작업에서는 AD 그룹 DN CN=PrimaryApplication,CN=Users,DC=example,DC=com
의 이름을 딴 역할을 생성하고 해당 그룹에 적절한 역할 및 권한을 할당합니다.
db.getSiblingDB("admin").createRole( { role: "CN=PrimaryApplication,CN=Users,DC=example,DC=com", privileges: [], roles: [ { role: "readWrite", db: "PrimaryApplication" } ] } )
구성된 Active Directory 그룹이 주어지면 MongoDB는 sam@DBA.EXAMPLE.COM
또는 alice@ENGINEERING.EXAMPLE.COM
중 하나로 인증하는 사용자에게 PrimaryApplication
데이터베이스의readWrite
역할을 부여합니다.
참고
admin
데이터베이스에서 역할을 관리하려면 admin
, userAdminAnyDatabase
에서 userAdmin
을 가진 사용자로 인증되었거나 동등한 권한이 있는 사용자 지정 역할이 켜져 있어야 합니다.
선택 사항: 기존 사용자를 에서 $external
Active Directory 서버 로 전환합니다.
$external
데이터베이스에 구성된 사용자 로 기존 설치를 업그레이드하는 경우 Kerberos 인증 및 AD 권한 부여를 위해 MongoDB를 구성한 후 각 사용자가 액세스할 수 있도록 다음 요구 사항을 충족해야 합니다.
사용자는 AD 서버에 해당 사용자 객체가 있습니다.
사용자는 AD 서버에서 적절한 그룹의 멤버십이 있습니다.
MongoDB에는 사용자의 AD 그룹에 따라 명명된
admin
데이터베이스에 대한 역할이 포함되어 있으므로 권한이 부여된 사용자가 해당 권한을 유지할 수 있습니다.
예시
$external
데이터베이스에 다음 사용자가 있습니다.
{ user : "joe@ANALYTICS.EXAMPLE.COM", roles: [ { role : "read", db : "web_analytics" }, { role : "read", db : "PrimaryApplication" } ] }
사용자가 AD 그룹 CN=marketing,CN=Users,DC=example,DC=com
에 속해 있다고 가정하면 다음 작업은 적절한 권한을 가진 일치하는 역할을 생성합니다.
db.getSiblingDB("admin").createRole( { role: "CN=marketing,CN=Users,DC=example,DC=com", privileges: [], roles: [ { role: "read", db: "web_analytics" } { role: "read", db: "PrimaryApplication" } ] } )
구성된 queryTemplate
에 따라 MongoDB는 CN=marketing,CN=Users,DC=example,DC=com
그룹에 직접 또는 전이 멤버십이 있는 모든 사용자에게 web_analytics
및 PrimaryApplication
데이터베이스에서 read
작업을 수행할 수 있는 권한을 부여합니다.
중요
해당 AD 그룹의 역할을 구성할 때는 해당 그룹의 멤버십이 있는 모든 사용자가 할당된 역할과 권한을 받을 수 있다는 점을 기억하세요. 최소 권한 원칙 적용 고려 MongoDB 역할, AD 그룹 또는 그룹 멤버십을 구성할 때 사용합니다.
$external
이 아닌 데이터베이스의 사용자가 MongoDB에 액세스하도록 계속 허용하려면 setParameter
authenticationMechanisms
구성 옵션에 SCRAM 인증 메커니즘(예: SCRAM-SHA-1
및/또는 SCRAM-SHA-256
)을 포함해야 합니다.
setParameter: authenticationMechanisms: "GSSAPI,SCRAM-SHA-1,SCRAM-SHA-256"
또는 위의 절차에 따라$external
가 아닌 사용자를 AD 로 전환합니다.
이 절차를 수행하면 다음 구성 파일이 생성됩니다.
security: authorization: "enabled" ldap: servers: activedirectory.example.net" bind: queryUser: "mongodbadmin@dba.example.com" queryPassword: "secret123" userToDNMapping: '[ { match: "(.+)" ldapQuery: "DC=example,DC=com??sub?(userPrincipalName={0})" } ]' authz: queryTemplate: "DC=example,DC=com??sub?(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={USER}))" setParameter: authenticationMechanisms: "GSSAPI"
중요
지정된 샘플 구성을 AD 스키마, 디렉토리 구조 및 구성에 맞게 수정해야 합니다. 배포서버를 위한 추가 구성 파일 옵션 이 필요할 수도 있습니다.
역할 및 권한 구성에 대한 자세한 내용은 다음을 참조하세요.
테스트 및 검증
구성 단계를 완료한 후 mongokerberos
도구를 사용하여 구성의 유효성을 검사할 수 있습니다.
mongokerberos
는 MongoDB와 함께 사용하기 위한 플랫폼의 Kerberos 구성을 확인하고 MongoDB 클라이언트의 Kerberos 인증이 예상대로 작동하는지 테스트하는 편리한 방법을 제공합니다. 자세한 내용은 mongokerberos
문서를 참조하세요.
mongokerberos
MongoDB Enterprise에서만 사용할 수 있습니다.