文档首页 → 开发应用程序 → Python 驱动程序 → PyMongo
身份验证机制
本页内容
概述
本指南介绍了您可以在 PyMongo 中使用的身份验证机制。
重要
百分比编码
您必须百分号编码 在将用户名和密码包含在MongoDB URI之前,请对它们进行百分号编码。quote_plus()
方法,在 urllib.parse 模块中可用,是执行此任务的一种方式。例如,调用 quote_plus("and / or")
返回字符串 and+%2F+or
。
在将用户名或密码作为参数传递给 MongoClient
时,请不要对它们进行百分号编码。
SCRAM-SHA-256
SCRAM-SHA-256,由RFC 7677定义,是MongoDB v4.0或更高版本部署上的默认身份验证机制。
要使用此机制进行身份验证,请设置以下连接选项
username
:用于身份验证的用户名。在将其包含在连接URI中之前,对此值进行百分比值编码。password
:用于身份验证的密码。在将其包含在连接URI中之前,对此值进行百分比值编码。authSource
:要对其身份验证的MongoDB数据库。默认情况下,PyMongo在连接URI中包含数据库时对其身份验证,如果不包含,则对admin
数据库进行身份验证。authMechanism
:设置为SCRAM-SHA-256
。
您可以通过两种方式设置这些选项:通过将参数传递给MongoClient
构造函数或通过连接字符串中的参数。
SCRAM-SHA-1
SCRAM-SHA-1,由RFC 5802定义,是MongoDB v3.6部署上的默认身份验证机制。
要使用此机制进行身份验证,请设置以下连接选项
username
:用于身份验证的用户名。在将其包含在连接URI中之前,对此值进行百分比值编码。password
:用于身份验证的密码。在将其包含在连接URI中之前,对此值进行百分比值编码。authSource
:要对其身份验证的MongoDB数据库。默认情况下,PyMongo对admin
数据库进行身份验证。authMechanism
:设置为"SCRAM-SHA-1"
。
您可以通过两种方式设置这些选项:通过将参数传递给MongoClient
构造函数或通过连接字符串中的参数。
MONGODB-X509
如果您启用了TLS,在TLS握手过程中,PyMongo可以向MongoDB提供X.509客户端证书以证明其身份。MONGODB-X509身份验证机制使用此证书来验证客户端。
要使用此机制进行身份验证,请设置以下连接选项
tls
:设置为True
。tlsCertificateKeyFile
:包含您的客户端证书和私钥的.pem
文件的文件路径。authMechanism
:设置为"MONGODB-X509"
。
您可以通过两种方式设置这些选项:通过将参数传递给MongoClient
构造函数或通过连接字符串中的参数。
MONGODB-AWS
重要
MONGODB-AWS认证机制需要MongoDB v4.4或更高版本。
MONGODB-AWS认证机制使用AWS IAM(Amazon Web Services Identity and Access Management)或AWS Lambda凭证来认证您的应用程序。要使用MONGODB-AWS进行认证,您必须安装带aws
选项的PyMongo,如下例所示
python -m pip install pymongo[aws]
PyMongo使用Boto3,Python的AWS SDK,来处理凭证。Boto3将按照以下顺序尝试从以下来源检索AWS凭证
传递给
MongoClient
构造函数的命名参数或连接URI中的参数环境变量
共享凭证文件
AWS配置文件
向AWS安全令牌服务(STS)发送的
AssumeRole
请求向AWS STS发送的
AssumeRoleWithWebIdentity
请求配置了IAM角色的Amazon EC2实例上的实例元数据服务
以下部分描述了如何使用PyMongo从这些来源检索凭证,并使用它们来认证您的应用程序。
MongoClient
凭证
首先,PyMongo检查您是否已将AWS凭证传递给MongoClient
构造函数,无论是作为命名参数还是作为连接URI的一部分。要将凭证传递给MongoClient
,设置以下连接选项
username
:用于认证的AWS IAM访问密钥ID。在将其包含在连接URI中之前,对该值进行百分编码。password
:AWS IAM秘密访问密钥。在将其包含在连接URI中之前,对该值进行百分编码。authMechanism
:设置为"MONGODB-AWS"
。
您可以通过两种方式设置这些选项:通过将参数传递给MongoClient
构造函数或通过连接字符串中的参数。
环境变量
当您构建MongoClient
对象时,如果没有提供用户名和密码,PyMongo将尝试从以下环境变量中检索AWS凭证
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN
要使用这些环境变量来认证您的应用程序,首先将它们设置为认证所需的AWS IAM值,如下所示代码示例
export AWS_ACCESS_KEY_ID=<AWS IAM access key ID> export AWS_SECRET_ACCESS_KEY=<AWS IAM secret access key> export AWS_SESSION_TOKEN=<AWS session token>
重要
不要对环境变量中的值进行百分编码。
设置这些环境变量后,将authMechanism
连接选项设置为"MONGODB-AWS"
。您可以通过两种方式设置此选项:通过传递参数给MongoClient
构造函数或在您的连接字符串中设置参数。
提示
AWS Lambda
AWS Lambda 运行时可以在初始化过程中自动设置这些环境变量。有关在 AWS Lambda 环境中使用环境变量的更多信息,请参阅 AWS 文档中的使用 Lambda 环境变量。
共享凭据文件
如果 PyMongo 在前面的环境变量中找不到 AWS 凭据,它会尝试从共享凭据文件中读取它们。
要使用共享凭据文件对您的应用程序进行身份验证,请确保该文件存在于您的环境中并且配置正确。有关创建共享凭据文件的方法,请参阅Boto3文档中的凭据和AWS文档中的配置。
创建共享凭据文件后,将连接选项authMechanism
设置为"MONGODB-AWS"
。您可以通过两种方式设置此选项:通过将参数传递给MongoClient
构造函数或通过连接字符串中的参数。
提示
为了防止PyMongo使用共享凭据文件进行身份验证,请执行以下操作之一
在您的终端中将环境变量
AWS_SHARED_CREDENTIALS_FILE
设置为""
。在您的脚本或应用程序中添加
os.environ["AWS_SHARED_CREDENTIALS_FILE"] = ""
。为您的MongoDB凭据创建一个专门的AWS配置文件。将环境变量
AWS_PROFILE
设置为创建的配置文件名称。
AWS配置文件
如果PyMongo在共享凭据文件中找不到凭据,它会尝试从AWS配置文件中读取它们。
要使用AWS配置文件对应用程序进行身份验证,请确保该文件存在于您的环境中,并且配置正确。有关如何创建AWS配置文件的说明,请参阅Boto3文档中的凭据以及AWS文档中的配置。
创建配置文件后,将authMechanism
连接选项设置为"MONGODB-AWS"
。您可以通过两种方式设置此选项:通过向MongoClient
构造函数传递参数,或者通过连接字符串中的参数。
假设角色请求
您可以使用PyMongo指示AWS STS端点进行AssumeRole
请求,而不是在AWS配置文件中存储AWS凭据。此请求返回临时凭据,应用程序可以使用这些凭据进行身份验证。
要使用由AssumeRole
请求返回的临时AWS IAM凭证进行身份验证,请确保您的环境中存在AWS配置文件且配置正确。有关如何创建和配置AWS配置文件的说明,请参阅Boto3文档中的凭证以及AWS文档中的配置。
创建配置文件后,设置以下连接选项
username
:由AssumeRole
请求返回的AWS IAM访问密钥ID。在将其包含在连接URI之前,请对此值进行百分号编码。password
:由AssumeRole
请求返回的AWS IAM密钥访问密钥。在将其包含在连接URI之前,请对此值进行百分号编码。authMechanismProperties
:设置为AWS_SESSION_TOKEN:
和由AssumeRole
请求返回的AWS会话令牌。在将其包含在连接URI之前,请对此值进行百分号编码。authMechanism
:设置为"MONGODB-AWS"
。
您可以通过两种方式设置这些选项:通过将参数传递给MongoClient
构造函数或通过连接字符串中的参数。
有关使用AssumeRole
请求对您的应用程序进行身份验证的更多信息,请参阅以下AWS文档
AssumeRoleWithWebIdentity
重要
您的应用程序必须使用pymongo_auth_aws
v1.1.0或更高版本以支持EKS。
如果您的应用程序从OpenID Connect(OIDC)身份提供者对您的EKS集群进行用户身份验证,PyMongo可以通过发送一个AssumeRoleWithWebIdentity
请求,用OIDC令牌交换应用程序的临时AWS凭据。
要使用由AssumeRoleWithWebIdentity
请求返回的临时AWS IAM凭据进行身份验证,请确保您的环境中存在AWS配置文件并且配置正确。有关创建和配置AWS配置文件的说明,请参阅Boto3文档中的Credentials部分,以及AWS文档中的Configuration部分。
配置您的环境以使用AssumeRoleWithWebIdentity
请求后,将authMechanism
连接选项设置为"MONGODB-AWS"
。您可以通过以下两种方式设置此选项:通过传递参数给MongoClient
构造函数,或在您的连接字符串中设置参数。
有关使用AssumeRoleWithWebIdentity
请求对应用程序进行身份验证的更多信息,请参阅以下AWS文档
ECS容器或EC2实例
如果您的应用程序在Amazon Elastic Container Service(ECS)容器中的Amazon Elastic Cloud Compute(EC2)实例上运行,PyMongo可以自动从ECS端点检索临时AWS凭据。
要在EC2实例内部使用临时凭证,将authMechanism
连接选项设置为"MONGODB-AWS"
。您可以通过两种方式设置此选项:通过将参数传递给MongoClient
构造函数或通过连接字符串中的参数。
API文档
要了解如何在PyMongo中验证应用程序,请参阅以下API文档