Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
PyMongo 드라이버
/ /

OIDC(Workload Identity Federation)

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 에 전달할 때 퍼센트 인코딩하지 마세요.

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

참고

Python의 표준 라이브러리는 비동기 HTTP 요청을 지원 하지 않기 때문에 PyMongo의 모든 PyMongo 요청은 동기식이며 asyncio 루프를 차단 합니다.

애플리케이션 이 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 연결 옵션을 생략할 수 있습니다.

애플리케이션 이 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 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 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 클러스터 에서 실행되는 경우, 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)

돌아가기

AWS IAM

이 페이지의 내용