在 Windows 上使用 Kerberos 身份验证配置 MongoDB
概述
MongoDB Enterprise 支持使用Kerberos 服务进行身份验证。Kerberos 是用于大型客户端/服务器系统的行业标准身份验证协议。Kerberos 允许 MongoDB 和应用程序利用现有的身份验证基础设施和流程。MongoDB Enterprise 仅支持 麻省理工学院实施 Kerberos 的。
先决条件
设置和配置 Kerberos 部署超出了本文档的范围。本教程假定已为每个 实例配置了Kerberos 服务主体。exe
exe
对于副本集和分片集群,请确保您的配置使用完全限定的域名 (FQDN) 而不是 IP 地址或不合格的主机名。您必须使用 GSSAPI 的 FQDN 才能正确解析 Kerberos 领域并允许您进行连接。
程序
在没有 Kerberos 的情况下开始
mongod.exe
对于 Kerberos 用户的初始添加,请
exe
在没有 Kerberos 支持的情况下开始。如果 Kerberos 用户已经在 MongoDB 中并且具有 创建用户所需的权限,则可以
exe
从 Kerberos 支持开始。包括适合您的部署的其他设置。
笔记:
mongod
并mongos
默认绑定到本地主机。如果部署的成员在不同的主机上运行,或者如果您希望远程客户端连接到您的部署,则必须指定--bind_ip
或net.bindIp
。连接到
mongod
连接
mongosh
到exe
实例。如果exe
已--auth
启用,请确保您使用创建用户所需的权限进行连接。将 Kerberos 主体添加到 MongoDB。
将 Kerberos 主体添加
<username>@<KERBEROS REALM>
到数据库中的 MongoDB$external
。以全部大写形式指定 Kerberos 领域 。数据库$external
允许exe
咨询外部来源(例如 Kerberos)以进行身份验证。要指定用户的权限,请 为用户分配角色。要对身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证,
$external
用户名不能超过 10k 字节。reportingapp@EXAMPLE.NET
以下示例添加了对数据库具有只读访问权限的 Kerberos 主体records
:use $external db.createUser( { user: "reportingapp@EXAMPLE.NET", roles: [ { role: "read", db: "records" } ] } )
根据需要添加其他主体。对于要使用 Kerberos 进行身份验证的每个用户,您必须在 MongoDB 中创建一个相应的用户。有关创建和管理用户的更多信息,请参阅 用户管理命令。
从 Kerberos 支持开始
mongod.exe
要开始
exe
使用 Kerberos 支持,请将exe
参数 设置authenticationMechanisms
为GSSAPI
:mongod.exe --setParameter authenticationMechanisms=GSSAPI <additional mongod.exe options>
根据您的配置需要包括其他选项。例如,如果您希望远程客户端连接到您的部署或您的部署成员在不同的主机上运行,请指定
--bind_ip
. 有关详细信息,请参阅 本地主机绑定兼容性更改。例如,以下启动一个
exe
支持 Kerberos 的独立实例:mongod.exe --auth --setParameter authenticationMechanisms=GSSAPI --bind_ip localhost,<hostname(s)|ip address(es)>
mongo.exe
将shell连接到mongod.exe
并进行身份验证。mongo.exe
作为 Kerberos 主体连接shell 客户端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 名称匹配的系统,请确保为该选项指定完全限定的域名 (FQDN)
--host
,而不是 IP 地址或不合格的主机名。如果您要连接到主机名与 Kerberos 名称不匹配的系统,请先连接到
mongo.exe
,exe
然后从mongo.exe
shell 中使用该db.auth()
方法在数据库中进行身份验证$external
。use $external db.auth( { mechanism: "GSSAPI", user: "reportingapp@EXAMPLE.NET" } )
其他注意事项
mongos.exe
为 Kerberos配置
要开始exe
使用 Kerberos 支持,请将 exe
参数设置authenticationMechanisms
为GSSAPI
. 你必须开始exe
作为 服务主体帐户:
mongos.exe --setParameter authenticationMechanisms=GSSAPI <additional mongos options>
根据您的配置需要包括其他选项。例如,如果您希望远程客户端连接到您的部署或您的部署成员在不同的主机上运行,请指定 --bind_ip
. 有关详细信息,请参阅 本地主机绑定兼容性更改。
例如,以下启动一个mongos
支持 Kerberos 的实例:
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)>
exe
根据配置的需要修改或包含任何其他选项。例如, --keyFile
您可以使用x.509 成员身份验证,而不是用于分片集群成员的内部身份验证。
将服务主体名称分配给 MongoDB Windows 服务
用于将服务主体名称 (SPN) 分配给运行服务 setspn.exe
的帐户:exe
exe
setspn.exe -S <service>/<fully qualified domain name> <service account name>
例子:
如果使用服务帐户名称作为名为on
exe
的服务运行 ,请按如下方式分配 SPN:mongodb``testserver.mongodb.com``mongodtest
setspn.exe -S mongodb/testserver.mongodb.com mongodtest
合并额外的身份验证机制
Kerberos 身份验证 ( GSSAPI (Kerberos)) 可以与:
- MongoDB的SCRAM认证机制:
- SCRAM-SHA-1
- SCRAM-SHA-256(在 MongoDB 4.0 中添加)
- MongoDB 对 LDAP 的认证机制:
- 普通(LDAP SASL)
- MongoDB 对 x.509 的认证机制:
指定机制如下:
--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256
仅在使用时添加其他机制。该参数设置不影响MongoDB对集群成员的内部认证。
测试和验证
完成配置步骤后,您可以使用该mongokerberos
工具验证您的配置。
与 MongoDB 4.4 一起引入,mongokerberos
提供了一种方便的方法来验证平台的 Kerberos 配置以用于 MongoDB,并测试来自 MongoDB 客户端的 Kerberos 身份验证是否按预期工作。mongokerberos
有关详细信息,请参阅 文档。
mongokerberos
仅在 MongoDB Enterprise 中可用。
翻译:韩鹏帅
原文:Configure MongoDB with Kerberos Authentication on Windows