엔터프라이즈 인증 메커니즘
개요
MongoDB Enterprise Edition에는 MongoDB Community Edition에서 사용할 수 없는 인증 메커니즘이 포함되어 있습니다. 이 가이드에서는 이러한 인증 메커니즘을 사용하여 MongoDB에 인증하는 방법을 배울 수 있습니다. MongoDB에서 사용할 수 있는 다른 인증 메커니즘에 대해 알아보려면 인증 메커니즘을 참조하세요.
Kerberos
일반 보안 서비스 API(GSSAPI)는 Kerberos 인증을 위한 인터페이스를 제공합니다. 운영 체제에 해당하는 탭을 선택하여 Kerberos를 사용하여 인증하는 방법을 알아보세요.
먼저 pip 또는 easy_install을 사용하여 Python Kerberos 또는 pykerberos 모듈.
이러한 모듈 중 하나를 설치한 후 kinit
명령을 실행하여 초기 티켓 부여 티켓을 얻고 캐시합니다. 다음 예제에서는 knit
명령을 사용하여 주체 mongodbuser@EXAMPLE.COM
에 대한 티켓 부여 티켓을 가져옵니다. 그런 다음 klist
명령을 사용하여 자격 증명 캐시에 주체와 티켓을 표시합니다.
kinit mongodbuser@EXAMPLE.COM mongodbuser@EXAMPLE.COM's Password: klist Credentials cache: FILE:/tmp/krb5cc_1000 Principal: mongodbuser@EXAMPLE.COM Issued Expires Principal Feb 9 13:48:51 2013 Feb 9 23:48:51 2013 krbtgt/mongodbuser@EXAMPLE.COM
티켓 부여 티켓을 받은 후 다음 연결 옵션을 설정합니다.
username
: 인증할 Kerbos 주체입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.authMechanism
:"GSSAPI"
로 설정합니다.authMechanismProperties
: 선택 사항입니다. 기본적으로 MongoDB는mongodb
을(를) 인증 서비스 이름으로 사용합니다. 다른 서비스 이름을 지정하려면 이 옵션을"SERVICE_NAME:<authentication service name>"
로 설정합니다.
MongoClient
생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 두 가지 방법으로 이러한 옵션을 설정할 수 있습니다.
참고
authMechanismProperties
값에 쉼표가 포함된 경우 MongoClient
생성자를 사용하여 인증 옵션을 설정해야 합니다.
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="mongodbuser@EXAMPLE.COM", authMechanism="GSSAPI", authMechanismProperties="SERVICE_NAME:<authentication service name>")
uri = ("mongodb://mongodbuser%40EXAMPLE.COM@<hostname>:<port>/?" "&authMechanism=GSSAPI" "&authMechanismProperties=SERVICE_NAME:<authentication service name>") client = pymongo.MongoClient(uri)
먼저,winkerberos 를 설치합니다. 모듈. 그런 다음 다음 연결 옵션을 설정합니다.
username
: 인증할 Kerbos 주체입니다. 이 값을 연결 URI에 포함하기 전에 퍼센트 인코딩합니다.authMechanism
:"GSSAPI"
로 설정합니다.password
: 선택 사항입니다. 인증할 사용자가 애플리케이션 프로세스를 소유한 사용자와 다른 경우 이 옵션을 인증 사용자의 비밀번호로 설정합니다.authMechanismProperties
: 선택 사항입니다. 이 옵션에는 여러 인증 속성이 포함되어 있습니다. 다음 속성 중 하나 이상을 지정하려면 쉼표로 구분된 목록을 사용합니다.SERVICE_NAME:
기본적으로 MongoDB는mongodb
을(를) 인증 서비스 이름으로 사용합니다. 이 옵션을 사용하여 다른 서비스 이름을 지정합니다.CANONICALIZE_HOST_NAME
: 서버 주체에 MongoDB 호스트의 FQDN(정규화된 도메인 이름)을 사용할지 여부입니다.SERVICE_REALM
: 서비스 영역입니다. 사용자의 Realm이 서비스의 Realm과 다른 경우 이 옵션을 사용합니다.
MongoClient
생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 두 가지 방법으로 이러한 옵션을 설정할 수 있습니다.
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="mongodbuser@EXAMPLE.COM", authMechanism="GSSAPI", password="<user password>", authMechanismProperties="SERVICE_NAME:<authentication service name>, CANONICALIZE_HOST_NAME:true, SERVICE_REALM:<service realm>")
uri = ("mongodb://mongodbuser%40EXAMPLE.COM:<percent-encoded user password>" "@<hostname>:<port>/?" "&authMechanism=GSSAPI" "&authMechanismProperties=" "SERVICE_NAME:<authentication service name>," "CANONICALIZE_HOST_NAME:true," "SERVICE_REALM:<service realm>") client = pymongo.MongoClient(uri)
PLAIN SASL
RFC 4616 에 정의된 PLAIN SASL(Simple Authentication and Security Layer) 은(는) TLS 또는 다른 암호화 계층과 함께 자주 사용되는 사용자 이름-비밀번호 인증 메커니즘입니다.
중요
PLAIN SASL은 일반 텍스트 인증 메커니즘입니다. PLAIN SASL을 사용하여 MongoDB에 인증할 때는 인증서 유효성 검사와 함께 TLS/SSL을 사용할 것을 강력히 권장합니다.
연결에 TLS를 활성화하는 방법에 대해 자세히 알아보려면 TLS (전송 계층 보안) 구성을 참조하세요.
SASL로 인증하려면 authMechanism
연결 옵션을 PLAIN
로 설정합니다. MongoClient
생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 이 옵션을 설정할 수 있습니다.
참고
authMechanismProperties
값에 쉼표가 포함된 경우 MongoClient
생성자를 사용하여 인증 옵션을 설정해야 합니다.
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="<db_username>", password="<db_password>", authMechanism="PLAIN", tls=True)
uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "&authMechanism=PLAIN" "&tls=true") client = pymongo.MongoClient(uri)
MONGODB-OIDC
중요
MONGODB-OIDC 인증 메커니즘을 사용하려면 Linux 플랫폼에서 실행되는 MongoDB Server v7.0 이상이 필요합니다.
PyMongo는 워크로드 ID 에 대한 OIDC 인증을 지원합니다. 워크로드 ID는 다른 서비스 및 리소스를 인증하고 액세스하기 위해 애플리케이션, 서비스, 스크립트 또는 컨테이너와 같은 소프트웨어 워크로드에 할당하는 ID입니다.
다음 섹션에서는 MONGODB-OIDC 인증 메커니즘을 사용하여 다양한 플랫폼에서 인증하는 방법을 설명합니다.
MONGODB-OIDC 인증 메커니즘에 대한 자세한 내용은 MongoDB Server 매뉴얼의 OpenID Connect 인증 및 MongoDB Server 매개변수 를 참조하세요.
참고
Python의 표준 라이브러리는 비동기 HTTP 요청을 지원하지 않기 때문에 PyMongo의 모든 OIDC 요청은 동기식이며 asyncio
루프를 차단합니다.
Azure IMDS
애플리케이션이 Azure VM에서 실행되거나 Azure 인스턴스 메타데이터 서비스 를 사용하는 경우 (IMDS)부터는 PyMongo의 기본 제공 Azure 지원을 사용하여 MongoDB에 인증할 수 있습니다.
생성자에 인수를 전달하거나 연결 의 매개변수를 사용하는 두 가지 방법으로 IMDS용 OIDC를 구성할 수 Azure MongoClient
string 있습니다.
참고
authMechanismProperties
값에 쉼표가 포함된 경우 MongoClient
생성자를 사용하여 인증 옵션을 설정해야 합니다.
먼저 다음 예제와 같이 인증 메커니즘 속성에 대한 Python 사전을 만듭니다. <audience>
자리 표시자를 MongoDB deployment에 구성된 audience
매개변수의 값으로 바꿉니다.
다음 코드 예제에서는 연결 문자열에서 이러한 옵션을 설정하는 방법을 보여 줍니다.
properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"}
그런 다음 다음 연결 옵션을 설정합니다.
username
: Azure 관리 ID를 사용하는 경우 이를 관리 ID의 클라이언트 ID로 설정합니다. 서비스 주체를 사용하여 엔터프라이즈 애플리케이션을 나타내는 경우 이를 서비스 주체의 애플리케이션 ID로 설정합니다.authMechanism
:"MONGODB-OIDC"
로 설정합니다.authMechanismProperties
: 이전 단계에서 만든properties
딕셔너리로 설정합니다.
다음 코드 예시에서는 MongoClient
를 만들 때 이러한 옵션을 설정하는 방법을 보여 줍니다.
from pymongo import MongoClient # define properties and MongoClient properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"} client = MongoClient( "mongodb://<hostname>:<port>", username="<Azure client ID or application ID>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
연결 string 에 다음 연결 옵션을 포함합니다.
username
: Azure 관리 ID를 사용하는 경우 이를 관리 ID의 클라이언트 ID로 설정합니다. 서비스 주체를 사용하여 엔터프라이즈 애플리케이션을 나타내는 경우 이를 서비스 주체의 애플리케이션 ID로 설정합니다.authMechanism
:MONGODB-OIDC
로 설정합니다.authMechanismProperties
:ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>
로 설정합니다.<audience>
자리 표시자를 MongoDB 배포에 구성된audience
매개 변수의 값으로 바꿉니다.다음 코드 예제에서는 연결 문자열에서 이러한 옵션을 설정하는 방법을 보여 줍니다.
from pymongo import MongoClient # define URI and MongoClient uri = ("mongodb://<hostname>:<port>/?" "username=<Azure client ID or application ID>" "&authMechanism=MONGODB-OIDC" "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>") client = MongoClient(uri)
팁
애플리케이션이 Azure VM에서 실행 중이고 VM과 연결된 관리 ID가 하나만 있는 경우 username
연결 옵션을 생략할 수 있습니다.
GCP IMDS
애플리케이션이 Google Compute Engine VM에서 실행되거나 GCP 인스턴스 메타데이터 서비스 를 사용하는 경우 , PyMongo의 기본 제공 GCP 지원을 사용하여 MongoDB에 인증할 수 있습니다.
생성자에 인수를 전달하거나 연결 의 매개변수를 사용하는 두 가지 방법으로 IMDS용 OIDC를 구성할 수 GCP MongoClient
string 있습니다.
참고
authMechanismProperties
값에 쉼표가 포함된 경우 MongoClient
생성자를 사용하여 인증 옵션을 설정해야 합니다.
먼저 다음 예제와 같이 인증 메커니즘 속성에 대한 Python 사전을 만듭니다. <audience>
자리 표시자를 MongoDB deployment에 구성된 audience
매개변수의 값으로 바꿉니다.
properties = {"ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>"}
그런 다음 다음 연결 옵션을 설정합니다.
authMechanism
:"MONGODB-OIDC"
로 설정합니다.authMechanismProperties
: 이전 단계에서 만든properties
딕셔너리로 설정합니다.
다음 코드 예시에서는 MongoClient
를 만들 때 이러한 옵션을 설정하는 방법을 보여 줍니다.
from pymongo import MongoClient # define properties and MongoClient properties = {"ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>"} client = MongoClient( "mongodb://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
연결 string 에 다음 연결 옵션을 포함합니다.
authMechanism
:MONGODB-OIDC
로 설정합니다.authMechanismProperties
:ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>
로 설정합니다.<audience>
자리 표시자를 MongoDB 배포에 구성된audience
매개 변수의 값으로 바꿉니다.
다음 코드 예제에서는 연결 문자열에서 이러한 옵션을 설정하는 방법을 보여 줍니다.
from pymongo import MongoClient # define URI and MongoClient uri = ("mongodb://<hostname>:<port>/?" "&authMechanism=MONGODB-OIDC" "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>") client = MongoClient(uri)
기타 Azure 환경
애플리케이션이 Azure Functions, ASE(App Service Environment) 또는 AKS(Azure Kubernetes Service)에서 실행되는 경우 Azure ID 를 사용할 수 있습니다. 패키지를 사용하여 인증 자격 증명을 가져옵니다.
먼저 다음 예제와 같이 pip를 사용하여 azure-identity
라이브러리를 설치합니다.
python3 -m pip install azure-identity
다음으로, OIDCCallback
클래스에서 상속되는 클래스를 정의합니다. 이 클래스는 OIDCCallbackResult
객체 형식으로 OIDC 토큰을 반환하는 fetch()
메서드를 구현해야 합니다.
다음 예제에서는 MyCallback
이라는 콜백 클래스를 정의하는 방법을 보여줍니다. 이 클래스에는 표준 서비스 계정 토큰 파일 위치에 있는 파일에서 OIDC 토큰을 검색하는 fetch()
메서드가 포함되어 있습니다.
audience = "<audience>" client_id = "<Azure client ID>" class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: credential = DefaultAzureCredential(managed_identity_client_id=client_id) token = credential.get_token(f"{audience}/.default").token return OIDCCallbackResult(access_token=token)
콜백 클래스를 정의한 후 사용자 지정 콜백 클래스의 인스턴스인 값을 가진 하나의 키 "OIDC_CALLBACK"
을 포함하는 Python 사전을 만듭니다.
properties = {"OIDC_CALLBACK": MyCallback()}
마지막으로 MongoClient
생성자에 인수를 전달하여 다음 연결 옵션을 설정합니다.
authMechanism
:"MONGODB-OIDC"
로 설정합니다.authMechanismProperties
: 이전 단계에서 만든properties
딕셔너리로 설정합니다.
from pymongo import MongoClient from azure.identity import DefaultAzureCredential from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult # define callback, properties, and MongoClient audience = "<audience>" client_id = "<Azure client ID>" class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: credential = DefaultAzureCredential(managed_identity_client_id=client_id) token = credential.get_token(f"{audience}/.default").token return OIDCCallbackResult(access_token=token) properties = {"OIDC_CALLBACK": MyCallback()} client = MongoClient( "mongodb://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
GCP GKE
애플리케이션이 구성된 서비스 계정 으로 GCP Google Kubernetes Engine(GKE) 클러스터에서 실행되는 경우 , 표준 서비스 계정 토큰 파일 위치에서 OIDC 토큰을 읽을 수 있습니다.
먼저 OIDCCallback
클래스에서 상속되는 클래스를 정의합니다. 이 클래스는 OIDCCallbackResult
객체 형식으로 OIDC 토큰을 반환하는 fetch()
메서드를 구현해야 합니다.
다음 예제에서는 MyCallback
이라는 콜백 클래스를 정의하는 방법을 보여줍니다. 이 클래스에는 표준 서비스 계정 토큰 파일 위치에 있는 파일에서 OIDC 토큰을 검색하는 fetch()
메서드가 포함되어 있습니다.
class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid: token = fid.read() return OIDCCallbackResult(access_token=token)
콜백 클래스를 정의한 후 사용자 지정 콜백 클래스의 인스턴스인 값을 가진 하나의 키 "OIDC_CALLBACK"
을 포함하는 Python 사전을 만듭니다.
properties = {"OIDC_CALLBACK": MyCallback()}
마지막으로 MongoClient
생성자에 인수를 전달하여 다음 연결 옵션을 설정합니다.
authMechanism
:"MONGODB-OIDC"
로 설정합니다.authMechanismProperties
: 이전 단계에서 만든properties
딕셔너리로 설정합니다.
from pymongo import MongoClient from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult # define callback, properties, and MongoClient class MyCallback(OIDCCallback): def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult: with open("/var/run/secrets/kubernetes.io/serviceaccount/token") as fid: token = fid.read() return OIDCCallbackResult(access_token=token) properties = {"OIDC_CALLBACK": MyCallback()} client = MongoClient( "mongodb://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
API 문서
PyMongo에서 엔터프라이즈 인증 메커니즘을 사용하는 방법에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.