文档首页 → 开发应用程序 → Python 驱动程序 → PyMongo
企业级身份验证机制
概述
MongoDB 企业版包含在MongoDB 社区版中不可用的身份验证机制。在本指南中,您可以学习如何使用这些身份验证机制进行MongoDB身份验证。有关MongoDB中其他可用身份验证机制的信息,请参阅身份验证机制。
密钥服务系统(Kerberos)
通用安全服务API(GSSAPI)提供了Kerberos身份验证的接口。选择与您的操作系统对应的选项卡,了解如何使用Kerberos进行身份验证。
PLAIN SASL
PLAIN简单身份验证和安全层(SASL),如定义所述RFC 4616 是一种常与 TLS 或其他加密层一起使用的用户名密码认证机制。
重要
PLAIN SASL 是一种明文认证机制。我们强烈建议您在使用 PLAIN SASL 进行 MongoDB 认证时使用 TLS/SSL 并进行证书验证。
要了解如何为您的连接启用 TLS,请参阅 配置传输层安全性 (TLS)。
要使用 SASL 进行认证,请将authMechanism
连接选项设置为 PLAIN
。您可以通过以下两种方式设置此选项:通过将参数传递给 MongoClient
构造函数或在您的连接字符串中设置参数。
MONGODB-OIDC
重要
MONGODB-OIDC 认证机制需要 MongoDB v7.0 或更高版本在 Linux 平台上运行。
PyMongo 支持 工作负载标识 的 OIDC 认证。工作负载标识是您分配给软件工作负载(如应用程序、服务、脚本或容器)的标识,用于认证和访问其他服务和资源。
以下各节介绍了如何使用 MONGODB-OIDC 认证机制在各种平台上进行认证。
有关 MONGODB-OIDC 认证机制的更多信息,请参阅 MongoDB 服务器手册中的 OpenID Connect 认证。
Azure IMDS
如果您的应用程序在Azure VM上运行,或者使用Azure 实例元数据服务 (IMDS),您可以使用PyMongo的内置Azure支持通过PyMongo对MongoDB进行认证。
您可以通过两种方式配置Azure IMDS的OIDC:通过传递参数给MongoClient
构造函数或通过连接字符串中的参数。
提示
如果您的应用程序在Azure VM上运行,并且VM只关联了一个托管标识,则可以省略username
连接选项。
GCP IMDS
如果您的应用程序在GCP VM上运行,或者使用GCP 实例元数据服务,您可以使用PyMongo的内置GCP支持通过PyMongo对MongoDB进行认证。
您可以通过两种方式配置GCP IMDS的OIDC:通过传递参数给MongoClient
构造函数或通过连接字符串中的参数。
其他Azure环境
如果您的应用程序运行在Azure Functions、App Service Environment (ASE) 或 Azure Kubernetes Service (AKS) 上,您可以使用 azure-identity 包来获取身份验证凭据。
首先,使用pip安装 azure-identity
库,如下例所示
python3 -m pip install azure-identity
接下来,定义一个继承自 OIDCCallback
类的类。此类必须实现一个 fetch()
方法,该方法以 OIDCCallbackResult
对象的形式返回 OIDC 令牌。
以下示例展示了如何定义一个名为 MyCallback
的回调类。此类包括一个 fetch()
方法,该方法从标准服务帐户令牌文件位置中的文件检索 OIDC 令牌。
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 GKE
如果您的应用程序运行在配置了服务帐户的GCP Google Kubernetes Engine (GKE)集群上,您可以从标准服务帐户令牌文件位置读取OIDC令牌。
首先,定义一个继承自OIDCCallback
类的类。此类必须实现一个返回OIDCCallbackResult
对象的fetch()
方法。
以下示例展示了如何定义一个名为 MyCallback
的回调类。此类包括一个 fetch()
方法,该方法从标准服务帐户令牌文件位置中的文件检索 OIDC 令牌。
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 )
API文档
要了解更多关于在PyMongo中使用企业身份验证机制的信息,请参阅以下API文档