Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / /

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 배포서버의 각 mongodmongos 인스턴스에 대한 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를 사용하여 연결하고 사용자 주체를 인증하는 단계를 간략하게 설명합니다.

1

Kerberos 사용자를 처음 추가하려면 Kerberos 지원 없이 mongod를 시작합니다.

Kerberos 사용자가 이미 MongoDB에 있고 사용자 생성에 필요한 권한이 있는 경우, Kerberos 지원으로 mongod를 시작할 수 있습니다.

배포에 적합한 추가 설정을 포함하세요.

참고

mongod mongos { 2} 및 는 기본적으로 로컬 호스트에 바인딩됩니다. 배포 구성원이 다른 호스트에서 실행되거나 원격 클라이언트를 배포에 연결하려는 경우 --bind_ip 또는 net.bindIp 를 지정해야 합니다.

2

mongoshmongod 인스턴스에 연결합니다. mongod--auth가 활성화되어 있는 경우 사용자를 만드는 데 필요한 권한으로 연결해야 합니다.

3

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에서 해당 사용자를 생성해야 합니다. 사용자 생성 및 관리에 대한 자세한 내용은 사용자 관리 명령을 참조하세요.

4

Kerberos 지원으로 mongod를 시작하려면 다음 형식으로 환경 변수 KRB5_KTNAME을 키탭 파일의 경로로 설정하고 mongod 매개 변수 authenticationMechanismsGSSAPI로 설정합니다:

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을 참조하세요.

5

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 이름과 일치하지 않는 시스템에 연결하는 경우, 먼저 mongoshmongod에 연결한 다음 mongosh에서 나온 db.auth() 메서드를 사용하여 $external 데이터베이스에서 인증합니다.

use $external
db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )

공식 .deb 또는 .rpm 패키지 중 하나를 사용하여 MongoDB Enterprise를 설치하고 포함된 init/upstart 스크립트를 사용하여 mongod 인스턴스를 제어하는 경우, 매번 변수를 설정하는 대신 기본 환경 설정 파일에서 KRB5_KTNAME 변수를 설정할 수 있습니다.

최신 버전의 Red Hat 및 Debian 기반 시스템은 systemd를 사용합니다. 이전 버전에서는 시스템 초기화에 init을 사용합니다. 해당 지침에 따라 시스템에 맞게 KRB5_KTNAME 변수를 구성하세요.

systemd 단위 파일에 구성을 저장합니다. 단위 파일을 업데이트하여 KRB5_KTNAME 변수를 설정합니다.

1
sudo systemctl cat mongod

systemctl 명령은 파일 위치를 반환하고 해당 내용을 표시합니다.

2

KRB5_KTNAME 변수를 설정하려면 keytab 파일의 위치를 반영하도록 다음 줄을 편집합니다.

Environment="KRB5_KTNAME=<path-to-your-mongod.keytab-file>"
3

편집한 줄을 단위 파일에 추가합니다. 편집된 단위 파일은 다음과 유사합니다:

[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
4
sudo systemctl daemon-reload
5
sudo systemctl restart mongod

.rpm 설치의 경우 기본 환경 설정 파일은 /etc/sysconfig/mongod입니다.

.deb 설치의 경우 파일은 /etc/default/mongodb입니다.

다음과 같은 줄을 추가하여 KRB5_KTNAME 값을 설정합니다.

KRB5_KTNAME="<path to keytab>"

Kerberos 지원으로 mongos를 시작하려면 환경 변수 KRB5_KTNAME을 해당 키탭 파일의 경로로 설정하고 mongos 매개 변수 authenticationMechanismsGSSAPI로 다음 형식에 따라 설정합니다:

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 프로세스의 소유자만 액세스할 수 있어야 합니다.

Kerberos 인증으로 mongod 또는 mongos 을(를) 시작할 때 문제가 발생하는 경우 자체 관리형 Kerberos 인증 문제 해결인증 참조하세요.

Kerberos 인증(GSSAPI (Kerberos))을 함께 사용할 수 있습니다:

  • MongoDB의 SCRAM 인증 메커니즘:

  • LDAP를 위한 MongoDB의 인증 메커니즘:

  • x.509에 대한 MongoDB의 인증 메커니즘:

다음과 같이 메커니즘을 지정합니다:

--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256

다른 메커니즘은 사용 중인 경우에만 추가하세요. 이 매개 변수 설정은 MongoDB의 클러스터 멤버 내부 인증에 영향을 주지 않습니다.

구성 단계를 완료한 후 mongokerberos 도구를 사용하여 구성의 유효성을 검사할 수 있습니다.

mongokerberos는 MongoDB와 함께 사용하기 위한 플랫폼의 Kerberos 구성을 확인하고 MongoDB 클라이언트의 Kerberos 인증이 예상대로 작동하는지 테스트하는 편리한 방법을 제공합니다. 자세한 내용은 mongokerberos 문서를 참조하세요.

mongokerberos MongoDB Enterprise에서만 사용할 수 있습니다.

돌아가기

Kerberos