개요
OIDC(OpenID Connect) 인증 메커니즘 하면 Azure 또는 Google Cloud Platform (GCP )과 같은 타사 ID 제공자 사용하여 MongoDB 에 인증할 수 있습니다.
이 메커니즘은 MongoDB Atlas 또는 MongoDB Enterprise Advanced 에 인증할 때 그리고 MongoDB v7.0 이상에 인증할 때만 사용할 수 있습니다.
팁
OIDC 인증
OIDC 인증 위한 MongoDB Atlas 구성에 대해 자세히 학습 Atlas 설명서에서OIDC를 사용한 Workforce Identity Federation 설정을 참조하세요.
MongoDB 에서 OIDC 인증 사용하는 방법에 대한 자세한 내용은 MongoDB Server 매뉴얼에서 OpenID Connect 인증 및 MongoDB Server 매개변수를 참조하세요.
코드 자리 표시자
이 페이지의 코드 예제에서는 다음 자리 표시자를 사용합니다.
+srv
: MongoDB Atlas cluster 에 연결하는 경우에만 연결 문자열 접두사에 이 옵션을 포함합니다. 옵션에 대해 자세히+srv
학습 MongoDB Server 매뉴얼의 연결 문자열 형식을 참조하세요.<Azure ID>
: Azure IMDS에 대해 인증하는 경우 Azure managed ID 또는 엔터프라이즈 애플리케이션 의 클라이언트 ID 또는 애플리케이션 ID .<hostname>
: MongoDB deployment 의 네트워크 주소 .<port>
: MongoDB deployment 의 포트 번호입니다. 이 매개 변수를 생략하면 운전자 기본값 포트 번호(27017
)를 사용합니다. MongoDB Atlas cluster 에 연결할 때는 포트를 지정할 필요가 없습니다.<audience>
: MongoDB deployment 에 구성된audience
매개변수의 값입니다.
이 페이지의 코드 예제를 사용하려면 이러한 자리 표시자를 원하는 값으로 바꾸세요.
중요
백분율 인코딩
퍼센트 인코딩 을 수행해야 합니다. 사용자 이름과 비밀번호를 MongoDB URI에 포함하기 전에 확인합니다. quote_plus()
urllib.parse 에서 사용할 수 있는 메서드 모듈은 이 작업을 수행하는 한 가지 방법입니다. 예를 들어 quote_plus("and / or")
를 호출하면 and+%2F+or
string 이 반환됩니다.
사용자 이름이나 비밀번호를 인수로 MongoClient
에 전달할 때 퍼센트 인코딩하지 마세요.
애플리케이션에서 OIDC 인증 사용
다음 섹션에서는 MONGODB-OIDC 인증 메커니즘을 사용하여 다양한 플랫폼에서 인증하는 방법을 설명합니다.
참고
Python의 표준 라이브러리는 비동기 HTTP 요청을 지원 하지 않기 때문에 PyMongo의 모든 PyMongo 요청은 동기식이며 asyncio
루프를 차단 합니다.
Azure IMDS
애플리케이션 이 Azure VM에서 실행되거나 Azure 인스턴스 메타데이터 서비스 를 사용하는 경우 (IMDS), PyMongo의 내장 Azure 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.
생성자에 인수를 전달하거나 연결 의 매개변수를 사용하는 두 가지 방법으로 IMDS용 OIDC를 구성할 수 Azure MongoClient
string 있습니다.
참고
authMechanismProperties
값에 쉼표가 포함된 경우 MongoClient
생성자를 사용하여 인증 옵션을 설정하다 해야 합니다.
먼저 다음 예시 와 같이 인증 메커니즘 속성에 대한 Python 사전을 만듭니다.
properties = {"ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>"}
그런 다음 다음 연결 옵션을 설정합니다.
username
: Azure managed ID를 사용하는 경우 이를 managed 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[+srv]://<hostname>:<port>", username="<Azure ID>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
연결 string 에 다음 연결 옵션을 포함합니다.
username
: Azure managed ID를 사용하는 경우 이를 managed ID의 클라이언트 ID 로 설정하다 .authMechanism
:MONGODB-OIDC
로 설정합니다.authMechanismProperties
:ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>
로 설정합니다.다음 코드 예시 에서는 연결 string 에서 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.
from pymongo import MongoClient # define URI and MongoClient uri = ("mongodb[+srv]://<hostname>:<port>/?" "username=<username>" "&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 사전을 만듭니다.
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[+srv]://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
연결 string 에 다음 연결 옵션을 포함합니다.
authMechanism
:MONGODB-OIDC
로 설정합니다.authMechanismProperties
:ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>
로 설정합니다.
다음 코드 예시 에서는 연결 string 에서 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.
from pymongo import MongoClient # define URI and MongoClient uri = ("mongodb[+srv]://<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 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 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[+srv]://<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[+srv]://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
Kubernetes
애플리케이션 이 Kubernetes 클러스터 에서 실행되는 경우, PyMongo의 내장 Kubernetes 지원 사용하여 MongoDB 에 인증할 수 있습니다.
MongoClient
생성자에 인수를 전달하거나 연결 문자열 의 매개변수를 사용하는 두 가지 방법으로 Kubernetes 용 OIDC를 구성할 수 있습니다. 다음 탭에서 선택하여 애플리케이션 에 대해 Kubernetes 인증 활성화 방법을 확인합니다.
properties = {"ENVIRONMENT": "k8s"} client = MongoClient( "mongodb[+srv]://<hostname>:<port>", authMechanism="MONGODB-OIDC", authMechanismProperties=properties )
uri = ("mongodb[+srv]://<hostname>:<port>/?" "authMechanism=MONGODB-OIDC" "&authMechanismProperties=ENVIRONMENT:k8s") client = MongoClient(uri)