On this page
在 Windows 上使用 Kerberos 身份验证配置 MongoDB
在本页面
2.6 版的新功能。
Overview
MongoDB Enterprise 支持使用Kerberos service进行身份验证。 Kerberos 是用于大型 Client 端/服务器系统的行业标准身份验证协议。 Kerberos 允许 MongoDB 和应用程序利用现有的身份验证基础结构和流程。
Prerequisites
设置和配置 Kerberos 部署超出了本文档的范围。本教程假定为每个mongod.exe和mongos.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 开始,默认情况下mongod和mongos绑定到 localhost。如果部署的成员在不同的主机上运行,或者希望远程 Client 端连接到部署,则必须指定--bind_ip
或net.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.exe
和mongos.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))可以与以下各项协同工作:
MongoDB 的质询/响应身份验证机制:
-
- MONGODB-CR(* MongoDB 3.6 中已弃用*)
MongoDB 的 LDAP 认证机制:
PLAIN(LDAP SASL)
MongoDB 的 x.509 身份验证机制:
指定以下机制:
--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-1
仅在使用时添加其他机制。此参数设置不会影响 MongoDB 对集群成员的内部身份验证。