문서 메뉴
문서 홈
/ / /
PyMongo
/

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

이 페이지의 내용

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

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

일반 보안 서비스 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)

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 인증 메커니즘을 사용하려면 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 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 연결 옵션을 생략할 수 있습니다.

애플리케이션이 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 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 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 문서를 참조하세요.

돌아가기

인증 메커니즘.