Linux 에서 Kerberos 인증을 사용하여 자체 관리형 MongoDB 구성
개요
MongoDB Enterprise 는 Kerberos 서비스 를 사용한 인증 을 지원합니다. Kerberos 는 대규모 클라이언트/ 서버 시스템을 위한 업계 표준 인증 프로토콜 입니다. MongoDB Enterprise 는 MIT 구현 만 Kerberos 지원합니다. 의 .
전제 조건
MongoDB Enterprise를 사용 중인지 확인하려면 --version
명령줄 옵션을 mongod
또는 mongos
에 전달합니다:
mongod --version
이 명령의 출력에서 modules:
subscription
또는 modules: enterprise
문자열을 찾아 MongoDB Enterprise 바이너리를 사용하고 있는지 확인합니다.
복제본 세트 및 샤딩된 클러스터의 경우, 구성에서 IP 주소나 정규화되지 않은 호스트 이름 대신 FQDN(정규화된 도메인 이름)을 사용해야 합니다. Kerberos 영역을 올바르게 확인하고 연결할 수 있도록 하려면 GSSAPI용 FQDN을 사용해야 합니다.
Kerberos 배포 설정 및 구성은 이 문서의 범위를 벗어납니다. Kerberos 배포를 구성하는 방법에 대한 자세한 내용은 MIT Kerberos 문서 또는 운영 체제 문서를 참조하세요.
MongoDB를 Kerberos와 함께 사용하려면 MongoDB 배포서버의 각 mongod
및 mongos
인스턴스에 대한 Kerberos 서비스 주체를 Kerberos 데이터베이스에 추가해야 합니다. KDC에서 다음과 유사한 명령을 실행하여 서비스 주체를 추가할 수 있습니다.
kadmin.local addprinc mongodb/m1.example.com@EXAMPLE.COM
mongod
또는 mongos
를 실행하는 각 시스템에서 해당 서비스 주체에 대해 키탭 파일을 만들어야 합니다. mongod
또는 mongos
를 실행하는 시스템에서 다음과 유사한 명령을 실행하여 키탭 파일을 만들 수 있습니다.
kadmin.local ktadd mongodb/m1.example.com@EXAMPLE.COM
절차
다음 절차에서는 MongoDB에 Kerberos 사용자 주체 추가, Kerberos 지원을 위한 독립형 mongod
인스턴스 구성 및 mongosh
를 사용하여 연결하고 사용자 주체를 인증하는 단계를 간략하게 설명합니다.
mongod
Kerberos 없이 을(를) 시작합니다.
Kerberos 사용자를 처음 추가하려면 Kerberos 지원 없이 mongod
를 시작합니다.
Kerberos 사용자가 이미 MongoDB에 있고 사용자 생성에 필요한 권한이 있는 경우, Kerberos 지원으로 mongod
를 시작할 수 있습니다.
배포에 적합한 추가 설정을 포함하세요.
참고
mongod
mongos
{ 2} 및 는 기본적으로 로컬 호스트에 바인딩됩니다. 배포 구성원이 다른 호스트에서 실행되거나 원격 클라이언트를 배포에 연결하려는 경우 --bind_ip
또는 net.bindIp
를 지정해야 합니다.
에 mongod
연결합니다.
mongosh
를 mongod
인스턴스에 연결합니다. mongod
에 --auth
가 활성화되어 있는 경우 사용자를 만드는 데 필요한 권한으로 연결해야 합니다.
MongoDB에 Kerberos 주체를 추가합니다.
Kerberos 주체(<username>@<KERBEROS REALM>
또는 <username>/<instance>@<KERBEROS REALM>
)를 $external
데이터베이스의 MongoDB에 추가합니다. 대문자만을 사용해 Kerberos 영역을 지정합니다. $external
데이터베이스를 통해 mongod
가 외부 소스(예: Kerberos)를 사용하여 인증할 수 있습니다. 사용자의 권한을 지정하려면 사용자에게 역할을 할당합니다.
$external
인증 사용자(Kerberos, LDAP 또는 x.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장 을 사용하려면 사용자 이름이 10k 바이트를 초과할 수 없습니다.
다음 예에서는 records
데이터베이스에 대한 읽기 전용 액세스 권한이 있는 Kerberos 주체 application/reporting@EXAMPLE.NET
을 추가합니다.
use $external db.createUser( { user: "application/reporting@EXAMPLE.NET", roles: [ { role: "read", db: "records" } ] } )
필요에 따라 주체를 추가합니다. Kerberos를 사용하여 인증하려는 모든 사용자에 대해 MongoDB에서 해당 사용자를 생성해야 합니다. 사용자 생성 및 관리에 대한 자세한 내용은 사용자 관리 명령을 참조하세요.
mongod
Kerberos 지원 으로 를 시작합니다.
Kerberos 지원으로 mongod
를 시작하려면 다음 형식으로 환경 변수 KRB5_KTNAME
을 키탭 파일의 경로로 설정하고 mongod
매개 변수 authenticationMechanisms
을 GSSAPI
로 설정합니다:
env KRB5_KTNAME=<path to keytab file> \ mongod \ --setParameter authenticationMechanisms=GSSAPI \ <additional mongod options>
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 구성원이 다른 호스트에서 실행되도록 하려면 --bind_ip
를 지정합니다.
예를 들어 다음은 Kerberos를 지원하는 독립형 mongod
인스턴스를 시작합니다:
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \ /opt/mongodb/bin/mongod --auth \ --setParameter authenticationMechanisms=GSSAPI \ --dbpath /opt/mongodb/data --bind_ip localhost,<hostname(s)|ip address(es)>
mongod
의 경로와 키탭 파일의 경로가 다를 수 있습니다. 키탭 파일은 mongod
프로세스의 소유자만 액세스할 수 있어야 합니다.
공식 .deb
또는 .rpm
패키지를 사용하면 환경 설정 파일에서 KRB5_KTNAME
을 설정할 수 있습니다. 자세한 내용은 KRB5_KTNAME을 참조하세요.
mongosh
mongod
를 에 연결하고 인증합니다.
mongosh
클라이언트를 Kerberos 주체 application/reporting@EXAMPLE.NET
로 연결합니다. 연결하기 전에 Kerberos의 kinit
프로그램을 사용하여 application/reporting@EXAMPLE.NET
에 대한 자격 증명을 얻어야 합니다.
명령줄에서 연결하고 인증할 수 있습니다.
mongosh --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username application/reporting@EXAMPLE.NET
호스트 이름이 Kerberos 이름과 일치하는 시스템에 연결하는 경우 --host
옵션에 IP 주소나 정규화되지 않은 호스트 이름 대신 FQDN(정규화된 도메인 이름)을 지정해야 합니다.
호스트 이름이 Kerberos 이름과 일치하지 않는 시스템에 연결하는 경우, 먼저 mongosh
를 mongod
에 연결한 다음 mongosh
에서 나온 db.auth()
메서드를 사용하여 $external
데이터베이스에서 인증합니다.
use $external db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )
추가 고려 사항
KRB5_KTNAME
공식 .deb
또는 .rpm
패키지 중 하나를 사용하여 MongoDB Enterprise를 설치하고 포함된 init/upstart 스크립트를 사용하여 mongod
인스턴스를 제어하는 경우, 매번 변수를 설정하는 대신 기본 환경 설정 파일에서 KRB5_KTNAME
변수를 설정할 수 있습니다.
최신 버전의 Red Hat 및 Debian 기반 시스템은 systemd
를 사용합니다. 이전 버전에서는 시스템 초기화에 init
을 사용합니다. 해당 지침에 따라 시스템에 맞게 KRB5_KTNAME
변수를 구성하세요.
systemd
구성 파일
systemd
단위 파일에 구성을 저장합니다. 단위 파일을 업데이트하여 KRB5_KTNAME
변수를 설정합니다.
단위 파일 편집
편집한 줄을 단위 파일에 추가합니다. 편집된 단위 파일은 다음과 유사합니다:
[Unit] Description=High-performance, schema-free document-oriented database After=network.target Documentation=https://docs.mongodb.org/manual [Service] User=mongodb Group=mongodb ExecStart=/usr/bin/mongod --config /etc/mongod.conf Environment="KRB5_KTNAME=/etc/mongod.keytab" PIDFile=/var/run/mongodb/mongod.pid file size LimitFSIZE=infinity cpu time LimitCPU=infinity virtual memory size LimitAS=infinity open files LimitNOFILE=64000 processes/threads LimitNPROC=64000 locked memory LimitMEMLOCK=infinity total threads (user+kernel) TasksMax=infinity TasksAccounting=false Recommended limits for for mongod as specified in http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings [Install] WantedBy=multi-user.target
init
구성 파일
.rpm
설치의 경우 기본 환경 설정 파일은 /etc/sysconfig/mongod
입니다.
.deb
설치의 경우 파일은 /etc/default/mongodb
입니다.
다음과 같은 줄을 추가하여 KRB5_KTNAME
값을 설정합니다.
KRB5_KTNAME="<path to keytab>"
Kerberos 에 대해 mongos
구성
Kerberos 지원으로 mongos
를 시작하려면 환경 변수 KRB5_KTNAME
을 해당 키탭 파일의 경로로 설정하고 mongos
매개 변수 authenticationMechanisms
을 GSSAPI
로 다음 형식에 따라 설정합니다:
env KRB5_KTNAME=<path to keytab file> \ mongos \ --setParameter authenticationMechanisms=GSSAPI \ <additional mongos options>
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 구성원이 다른 호스트에서 실행되도록 하려면 --bind_ip
를 지정합니다.
예를 들어 다음은 Kerberos를 지원하는 mongos
인스턴스를 시작합니다.
env KRB5_KTNAME=/opt/mongodb/mongos.keytab \ mongos \ --setParameter authenticationMechanisms=GSSAPI \ --configdb shard0.example.net, shard1.example.net,shard2.example.net \ --keyFile /opt/mongodb/mongos.keyfile \ --bind_ip localhost,<hostname(s)|ip address(es)>
mongos
의 경로와 키탭 파일의 경로가 다를 수 있습니다. 키탭 파일은 mongos
프로세스의 소유자만 액세스할 수 있어야 합니다.
구성에 필요한 대로 추가적인 mongos
옵션을 수정하거나 포함합니다. 예를 들어, 샤딩된 클러스터 멤버의 내부 인증에 --keyFile
을 사용하는 대신 x.509 멤버 인증을 사용할 수 있습니다.
구성 파일 사용
구성 파일을 사용하여 Kerberos 지원에 대해 mongod
또는 mongos
를 구성하려면 구성 파일에 authenticationMechanisms
설정을 지정합니다.
YAML 구성 파일 형식을 사용하는 경우:
setParameter: authenticationMechanisms: GSSAPI
구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트가 배포에 연결하거나 배포 멤버가 다른 호스트에서 실행되도록 하려면 net.bindIp
설정을 지정하세요.
예를 들어 /opt/mongodb/mongod.conf
에 독립형 mongod
에 대한 다음과 같은 구성 설정이 포함되어 있는 경우:
security: authorization: enabled setParameter: authenticationMechanisms: GSSAPI storage: dbPath: /opt/mongodb/data net: bindIp: localhost,<hostname(s)|ip address(es)>
Kerberos 지원으로 mongod
를 시작하려면 다음 양식을 사용합니다:
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \ /opt/mongodb/bin/mongod --config /opt/mongodb/mongod.conf
mongod
, 키탭 파일 및 구성 파일의 경로가 다를 수 있습니다. 키탭 파일은 mongod
프로세스의 소유자만 액세스할 수 있어야 합니다.
MongoDB용 Kerberos 설정 문제 해결
Kerberos 인증으로 mongod
또는 mongos
을(를) 시작할 때 문제가 발생하는 경우 자체 관리형 Kerberos 인증 문제 해결인증 참조하세요.
추가 인증 메커니즘 통합
Kerberos 인증(GSSAPI (Kerberos))을 함께 사용할 수 있습니다:
MongoDB의 SCRAM 인증 메커니즘:
LDAP를 위한 MongoDB의 인증 메커니즘:
PLAIN (LDAP SASL)
x.509에 대한 MongoDB의 인증 메커니즘:
다음과 같이 메커니즘을 지정합니다:
--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256
다른 메커니즘은 사용 중인 경우에만 추가하세요. 이 매개 변수 설정은 MongoDB의 클러스터 멤버 내부 인증에 영향을 주지 않습니다.
테스트 및 검증
구성 단계를 완료한 후 mongokerberos
도구를 사용하여 구성의 유효성을 검사할 수 있습니다.
mongokerberos
는 MongoDB와 함께 사용하기 위한 플랫폼의 Kerberos 구성을 확인하고 MongoDB 클라이언트의 Kerberos 인증이 예상대로 작동하는지 테스트하는 편리한 방법을 제공합니다. 자세한 내용은 mongokerberos
문서를 참조하세요.
mongokerberos
MongoDB Enterprise에서만 사용할 수 있습니다.