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

在本页面

2.6 版的新功能。

Overview

MongoDB Enterprise 支持使用Kerberos service进行身份验证。 Kerberos 是用于大型 Client 端/服务器系统的行业标准身份验证协议。 Kerberos 允许 MongoDB 和应用程序利用现有的身份验证基础结构和流程。

Prerequisites

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

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

Procedures

在不使用 Kerberos 的情况下启动 mongod.exe。

对于最初添加的 Kerberos 用户,请在不支持 Kerberos 的情况下启动mongod.exe

如果 Kerberos 用户已经在 MongoDB 中并且具有创建用户所需的特权,则可以使用 Kerberos 支持来启动mongod.exe

包括适合您的部署的其他设置。

Note

从 MongoDB 3.6 开始,默认情况下mongodmongos绑定到 localhost。如果部署的成员在不同的主机上运行,或者希望远程 Client 端连接到部署,则必须指定--bind_ipnet.bindIp。有关更多信息,请参见Localhost 绑定兼容性更改

连接到 mongod。

通过mongo.exe Shell 连接到mongod.exe实例。如果mongod.exe已启用--auth,请确保您与创建用户所需的特权连接。

将 Kerberos 主体添加到 MongoDB。

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

在版本 3.6.3 中更改:要与$external个身份验证用户(即 Kerberos,LDAP,x.509 用户)一起使用会话,用户名不能超过 10k 字节。

下面的示例添加对records数据库具有只读访问权限的 Kerberos 主体reportingapp@EXAMPLE.NET

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

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

使用 Kerberos 支持启动 mongod.exe。

您必须以mongod.exe作为服务本金账户开头。

要以 Kerberos 支持启动mongod.exe,请将mongod.exe参数authenticationMechanisms设置为GSSAPI

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

包括配置所需的其他选项。例如,如果您希望远程 Client 端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定--bind_ip。有关更多信息,请参见Localhost 绑定兼容性更改

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

mongod.exe --auth --setParameter authenticationMechanisms=GSSAPI --bind_ip localhost,<ip address>

将 mongo.exe shell 连接到 mongod.exe 并进行身份验证。

mongo.exe shellClient 端连接为 Kerberos 主体application@EXAMPLE.NET

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

使用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 名称不匹配的系统,请使用--gssapiHostName指定它响应的 Kerberos FQDN。

或者,您可以先将mongo.exe连接到mongod.exe,然后从mongo.exe shell 中使用db.auth()方法在$external数据库中进行身份验证。

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

Additional Considerations

为 Kerberos 配置 mongos.exe

要以 Kerberos 支持启动mongos.exe,请将mongos.exe参数authenticationMechanisms设置为GSSAPI。您必须以服务本金账户开头mongos.exe

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

包括配置所需的其他选项。例如,如果您希望远程 Client 端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定--bind_ip。有关更多信息,请参见Localhost 绑定兼容性更改

例如,以下代码启动具有 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,<ip address>

根据您的配置要求修改或包括其他mongos.exe个选项。例如,您可以使用x.509 成员身份验证代替使用--keyFile进行分片群集成员的内部身份验证。

将服务主体名称分配给 MongoDB Windows 服务

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

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

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

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

合并其他身份验证机制

Kerberos 身份验证(GSSAPI(Kerberos))可以与以下各项协同工作:

指定以下机制:

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

仅在使用时添加其他机制。此参数设置不会影响 MongoDB 对集群成员的内部身份验证。

首页