Overview
注意
Amazon Web Services身份验证仅在MongoDB Enterprise for MongoDB 4.4 及更高版本中可用。
MONGODB-AWS身份验证机制使用 AWS 身份和访问管理 (IAM) 以及 AWS 安全令牌服务 (STS) 向MongoDB 部署证明客户端的身份。以下步骤描述了 AWS身份验证进程:
客户端使用 AWS IAM凭证创建签名并将其发送到MongoDB 部署。
此部署使用客户端签名向Amazon Web Services STS 发送请求。
如果请求成功,STS 将返回与客户端凭证对应的 IAM 用户或角色的Amazon资源名称 (ARN)。
部署使用返回的 ARN 来查找用户。客户端以此用户身份进行身份验证。
注意
客户端和服务器使用不同的用户名。客户端将 AWS访问权限密钥ID作为用户名发送。服务器使用与访问权限密钥ID对应的 IAM 用户或角色的 ARN 作为用户名。
要使用此机制进行身份验证,请执行以下操作:
在
$external数据库上创建一个用户,其名称是您要进行身份验证的 IAM 用户或角色的 ARN。配置客户端以使用
MONGODB-AWS身份验证机制。
Amazon Web Services凭证
Amazon Web Services凭证包括以下组件:
访问密钥 ID
秘密访问密钥
可选会话令牌
使用 AWS IAM凭证进行身份验证会使用访问权限密钥ID和秘密访问权限密钥。使用临时 AWS IAM凭证进行的身份验证会使用所有三个组件:访问权限密钥ID、秘密访问权限密钥和会话令牌。
注意
驱动程序从不通过网络发送秘密访问密钥或会话令牌。
临时凭证用于:
代码占位符
本页上的代码示例使用以下占位符:
<hostname>: MongoDB 部署的网络解决。<port>: MongoDB 部署的端口号。<aws_access_key_id>:AWS访问权限密钥ID。<aws_secret_access_key>:AWS 秘密访问权限密钥。<aws_session_token>:AWS 会话令牌。
要使用本页上的代码示例,请将这些占位符替换为您自己的值。
在应用程序中使用Amazon Web Services IAM 身份验证
C++驾驶员可以从环境中检索AWS IAM凭证,您也可以在应用程序代码中显式提供这些凭证。
当您使用 MONGODB-AWS身份验证机制时, C++驾驶员会尝试按以下顺序从以下源检索AWS凭证:
在连接 URI 中传递的档案
环境变量
Amazon Web Services EKS AssumeRoleWithWebIdentity请求
ECS容器元数据
EC 2实例元数据
显式提供档案
您可以在连接 URI 中提供长期(非临时)IAM凭证。为此,设立以下 URI 参数:
username:设置为您的 AWS访问权限密钥ID。password:设置为您的 AWS 秘密访问权限密钥。authMechanism:设置为MONGODB-AWS。
您可以单独使用连接 URI,也可以使用带有通过 mongocxx::options::tls 和 mongocxx::options::client 类配置的 TLS 选项的连接 URI。选择 Connection URI 或 Client Options with TLS标签页,查看相应的语法:
注意
如果在 URI 中提供凭证,请对访问权限密钥ID或秘密访问权限密钥中的任何特殊字符进行百分号编码。
提供临时凭证
您可以通过将会话令牌包含在连接 URI 的 authMechanismProperties 参数中,在连接 URI 中提供临时 IAM凭证。
选择 Connection URI 或 Client Options with TLS标签页,查看相应的语法:
自动检索档案
当您指定 MONGODB-AWS身份验证机制并省略 username 和 password 时, C++驾驶员会自动尝试从环境变量、Web 身份角色和 AWS元数据端点检索AWS凭证。
环境变量
C++驾驶员首先检查以下环境变量中的凭证:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN(可选)
这些变量可由许多 AWS 工具和软件开发工具包(例如 AWS CLI )识别,并且通常在 AWS Lambda环境中设立。
设置这些变量的示例:
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>
设立这些环境变量后,将连接 URI 中的 authMechanism 参数设立为 "MONGODB-AWS"。选择 Connection URI 或 Client Options with TLS标签页,查看相应的语法:
AssumeRoleWithWebIdentity
如果您的应用程序在Amazon EKS集群中运行并通过 OpenID Connect (OIDC) 身份提供商进行身份验证,则C++驾驶员可以使用 AssumeRoleWithWebIdentity请求。此请求将 OIDC 令牌交换为应用程序的临时 AWS凭证。
要配置此机制:
创建或更新AWS 配置文件。要学习;了解如何创建此配置文件,请参阅全局配置 AWS SDK 和工具。
设置以下环境变量:
AWS_ROLE_ARN:设置为要代入 IAM角色的 ARN。AWS_WEB_IDENTITY_TOKEN_FILE:设置为包含服务帐户的 OIDC 令牌的文件的路径。AWS_ROLE_SESSION_NAME(可选):设置为假定角色会话的标识符。如果省略此变量,驾驶员将生成一个随机标识符。
将连接 URI 中的
authMechanism参数设置为"MONGODB-AWS"。
选择 Connection URI 或 Client Options with TLS标签页,查看相应的语法:
要学习;了解有关使用 Web 身份角色进行身份验证的更多信息,请参阅 AssumeRoleWithWebIdentity API
ECS 任务元数据
如果您的应用程序在Amazon ECS容器中运行,C++驾驶员可以从 ECS任务元数据端点检索临时 AWS凭证。
要启用此行为,请将 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 环境变量设立为 ECS任务元数据端点的相对 URI,如以下示例所示:
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<relative URI of the ECS task metadata endpoint>
然后构建客户端,并将 authMechanism设立为 "MONGODB-AWS"。选择 Connection URI 或 Client Options with TLS标签页,查看相应的语法:
EC 2实例元数据
如果您的应用程序在Amazon EC2实例上运行,C++驾驶员可以从 EC2实例元数据端点检索临时 AWS凭证。
要启用此行为,请将连接 URI 中的 authMechanism 参数设立为 "MONGODB-AWS"。选择 Connection URI 或 Client Options with TLS标签页,查看相应的语法:
注意
如果您通过上述 AWS 身份验证方法设立了任何环境变量,则 C++ 驱动程序会尝试使用这些方法检索凭证,然后再尝试从 EC2 实例中检索凭证。要尝试仅从 EC2实例检索凭证,请确保未设立环境变量。
如果应用程序在 EC2实例上的 ECS容器中运行,并且允许该容器访问实例元数据,则驱动程序会尝试从 EC2实例元数据终结点检索AWS凭证。如果驱动程序以这种方式检索凭证,您的应用程序可以作为分配给 EC2实例的 IAM角色进行身份验证。
要学习;了解如何阻止容器访问 EC2实例元数据,请参阅Amazon Web Services文档。
API 文档
要学习;了解有关在C++驾驶员中创建 mongocxx::client对象或配置 TLS 的更多信息,请参阅以下API文档: