“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

在 Windows 上使用 Kerberos 身份验证配置 MongoDB

在此页面上

  • 概述
  • 先决条件
  • 步骤
  • 其他注意事项
  • 测试与验证

MongoDB Enterprise 支持使用 Kerberos 服务 进行身份验证。 Kerberos 是一种适用于大型客户端/服务器系统的行业标准身份验证协议。 Kerberos 允许 MongoDB 和应用程序利用现有的身份验证基础架构和流程。 MongoDB Enterprise 仅支持 MIT 实施 Kerberos。

设置和配置 Kerberos 部署超出了本文档的范围。 本教程假定已为每个 mongod.exemongos.exe实例配置了一个Kerberos 服务主体

对于副本集和分片集群,请确保配置使用完全限定的域名 (FQDN),而不是 IP 地址或未限定的主机名。您必须使用 GSSAPI 的 FQDN 才能正确解析 Kerberos Realm 并允许连接。

1

初次添加 Kerberos 用户时,启动 mongod.exe 不支持 Kerberos。

如果 MongoDB 中已经存在 Kerberos 用户,且该用户拥有创建用户所需的权限,那么就可以启动支持 Kerberos 的 mongod.exe

根据您的部署包含其他设置。

注意

leafygreen-ui-lh88kxleafygreen-ui-lh88kx,默认绑定到本地主机。如果部署的成员在不同的主机上运行,或者希望远程客户端连接到部署,则必须指定 --bind_ipnet.bindIp

2

mongosh 连接到 mongod.exe 实例。如果 mongod.exe 已启用 --auth,请确保使用创建用户所需的权限进行连接。

3

$external 数据库中为 MongoDB 添加 Kerberos 主体 <username>@<KERBEROS REALM>。以 ALL UPPERCASE 指定 Kerberos 域。$external 数据库允许 mongod.exe 查询外部来源(例如 Kerberos)进行身份验证。要指定用户的权限,请为用户分配角色

要对 $external 身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证,用户名不能大于 10k 字节。

以下示例将有只读访问权限的 Kerberos 主体 reportingapp@EXAMPLE.NET 添加至 records 数据库:

use $external
db.createUser(
{
user: "reportingapp@EXAMPLE.NET",
roles: [ { role: "read", db: "records" } ]
}
)

根据需要添加额外主体。对于要使用 Kerberos 进行身份验证的每个用户,必须在 MongoDB 中创建相应的用户。有关创建和管理用户的更多信息,请参阅用户管理命令

4

必须以服务主体账户的身份启动 mongod.exe

如需启动支持 Kerberos 的 mongod.exe,请将 mongod.exe 参数 authenticationMechanisms 设置为 GSSAPI

mongod.exe --setParameter authenticationMechanisms=GSSAPI <additional mongod.exe options>

根据配置要求包括其他选项。例如,如果希望远程客户端连接到您的部署,或是您的部署成员运行在不同主机上,请指定 --bind_ip

例如,以下代码启动一个支持 Kerberos 的独立 mongod.exe 实例:

mongod.exe --auth --setParameter authenticationMechanisms=GSSAPI --bind_ip localhost,<hostname(s)|ip address(es)>
5

以 Kerberos 主体 application@EXAMPLE.NET 的身份连接 mongo.exe shell 客户端。

您可以从命令行进行连接和身份验证。

使用 cmd.exe

mongo.exe --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase=$external --username reportingapp@EXAMPLE.NET

使用 Windows PowerShell

mongo.exe --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username reportingapp@EXAMPLE.NET

如果您要连接到主机名与 Kerberos 名称匹配的系统,请确保为 --host 选项指定完全限定域名 (FQDN),而不是 IP 地址或非限定主机名。

如果要连接到主机名与 Kerberos 名称不匹配的系统,请首先将 mongo.exe 连接到 mongod.exe,然后从 mongo.exe Shell 中使用 db.auth() 方法在 $external 数据库中进行身份验证。

use $external
db.auth( { mechanism: "GSSAPI", user: "reportingapp@EXAMPLE.NET" } )

如需启动支持 Kerberos 的 mongos.exe,请将 mongos.exe 参数 authenticationMechanisms 设置为 GSSAPI。必须以服务主体账户的身份启动 mongos.exe

mongos.exe --setParameter authenticationMechanisms=GSSAPI <additional mongos options>

根据配置要求包括其他选项。例如,如果希望远程客户端连接到您的部署,或是您的部署成员运行在不同主机上,请指定 --bind_ip

例如,以下操作启动了支持 Kerberos 的 mongos 实例:

mongos.exe --setParameter authenticationMechanisms=GSSAPI --configdb shard0.example.net, shard1.example.net,shard2.example.net --keyFile C:\<path>\mongos.keyfile --bind_ip localhost,<hostname(s)|ip address(es)>

根据配置需要修改或添加任何其他 mongos.exe 选项。例如,您可以使用 x.509 节点身份验证,而不是使用 --keyFile 对分片集群节点进行内部身份验证。

使用 setspn.exe 将服务主体名称(SPN)分配给运行 mongod.exemongos.exe 服务的账号:

setspn.exe -S <service>/<fully qualified domain name> <service account name>

例子

如果 mongod.exe 作为名为 mongodb 的服务在 testserver.mongodb.com 上使用服务帐户名称 mongodtest 运行,则按如下方式分配 SPN:

setspn.exe -S mongodb/testserver.mongodb.com mongodtest

Kerberos 身份验证 (GSSAPI (Kerberos)) 可以与以下功能配合使用:

  • MongoDB 的 SCRAM 身份验证机制:

  • MongoDB 的 LDAP 身份验证机制:

  • MongoDB 的 x.509 身份验证机制:

指定机制如下:

--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256

只有在使用时才添加其他机制。该参数设置不会影响 MongoDB 对集群节点的内部身份验证。

完成配置步骤后,可以使用 mongokerberos 工具验证配置。

mongokerberos 提供了一种便捷的方法,以验证您的平台的 Kerberos 配置是否与 MongoDB 一起使用,并测试 MongoDB 客户端的 Kerberos 身份验证是否按预期运行。有关更多信息,请参阅 mongokerberos 文档。

mongokerberos 仅在 MongoDB Enterprise 中可用。

← 在 Linux 上使用 Kerberos 身份验证配置 MongoDB