身份验证机制
在此页面上
Overview
本指南介绍了可在 PyMongo 中用于对用户进行身份验证的机制。
重要
百分比编码
必须先对用户名和密码进行 百分号编码 ,然后才能将其包含在MongoDB URI 中。quote_plus()
urllib.parse 模块中提供的 方法是执行此任务的一种方法。示例,调用 会返回字符串quote_plus("and / or")
stringand+%2F+or
。
将用户名或密码作为参数传递给MongoClient
时,不要对用户名或密码进行百分号编码。
SCRAM-SHA-256
SCRAM-SHA-256 ,由 RFC7677 定义 ,是运行 MongoDB v 的 MongoDB 部署上的默认身份验证机制。40或更高版本。
要使用此机制进行身份验证,请设置以下连接选项:
db_username
:要进行身份验证的用户名。 在将其包含在连接 URI 中之前,对该值进行百分比编码。db_password
:用于身份验证的密码。 在将其包含在连接 URI 中之前,对该值进行百分比编码。authSource
:要进行身份验证的MongoDB database 。 默认情况下,PyMongo 根据连接 URI 中的数据库进行身份验证(如果包含数据库)。 如果没有,则会根据admin
数据库进行身份验证。authMechanism
:设置为SCRAM-SHA-256
。
您可以通过两种方式设置这些选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="<db_username>", password="<db_password>", authSource="<authentication database>", authMechanism="SCRAM-SHA-256")
uri = ("mongodb://<percent-encoded db_username>:<percent-encoded db_password>" "@<hostname>:<port>/?" "authSource=<authentication database>" "&authMechanism=SCRAM-SHA-256") client = pymongo.MongoClient(uri)
SCRAM-SHA-1
SCRAM-SHA-1 ,由 RFC5802 定义 ,是运行 MongoDB v 的 MongoDB 部署上的默认身份验证机制。 。36
要使用此机制进行身份验证,请设置以下连接选项:
db_username
:要进行身份验证的用户名。 在将其包含在连接 URI 中之前,对该值进行百分比编码。db_password
:用于身份验证的密码。 在将其包含在连接 URI 中之前,对该值进行百分比编码。authSource
:要进行身份验证的MongoDB database 。 默认情况下,PyMongo 根据admin
数据库进行身份验证。authMechanism
:设置为"SCRAM-SHA-1"
。
您可以通过两种方式设置这些选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", username="<db_username>", password="<db_password>", authSource="<authentication database>", authMechanism="SCRAM-SHA-1")
uri = ("mongodb://<percent-encoded db_username>:<percent-encoded db_password>" "@<hostname>:<port>/?" "authSource=<authentication database>" "&authMechanism=SCRAM-SHA-1") client = pymongo.MongoClient(uri)
MONGODB-X509
如果启用 TLS,则在 TLS 握手期间,PyMongo 可以向 MongoDB 提供 X. 509客户端证书以证明其身份。 MONGODB-X 509身份验证机制使用此证书对客户端进行身份验证。
要使用此机制进行身份验证,请设置以下连接选项:
tls
:设置为True
。tlsCertificateKeyFile
:包含客户端证书和私钥的.pem
文件的文件路径。authMechanism
:设置为"MONGODB-X509"
。
您可以通过两种方式设置这些选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", tls=True, tlsCertificateKeyFile="/path/to/client.pem", authMechanism="MONGODB-X509")
uri = ("mongodb://<hostname>:<port>/?" "tls=true" "&tlsCertificateKeyFile=path/to/client.pem" "&authMechanism=MONGODB-X509") client = pymongo.MongoClient(uri)
MONGODB-AWS
重要
MONGODB-AWS 身份验证机制需要 MongoDB v 4.4或更高版本。
MONGODB- Amazon Web Services身份验证机制使用Amazon Web Services IAM( Amazon Web Services身份和访问管理)或Amazon Web Services Lambda档案对应用程序进行身份验证。 要使用 MONGODB-AWS 进行身份验证,必须使用aws
选项安装 PyMongo,如以下示例所示:
python -m pip install pymongo[aws]
PyMongo使用 Boto3 (适用于Amazon Web Services 的Python SDK)来处理凭证。Boto3 尝试按列出的顺序从以下来源检索Amazon Web Services档案:
传递给
MongoClient
构造函数的命名参数或连接 URI 中的参数环境变量
共享凭证文件
Amazon Web Services配置文件
AssumeRole
向Amazon Web Services Security Token Service (STS) 发出请求AssumeRoleWithWebIdentity
向Amazon Web Services STS 发送请求配置了 IAM 角色的 Amazon EC 2实例上的实例元数据服务
以下部分介绍如何使用 PyMongo 从这些来源检索档案,并使用它们对应用程序进行身份验证。
MongoClient
凭证
首先, PyMongo检查您是否将Amazon Web Services档案作为命名参数或连接 URI 的一部分传递给 MongoClient
构造函数。 要将您的档案传递给MongoClient
,请设置以下连接选项:
username
:要进行身份验证的Amazon Web Services IAM 访问密钥ID 。 在将其包含在连接 URI 中之前,对该值进行百分比编码。password
: Amazon Web Services IAM 秘密访问密钥。 在将其包含在连接 URI 中之前,对该值进行百分比编码。authMechanism
:设置为"MONGODB-AWS"
。
您可以通过两种方式设置这些选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://@<hostname>:<port>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanism="MONGODB-AWS")
uri = ("mongodb://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>:<port>/?" "&authMechanism=MONGODB-AWS") client = pymongo.MongoClient(uri)
环境变量
如果在构造 MongoClient
对象时未提供用户名和密码, PyMongo尝试从以下环境变量中检索Amazon Web Services档案:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN
要使用这些环境变量对应用程序进行身份验证,请先将它们设置为身份验证所需的Amazon Web Services 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
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
提示
AWS Lambda
Amazon Web Services Lambda运行时可以在初始化期间自动设立这些环境变量。 有关在Amazon Web ServicesLambda 环境中使用环境变量的更多信息,请参阅 使用Lambda 环境变量 在Amazon Web Services 文档中。
共享凭证文件
如果PyMongo在上述环境变量中没有找到Amazon Web Services档案,它会尝试从共享档案文件中读取这些档案。
要使用共享凭证文件对应用程序进行身份验证,请确保该文件在您的环境中存在并且配置正确。 要了解如何创建共享凭证文件,请参阅 3凭证 在 Boto 文档和 配置 中 在Amazon Web Services 文档中。
创建共享凭证文件后,将authMechanism
连接选项设置为"MONGODB-AWS"
。 您可以通过两种方式设置此选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
提示
要防止 PyMongo 使用共享凭证文件进行身份验证,请执行以下操作之一:
在终端中将
AWS_SHARED_CREDENTIALS_FILE
环境变量设置为""
。将
os.environ["AWS_SHARED_CREDENTIALS_FILE"] = ""
添加到脚本或应用程序中。Amazon Web Services专门为您的MongoDB 档案创建 配置文件。将
AWS_PROFILE
环境变量设置为您创建的配置文件的名称。
Amazon Web Services配置文件
如果PyMongo在共享凭证文件中没有找到凭证,它会尝试从Amazon Web Services配置文件中读取凭证。
要使用Amazon Web Services配置文件对应用程序进行身份验证,请确保该文件存在于您的环境中并且配置正确。 要了解如何创建Amazon Web Services 配置文件,请参阅 3凭证 在 Boto 文档和 配置 中 在Amazon Web Services 文档中。
创建配置文件后,将authMechanism
连接选项设置为"MONGODB-AWS"
。 您可以通过两种方式设置此选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
AssumeRole 请求
Amazon Web ServicesAmazon Web Services您可以指示PyMongo AssumeRole
向Amazon Web Services STS 端点发出 请求,而不是将 凭证存储在 配置文件中。此请求会返回应用程序可用于身份验证的临时凭证。
要使用 AssumeRole
请求返回的临时Amazon Web Services IAM 凭证进行身份验证,请确保您的环境中存在Amazon Web Services配置文件并且已正确配置。 要了解如何创建和配置Amazon Web Services 配置文件,请参阅 3凭证 在 Boto 文档和 配置 中 在Amazon Web Services 文档中。
创建配置文件后,设置以下连接选项:
username
:AssumeRole
请求返回的用于进行身份验证的Amazon Web Services IAM 访问密钥ID 。 在将其包含在连接 URI 中之前,对该值进行百分比编码。password
:AssumeRole
请求返回的Amazon Web Services IAM 秘密访问密钥。 在将其包含在连接 URI 中之前对此值进行百分比编码。authMechanismProperties
:设置为AWS_SESSION_TOKEN:
和AssumeRole
请求返回的Amazon Web Services会话令牌。authMechanism
:设置为"MONGODB-AWS"
。
您可以通过两种方式设置这些选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
注意
如果authMechanismProperties
值包含逗号,则必须使用MongoClient
构造函数来设立身份验证选项。
client = pymongo.MongoClient("mongodb://@<hostname>:<port>", username="<AWS IAM access key ID>", password="<AWS IAM secret access key>", authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>", authMechanism="MONGODB-AWS")
uri = ("mongodb://<percent-encoded AWS IAM access key ID>:" "<percent-encoded AWS IAM secret access key>" "@<hostname>:<port>/?" "authMechanismProperties=AWS_SESSION_TOKEN:<AWS session token>" "&authMechanism=MONGODB-AWS") client = pymongo.MongoClient(uri)
有关使用 AssumeRole
请求对应用程序进行身份验证的更多信息,请参阅以下Amazon Web Services文档:
AssumeRoleWithWebIdentity
重要
您的应用程序必须使用pymongo_auth_aws
v 1.1.0或更高版本才能支持 EKS。
如果您的应用程序对来自 OpenID Connect (OIDC) 身份提供程序的 EKS 集群的用户进行身份验证, PyMongo可以发出 AssumeRoleWithWebIdentity
请求,将 OIDC 令牌交换为应用程序的临时Amazon Web Services凭证。
要使用 AssumeRoleWithWebIdentity
请求返回的临时Amazon Web Services IAM 凭证进行身份验证,请确保您的环境中存在Amazon Web Services配置文件并且已正确配置。 要了解如何创建和配置Amazon Web Services 配置文件,请参阅 3凭证 在 Boto 文档和 配置 中 在Amazon Web Services 文档中。
为AssumeRoleWithWebIdentity
请求配置环境后,将authMechanism
连接选项设置为"MONGODB-AWS"
。 您可以通过两种方式设置此选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
有关使用 AssumeRoleWithWebIdentity
请求对应用程序进行身份验证的更多信息,请参阅以下Amazon Web Services文档:
ECS 容器或 EC 2实例
如果您的应用程序在弹性容器服务 (ECS) 容器中的Amazon Elastic Cloud Compute (EC2) 实例中运行, PyMongo可以自动从 ECS 端点检索临时Amazon Web Services凭证。
要使用 EC 2实例中的临时档案,请将authMechanism
连接选项设置为"MONGODB-AWS"
。 您可以通过两种方式设置此选项:将参数传递给 MongoClient
构造函数,或通过连接string中的参数。
client = pymongo.MongoClient("mongodb://<hostname>:<port>", authMechanism="MONGODB-AWS")
uri = "mongodb://<hostname>:<port>/?&authMechanism=MONGODB-AWS" client = pymongo.MongoClient(uri)
API 文档
要了解有关在 PyMongo 中对应用程序进行身份验证的更多信息,请参阅以下 API 文档: