문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

Linux: Linux에서 Kerberos 인증을 사용하여 MongoDB 설정하기

이 페이지의 내용

  • 개요
  • 전제 조건
  • 절차
  • 추가 고려 사항
  • 테스트 및 검증

MongoDB Enterprise는 Kerberos 서비스 를 사용한 인증을 지원합니다. Kerberos는 대규모 클라이언트/서버 시스템을 위한 업계 표준 인증 프로토콜입니다. MongoDB Enterprise는 MIT 구현 만 지원합니다. 의 Kerberos.

MongoDB Enterprise를 사용 중인지 확인하려면 --version 명령줄 옵션을 mongod 또는 mongos에 전달합니다:

mongod --version

이 명령의 출력에서 modules: subscription 또는 modules: enterprise 문자열을 찾아 MongoDB 엔터프라이즈 바이너리를 사용하고 있는지 확인합니다.

복제본 세트 및 샤드 클러스터의 경우, 구성에서 IP 주소나 정규화되지 않은 호스트 이름 대신 FQDN(정규화된 도메인 이름)을 사용해야 합니다. Kerberos 영역을 올바르게 확인하고 연결할 수 있도록 하려면 GSSAPI용 FQDN을 사용해야 합니다.

Kerberos 배포를 설정하고 구성하는 것은 이 문서의 범위를 벗어납니다.MIT Kerberos 문서 를 참조하세요. Kerberos 배포를 구성하는 방법에 대한 자세한 내용은 또는 운영 체제 설명서를 참조하세요.

MongoDB를 Kerberos와 함께 사용하려면 MongoDB 배포의 mongosmongod인스턴스에 대한 Kerberos 서비스 주체 를 Kerberos 데이터베이스에 추가 해야 합니다. . KDC에서 다음과 유사한 명령을 실행하여 서비스 주체를 추가할 수 있습니다.

kadmin.local addprinc mongodb/m1.example.com@EXAMPLE.COM

또는 mongod 를 실행하는 mongos 각 시스템에서 키탭 파일만들어야 합니다. 각 서비스 주체에 대해 또는 를 실행하는 시스템에서 mongos 다음과 유사한 명령을 실행하여 키탭 파일을 만들 수 있습니다.mongod

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 이름과 일치하지 않는 시스템에 연결하는 경우, 먼저 mongosh 을(를) mongod 에 연결한 다음 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 프로세스의 소유자만 액세스할 수 있어야 합니다.

mongod 또는 mongos를 Kerberos 인증으로 시작할 때 문제가 발생할 경우 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 인증