管理 Amazon DocumentDB 用户

在 Amazon DocumentDB 中,将用户与密码一起使用才能通过集群的身份验证。每个集群都有一个在集群创建过程中建立的主用户和密码。

注意

所有在 2020 年 3 月 26 日之前创建的新用户都已被授予 dbAdminAnyDatabasereadWriteAnyDatabaseclusterAdmin 角色。建议您重新评估所有用户并根据需要修改角色,以便为集群中所有用户强制执行最低权限。

有关更多信息,请参阅 使用基于角色的访问控制(内置角色)限制数据库访问

主用户和 serviceadmin 用户

新创建的 Amazon DocumentDB 集群有两个用户:主用户和 serviceadmin 用户。

主用户 是单个特权用户,可以执行管理任务并创建具有角色的其他用户。因此,在首次连接到 Amazon DocumentDB 集群时,您必须使用主用户的用户名和密码进行身份验证。主用户在创建 Amazon DocumentDB 集群时收到该集群的这些管理权限,并被授予 root 角色。

在创建集群时会隐式创建 serviceadmin 用户。每个 Amazon DocumentDB 集群有一个 serviceadmin 用户,该用户为 AWS 提供管理集群的功能。您无法登录、删掉、重命名、更改密码,或者修改 serviceadmin 的权限。任何此类尝试都会导致错误。

注意

无法删除 Amazon DocumentDB 集群的主用户和 serviceadmin 用户,也无法撤销主用户的 root 角色。

如果您忘记了主用户的密码,则可以使用 AWS 管理控制台 或 AWS CLI 重置密码。

创建其他用户

作为主用户(或具有 createUser 角色的任何用户)连接后,您可以创建新用户,如下所示。

  1. db.createUser(
  2. {
  3. user: "sample-user-1",
  4. pwd: "password123",
  5. roles:
  6. [{"db":"admin", "role":"dbAdminAnyDatabase" }]
  7. }
  8. )

要查看用户的详细信息,可以使用 show users 命令,如下所示。您还可以使用 dropUser 命令删除用户。有关更多信息,请参阅常见命令

  1. show users
  2. {
  3. "_id" : "serviceadmin",
  4. "user" : "serviceadmin",
  5. "db" : "admin",
  6. "roles" : [
  7. {
  8. "role" : "root",
  9. "db" : "admin"
  10. }
  11. ]
  12. },
  13. {
  14. "_id" : "myMasterUser",
  15. "user" : "myMasterUser",
  16. "db" : "admin",
  17. "roles" : [
  18. {
  19. "role" : "root",
  20. "db" : "admin"
  21. }
  22. ]
  23. },
  24. {
  25. "_id" : "sample-user-1",
  26. "user" : "sample-user-1",
  27. "db" : "admin",
  28. "roles" : [
  29. {
  30. "role" : "dbAdminAnyDatabase",
  31. "db" : "admin"
  32. }
  33. ]
  34. }

在上面的示例中,新用户 sample-user-1admin 数据库的限制。新用户始终如此。Amazon DocumentDB 没有 authenticationDatabase 的概念,所以会在 admin 数据库上下文中执行所有身份验证。

在创建用户时,如果在指定角色时省略 db 字段,则 Amazon DocumentDB 会隐式地将该角色归属于发出连接的数据库。例如,如果您的连接是针对数据库 sample-database 发出的,并且您运行以下命令,则用户 sample-user-2 将在 admin 数据库中创建并具有对数据库 sample-databasereadWrite 权限。

  1. db.createUser(
  2. {
  3. user: "sample-user-2",
  4. pwd: "password123",
  5. roles:
  6. [{role: "readWrite"}]
  7. }
  8. )

创建具有跨所有数据库范围的角色的用户(例如,readInAnyDatabase)需要在创建用户时处于 admin 数据库上下文,或者在创建用户时明确指定角色的数据库。

要切换数据库上下文,可以使用以下命令。

  1. use admin

要了解有关基于角色的访问控制以及对集群用户强制执行最低权限的更多信息,请参阅使用基于角色的访问控制(内置角色)限制数据库访问

自动轮换 Amazon DocumentDB 密码

通过 AWS Secrets Manager,您可以将代码中的硬编码凭证(包括密码)替换为对 Secrets Manager 的 API 调用,以便以编程方式检索密钥。这有助于确保检查您的代码的人不会泄露密钥,因为其中根本不包含密钥。此外,您还可以配置 Secrets Manager 以根据指定的计划自动轮换密钥。这使您能够将长期密钥替换为短期密钥,这有助于显著减少泄露风险。

使用 Secrets Manager,您可以通过 Secrets Manager 提供的 AWS Lambda 函数自动轮换 Amazon DocumentDB 密码(即密钥)。

有关 AWS Secrets Manager 以及与 Amazon DocumentDB 的本机集成的更多信息,请参阅以下内容: