Docs Menu

Docs Home애플리케이션 개발Python 드라이버PyMongo

엔터프라이즈 인증 메커니즘

이 페이지의 내용

  • 개요
  • Kerberos
  • PLAIN SASL
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • 기타 Azure 환경
  • GCP GKE
  • API 문서

MongoDB Enterprise 에는 MongoDB Community Edition 에서는 사용할 수 없는 인증 메커니즘이 포함되어 있습니다. 이 가이드 에서는 이러한 인증 메커니즘을 사용하여 MongoDB 에 인증하는 방법을 학습 수 있습니다. MongoDB 에서 사용할 수 있는 다른 인증 메커니즘에 학습 보려면 인증 메커니즘을 참조하세요.

일반 보안 서비스 API(GSSAPI)는 Kerberos 인증을 위한 인터페이스를 제공합니다. 운영 체제에 해당하는 탭을 선택하여 Kerberos를 사용하여 인증하는 방법을 알아보세요.

RFC 4616 에 정의된 PLAIN SASL(Simple Authentication and Security Layer)은(는) TLS 또는 다른 암호화 계층과 함께 자주 사용되는 사용자 이름-비밀번호 인증 메커니즘입니다.

중요

PLAIN SASL은 일반 텍스트 인증 메커니즘입니다. PLAIN SASL을 사용하여 MongoDB에 인증할 때는 인증서 유효성 검사와 함께 TLS/SSL을 사용할 것을 강력히 권장합니다.

연결에 TLS를 활성화하는 방법에 대해 자세히 알아보려면 TLS (전송 계층 보안) 구성을 참조하세요.

SASL로 인증하려면 authMechanism 연결 옵션을 PLAIN 로 설정합니다. MongoClient 생성자에 인수를 전달하거나 연결 string 의 매개변수를 통해 이 옵션을 설정할 수 있습니다.

중요

MONGODB-OIDC 인증 메커니즘을 사용하려면 Linux 플랫폼에서 실행되는 MongoDB v7.0 이상이 필요합니다.

PyMongo는 워크로드 ID 에 대한 OIDC 인증을 지원합니다. 워크로드 ID는 다른 서비스 및 리소스를 인증하고 액세스하기 위해 애플리케이션, 서비스, 스크립트 또는 컨테이너와 같은 소프트웨어 워크로드에 할당하는 ID입니다.

다음 섹션에서는 MONGODB-OIDC 인증 메커니즘을 사용하여 다양한 플랫폼에서 인증하는 방법을 설명합니다.

MONGODB-OIDC 인증 메커니즘에 대한 자세한 내용은 MongoDB Server 매뉴얼의 OpenID Connect 인증 을 참조하세요.

애플리케이션이 Azure VM에서 실행되거나 Azure 인스턴스 메타데이터 서비스 를 사용하는 경우 (IMDS)부터는 PyMongo의 기본 제공 Azure 지원을 사용하여 MongoDB에 인증할 수 있습니다.

생성자에 인수를 전달하거나 연결 의 매개변수를 사용하는 두 가지 방법으로 IMDS용 OIDC를 구성할 수 Azure MongoClient string 있습니다.

애플리케이션이 Azure VM에서 실행 중이고 VM과 연결된 관리 ID가 하나만 있는 경우 username 연결 옵션을 생략할 수 있습니다.

애플리케이션이 GCP VM에서 실행되거나 GCP 인스턴스 메타데이터 서비스 를 사용하는 경우 , PyMongo의 기본 제공 GCP 지원을 사용하여 MongoDB에 인증할 수 있습니다.

생성자에 인수를 전달하거나 연결 의 매개변수를 사용하는 두 가지 방법으로 IMDS용 OIDC를 구성할 수 GCP MongoClient string 있습니다.

애플리케이션이 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 configured on the MongoDB deployment>"
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 configured on the MongoDB deployment>"
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 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
)

PyMongo에서 엔터프라이즈 인증 메커니즘을 사용하는 방법에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

← 인증 메커니즘.