Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
Pymongo 驱动程序
/ /

Amazon Web Services身份和访问管理

MONGODB-AWS身份验证机制使用Amazon Web Services身份和访问管理 (Amazon Web Services IAM) 或Amazon Web Services Lambda凭证对MongoDB进行用户身份验证。 只有在向MongoDB Atlas进行身份验证时才能使用此机制。

提示

为Amazon Web Services IAM 身份验证配置Atlas

要学习;了解有关为Amazon Web Services IAM身份验证配置MongoDB Atlas 的更多信息,请参阅Atlas文档中的 使用Amazon Web Services IAM 设置身份验证。

本页上的代码示例使用以下占位符:

  • <hostname>: MongoDB Atlas部署的网络解决

  • <AWS IAM access key ID>:您的Amazon Web Services访问密钥ID

  • <AWS IAM secret access key>:您的Amazon Web Services秘密访问权限密钥

  • <AWS session token>:您的Amazon Web Services会话令牌

要使用本页上的代码示例,请将这些占位符替换为您自己的值。

重要

百分比编码

您必须 用户名和密码,然后再将其包含在 MongoDB URI 中。quote_plus()方法,可在 urllib.parse 模块,是执行此任务的一种方法。例如,调用 quote_plus("and / or") 会返回string and+%2F+or

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

要使用Amazon Web Services IAM身份验证,必须使用 aws 选项安装PyMongo ,如以下示例所示:

python -m pip install pymongo[aws]

PyMongo使用 Boto3 (适用于Amazon Web Services 的Python SDK)来处理凭证。Boto3 尝试按列出的顺序从以下来源检索Amazon Web Services档案:

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

  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凭证作为命名参数或连接字符串的一部分传递给 MongoClient 构造函数。 要将您的凭证传递给 MongoClient,设立以下连接选项:

  • username:要进行身份验证的Amazon Web Services IAM访问权限密钥ID 。 在将其包含在连接字符串中之前,对该值进行百分比编码。

  • password: Amazon Web Services IAM 秘密访问权限密钥。 在将其包含在连接字符串中之前,对该值进行百分比编码。

  • authMechanism:设置为"MONGODB-AWS"

您可以通过两种方式设置这些选项:将参数传递给 MongoClient 构造函数,或通过连接string中的参数。

client = pymongo.MongoClient("mongodb+srv://<hostname>",
username="<AWS IAM access key ID>",
password="<AWS IAM secret access key>",
authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:"
"<percent-encoded AWS IAM secret access key>"
"@<hostname>/?"
"&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+srv://<hostname>",
authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&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+srv://<hostname>",
authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&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+srv://<hostname>",
authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&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 文档中。

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

  • username:由 AssumeRole请求返回的用于进行身份验证的Amazon Web Services IAM访问权限密钥ID 。 在将其包含在连接字符串中之前,对该值进行百分比编码。

  • passwordAssumeRole请求返回的Amazon Web Services IAM 秘密访问权限密钥。 在将其包含在连接字符串中之前,对该值进行百分比编码。

  • authMechanismProperties:设置为 AWS_SESSION_TOKEN:AssumeRole请求返回的Amazon Web Services会话令牌。

  • authMechanism:设置为"MONGODB-AWS"

您可以通过两种方式设置这些选项:将参数传递给 MongoClient 构造函数,或通过连接string中的参数。

注意

如果authMechanismProperties值包含逗号,则必须使用MongoClient构造函数来设立身份验证选项。

client = pymongo.MongoClient("mongodb+srv://@<hostname>",
username="<AWS IAM access key ID>",
password="<AWS IAM secret access key>",
authMechanismProperties="AWS_SESSION_TOKEN:<AWS session token>",
authMechanism="MONGODB-AWS")
uri = ("mongodb+srv://<percent-encoded AWS IAM access key ID>:"
"<percent-encoded AWS IAM secret access key>"
"@<hostname>/?"
"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+srv://<hostname>",
authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&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+srv://<hostname>",
authMechanism="MONGODB-AWS")
uri = "mongodb+srv://<hostname>/?&authMechanism=MONGODB-AWS"
client = pymongo.MongoClient(uri)

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

后退

x.509

在此页面上