Docs Menu
Docs Home
/ / /
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를 사용하여 인증하는 방법을 알아보세요.

먼저 pip 또는 간편 설치를 사용하여 Python Kerberos 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: 서비스 영역. 사용자의 영역 이 서비스의 영역 과 다른 경우 이 옵션을 사용합니다.

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의 모든 PyMongo 요청은 동기식이며 asyncio 루프를 차단 합니다.

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

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

참고

authMechanismProperties 값에 쉼표가 포함된 경우 MongoClient 생성자를 사용하여 인증 옵션을 설정하다 해야 합니다.

먼저 다음 예제와 같이 인증 메커니즘 속성에 대한 Python 사전을 만듭니다. <audience> 자리 표시자를 MongoDB deployment에 구성된 audience 매개변수의 값으로 바꿉니다.

다음 코드 예시 에서는 연결 string 에서 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.

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 deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

    다음 코드 예시 에서는 연결 string 에서 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.

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 deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

다음 코드 예시 에서는 연결 string 에서 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.

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 문서를 참조하세요.

돌아가기

인증