Docs 菜单
Docs 主页
/ / /
pymongo
/

身份验证机制

在此页面上

  • Overview
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-X509
  • MONGODB-AWS
  • MongoClient 凭证
  • 环境变量
  • 共享凭证文件
  • Amazon Web Services配置文件
  • AssumeRole 请求
  • AssumeRoleWithWebIdentity
  • ECS 容器或 EC 2实例
  • API 文档

本指南介绍了可在 PyMongo 中用于对用户进行身份验证的机制。

重要

百分比编码

必须先对用户名和密码进行 百分号编码 ,然后才能将其包含在MongoDB URI 中。quote_plus()urllib.parse 模块中提供的 方法是执行此任务的一种方法。示例,调用 会返回字符串quote_plus("and / or") stringand+%2F+or

将用户名或密码作为参数传递给MongoClient时,不要对用户名或密码进行百分号编码。

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 ,由 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)

如果启用 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 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档案:

  1. 传递给MongoClient构造函数的命名参数或连接 URI 中的参数

  2. 环境变量

  3. 共享凭证文件

  4. Amazon Web Services配置文件

  5. AssumeRole 向Amazon Web Services Security Token Service (STS) 发出请求

  6. AssumeRoleWithWebIdentity 向Amazon Web Services STS 发送请求

  7. 配置了 IAM 角色的 Amazon EC 2实例上的实例元数据服务

以下部分介绍如何使用 PyMongo 从这些来源检索档案,并使用它们对应用程序进行身份验证。

首先, 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环境变量设置为您创建的配置文件的名称。

如果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)

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 文档中。

创建配置文件后,设置以下连接选项:

  • usernameAssumeRole 请求返回的用于进行身份验证的Amazon Web Services IAM 访问密钥ID 。 在将其包含在连接 URI 中之前,对该值进行百分比编码。

  • passwordAssumeRole 请求返回的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文档:

重要

您的应用程序必须使用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) 容器中的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)

要了解有关在 PyMongo 中对应用程序进行身份验证的更多信息,请参阅以下 API 文档:

后退

保护您的数据