我想对使用 Amazon DocumentDB(兼容 MongoDB)时遇到的身份验证问题进行故障排除。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
如果您使用 AWS Identity and Access Management (IAM) 对 Amazon DocumentDB 进行身份验证,则可能会收到 "MongoServerError: Authentication failed" 错误。如果您为 IAM 实体配置的权限有误,则在使用 IAM 角色时也可能会收到身份验证错误。
**注意:**Amazon DocumentDB 仅在 5.0 及更高版本的集群(基于实例的集群)上支持基于 IAM 的身份验证。Amazon DocumentDB 主用户不支持基于 IAM 的身份验证。
查看数据库用户和角色配置
完成以下步骤:
-
使用 MongoDB Shell 以根用户身份登录到您的 Amazon DocumentDB 集群。
-
要检查您的 IAM 实体(IAM 用户或 IAM 角色 ARN)是否已在 $external 数据库中正确设置,请在 MongoDB Shell 中运行以下命令:
use $external;
show users;
-
确保在 $external 数据库中注册了 IAM 用户和 IAM 角色的 IAM ARN。还要确认您为目标数据库分配了所需的角色和权限。
验证连接字符串
当您连接到 Amazon DocumentDB 集群时,请确保您的客户端在连接字符串中正确指定了 AuthSource 和 AuthMechanim。IAM 身份验证要求您将 MONGODB-AWS 机制与 AuthSource=$external 结合使用。
使用 IAM 身份验证连接到 MongoDB 集群
确认您的 IAM 用户或 IAM 角色具有访问 MongoDB 集群的相应权限:
mongo "mongodb://<access_key>:<secret_key>@<cluster_endpoint>:<db_port>/test?authSource=%24external&authMechanism=MONGODB-AWS"
**注意:**将 access_key 替换为您的 AWS 访问密钥 ID。将 secret_key 替换为您的 AWS 密钥。将 cluster_endpoint 替换为您的 Amazon DocumentDB 集群端点。将 db_port 替换为您的数据库端口号。默认数据库端口号为 27017。
使用 AWS 环境凭证连接到 MongoDB 集群
确认您可以使用 AWS 环境凭证连接到 MongoDB 集群:
mongo "mongodb://<cluster_endpoint>:<db_port>/test?authSource=%24external&authMechanism=MONGODB-AWS"
**注意:**将 cluster_endpoint 替换为您的 Amazon DocumentDB 集群端点。将 db_port 替换为您的数据库端口号。默认数据库端口号为 27017。
客户端会自动从环境中检索临时凭证。这包括来自以下 AWS 服务角色的凭证:
- Amazon Elastic Cloud Compute (Amazon EC2) 实例配置文件
- Amazon Elastic Container Service (Amazon ECS) 任务角色
- AWS Lambda 执行角色
- Amazon Elastic Kubernetes Service (Amazon EKS) 服务账户角色。
验证 IAM 角色或 IAM 用户在客户端上是否处于活动状态
如果您没有为 Amazon EC2 或 AWS Lambda 显式传递 AWS 凭证,请确保已将 IAM 角色附加到计算资源。
如果您没有为 Amazon EKS 显式传递 AWS 凭证,请验证容器组 (pod) 或服务账户是否具有正确的 IAM 角色注释和映射。此外,请确保已将 IAM 角色附加到计算资源。
要检查有效的 IAM 身份,请运行以下 get-caller-identity 命令:
aws sts get-caller-identity
输出示例:
{
"UserId": "AIDATOCZW5HO####T22",
"Account": "236411349###",
"Arn": "arn:aws:iam::`444455556666`:user/DocDBRole"
}
如果输出与 IAM 用户或 IAM 角色相匹配,则 $external 数据库已正确配置您的 ARN。
**注意:**Amazon DocumentDB 不支持 6.13.1 及更早版本的 Node.js 驱动程序。要将 Node.js 驱动程序与适用于 Amazon DocumentDB 的 IAM 结合使用,必须将 Node.js 驱动程序和工具升级到高于 6.13.1 的版本。
相关信息
使用 IAM 身份进行身份验证