跳至内容

如何使用 Amazon DocumentDB 处理基于 IAM 的身份验证问题?

2 分钟阅读
0

我想对使用 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 的身份验证。

查看数据库用户和角色配置

完成以下步骤:

  1. 使用 MongoDB Shell 以根用户身份登录到您的 Amazon DocumentDB 集群。

  2. 要检查您的 IAM 实体(IAM 用户或 IAM 角色 ARN)是否已在 $external 数据库中正确设置,请在 MongoDB Shell 中运行以下命令:

    use $external;
    show users;
  3. 确保在 $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 身份进行身份验证

AWS 官方已更新 6 个月前