Kerberos 身份验证
概述
MongoDB Enterprise 支持 MongoDB 客户端对mongod
和mongos
实例进行 Kerberos 身份验证。 Kerberos 是一种适用于大型客户端/服务器系统的行业标准身份验证协议。 Kerberos 允许 MongoDB 和应用程序利用现有的身份验证基础架构和流程。 MongoDB Enterprise 仅支持 MIT 实施 Kerberos。
Kerberos 组件和 MongoDB
主体
在基于 Kerberos 的系统中,经身份验证的通信中的每个参与者都称为“主体”,并且每个主体都必须具有一个唯一的名称。
主体属于名为 Realm 的管理单位。对于每个 Realm,“Kerberos 密钥分发中心”(KDC) 都会维护该 Realm 主体和主体关联的“秘钥”数据库。
在客户端-服务器身份验证中,客户端向 KDC 请求访问特定资产的“票证”。KDC 使用客户端秘钥和服务器秘钥来构造票证,使客户端和服务器能够相互进行身份验证,同时保持秘钥为隐藏状态。
在配置 MongoDB 以支持 Kerberos 时,有两种主体名称值得关注:用户主体和服务主体。
用户主体
要使用 Kerberos 进行身份验证,必须将 Kerberos 用户主体添加到 MongoDB 的 $external
数据库。用户主体名称的格式为:
<username>@<KERBEROS REALM>
对于要使用 Kerberos 进行身份验证的每个用户,必须在 MongoDB 的 $external
数据库中创建相应的用户。
要对 $external
身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证,用户名不能大于 10k 字节。
有关向 MongoDB 添加用户,以及以该用户身份进行身份验证的示例,请参阅“在 Linux 中使用 Kerberos 身份验证配置 MongoDB”和“在 Windows 中使用 Kerberos 身份验证配置 MongoDB”。
提示
另请参阅:
管理用户和角色,了解有关在 MongoDB 中创建和管理用户的一般信息。
服务主体
每个 MongoDB mongod
和 mongos
实例(或者 Windows 上的 mongod.exe
或 mongos.exe
)必须具有关联的服务主体。服务主体名称的格式为:
<service>/<fully qualified domain name>@<KERBEROS REALM>
对于 MongoDB,<service>
默认为 mongodb
。例如,如果 m1.example.com
为 MongoDB Server,并且 example.com
维护着 EXAMPLE.COM
Kerberos Realm,则 m1
应具有服务主体名称 mongodb/m1.example.com@EXAMPLE.COM
。
要为 指定不同的值,请在<service>
serviceName
mongod
或mongos
(或mongod.exe
或mongos.exe
)启动期间使用mongosh
serviceName
。 或其他客户端也可以使用 指定不同的服务主体名称。
服务主体名称必须可以通过网络进行访问,且需使用完全限定域名 (FQDN)。
默认情况下,在使用 DNS 解析主机之前,Kerberos 会尝试使用 /etc/krb5.conf
文件识别主机。
在 Windows 上,如果将 MongoDB 作为服务运行,请参阅为 MongoDB Windows 服务分配服务主体名称。
Linux 密钥表文件
Linux 系统可以在keytab文件中存储服务主体的 Kerberos 身份验证密钥。在 Linux 上运行的每个基于 Kerberized 的mongod
和mongos
实例都必须有权访问包含其服务主体密钥的密钥表文件。
票证
在 Linux 上,MongoDB 客户端可以使用 Kerberos 的 kinit
程序初始化凭证缓存,以在服务器中验证用户主体身份。
Windows Active Directory
与 Linux 系统不同,在 Windows 上运行的mongod
和mongos
实例不需要访问 keytab 文件。 相反,mongod
和mongos
实例会从操作系统特有的档案存储区读取服务器档案。
但是,您可以从 Windows Active Directory 导出密钥表文件以在 Linux 系统上使用。请参阅 Ktpass 以了解更多信息。
使用 Kerberos 进行身份验证
如需配置 MongoDB 以支持 Kerberos 并进行身份验证,请参阅“在 Linux 中使用 Kerberos 身份验证配置 MongoDB”和“在 Windows 中使用 Kerberos 身份验证配置 MongoDB”。
操作注意事项
DNS
运行 mongod
或 mongos
实例的每个主机必须同时具有 A
和 PTR
DNS 记录,才能提供正向和反向查询。
如果没有 A
和 PTR
DNS 记录,主机将无法解析 Kerberos 域或密钥分发中心 (KDC) 的组件。
系统时间同步
要成功进行身份验证,每个 mongod
和 mongos
实例的系统时间必须与 Kerberos 基础架构中其他主机的系统时间相差 5 分钟以内。
Kerberized MongoDB 环境
驱动程序支持
以下 MongoDB 驱动程序支持 Kerberos 身份验证:
与其他 MongoDB 身份验证机制结合使用
尽管 MongoDB 支持将 Kerberos 身份验证与其他身份验证机制结合使用,但仅在需要时添加其他机制。有关详细信息,请参阅在 Linux 上使用 Kerberos 身份验证配置 MongoDB 和在 Windows 上使用 Kerberos 身份验证配置 MongoDB 中的Incorporate Additional Authentication Mechanisms
一节。
测试与验证
mongokerberos
程序提供了一种便捷的方法来验证平台的 Kerberos 配置是否与 MongoDB 一起使用,并测试 MongoDB 客户端的 Kerberos 身份验证是否按预期运行。有关更多信息,请参阅mongokerberos
文档。
mongokerberos
仅在 MongoDB Enterprise 中可用。