在 Windows 上使用 Kerberos 身份验证配置自管理 MongoDB
Overview
MongoDB Enterprise支持使用 Kerberos服务进行身份验证。 Kerberos是一种适用于大型客户端/服务器系统的行业标准身份验证协议。 Kerberos允许MongoDB和应用程序利用现有的身份验证基础架构和流程。 MongoDB Enterprise仅支持 MIT实施 的Kerberos。
先决条件
设置和配置 Kerberos 部署超出了本文档的范围。 本教程假定已为每个 mongod.exe
和mongos.exe
实例配置了一个Kerberos 服务主体。
对于副本集和分片集群,请确保配置使用完全限定的域名 (FQDN),而不是 IP 地址或未限定的主机名。您必须使用 GSSAPI 的 FQDN 才能正确解析 Kerberos Realm 并允许连接。
步骤
mongod.exe
在不Kerberos的情况下启动 。
初次添加 Kerberos 用户时,启动 mongod.exe
不支持 Kerberos。
如果 MongoDB 中已经存在 Kerberos 用户,且该用户拥有创建用户所需的权限,那么就可以启动支持 Kerberos 的 mongod.exe
。
根据您的部署包含其他设置。
注意
leafygreen-ui-tqgtui 和 leafygreen-ui-tqgtui,默认绑定到本地主机。如果部署的成员在不同的主机上运行,或者希望远程客户端连接到部署,则必须指定 --bind_ip
或 net.bindIp
。
连接到mongod
。
将 mongosh
连接到 mongod.exe
实例。如果 mongod.exe
已启用 --auth
,请确保使用创建用户所需的权限进行连接。
将 Kerberos 主体添加到 MongoDB。
在 $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 中创建相应的用户。有关创建和管理用户的更多信息,请参阅用户管理命令。
启动mongod.exe
,支持Kerberos 。
必须以服务主体账户的身份启动 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)>
mongosh.exe
shellmongod.exe
将 Shell连接到 并进行身份验证。
以Kerberos主体 的身份连接mongosh
shell Kerberosapplication@EXAMPLE.NET
Shell客户端。
您可以从命令行进行连接和身份验证。
使用 cmd.exe
:
mongosh.exe --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase=$external --username reportingapp@EXAMPLE.NET
使用 Windows PowerShell
:
mongosh.exe --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username reportingapp@EXAMPLE.NET
如果您要连接到主机名与 Kerberos 名称匹配的系统,请确保为 --host
选项指定完全限定域名 (FQDN),而不是 IP 地址或非限定主机名。
Kerberos如果要连接到主机名与Kerberos名称不匹配的系统,请先将mongosh
shell mongod.exe
mongosh
shelldb.auth()
Shell连接到 ,然后从$external
Shell使用 方法在 中进行身份验证。数据库。
use $external db.auth( { mechanism: "GSSAPI", user: "reportingapp@EXAMPLE.NET" } )
其他注意事项
mongos.exe
为Kerberos配置
如需启动支持 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
对分片集群节点进行内部身份验证。
为 MongoDB Windows 服务分配服务主体名称
使用 setspn.exe
将服务主体名称(SPN)分配给运行 mongod.exe
和 mongos.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 身份验证机制:
PLAIN (LDAP SASL)
MongoDB 的 x.509 身份验证机制:
指定机制如下:
--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256
只有在使用时才添加其他机制。该参数设置不会影响 MongoDB 对集群节点的内部身份验证。
测试与验证
完成配置步骤后,可以使用 mongokerberos
工具验证配置。
mongokerberos
提供了一种便捷的方法,以验证您的平台的 Kerberos 配置是否与 MongoDB 一起使用,并测试 MongoDB 客户端的 Kerberos 身份验证是否按预期运行。有关更多信息,请参阅 mongokerberos
文档。
mongokerberos
仅在 MongoDB Enterprise 中可用。