自管理部署上的 Kerberos 身份验证
Overview
MongoDB Enterprise支持MongoDB客户端对 mongod
和mongos
实例进行Kerberos身份验证。 Kerberos是一种适用于大型客户端/服务器系统的行业标准身份验证协议。 Kerberos允许MongoDB和应用程序利用现有的身份验证基础架构和流程。 MongoDB Enterprise仅支持 MIT实施 的Kerberos。
Kerberos 组件和 MongoDB
Principals
在基于 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配置自管理MongoDB和在Windows上使用Kerberos身份验证配置自管理 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>
指定不同的值,请在 mongod
或 mongos
(或是 mongod.exe
或 mongos.exe
)期间使用 serviceName
。mongosh
或其他客户端也可以使用 serviceName
指定不同的服务主体名称。
服务主体名称必须可以通过网络进行访问,且需使用完全限定域名 (FQDN)。
默认情况下,在使用 DNS 解析主机之前,Kerberos 会尝试使用 /etc/krb5.conf
文件识别主机。
在 Windows 上,如果将 MongoDB 作为服务运行,请参阅为 MongoDB Windows 服务分配服务主体名称。
Linux Keytab Files
Linux 系统可以将服务主体的 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配置自管理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配置自管理MongoDB和在Windows上使用Kerberos身份验证配置自管理 MongoDB 中的Incorporate Additional Authentication Mechanisms
部分。
测试与验证
mongokerberos
程序提供了一种便捷的方法,以验证您的平台的 Kerberos 配置是否与 MongoDB 一起使用,并测试 MongoDB 客户端的 Kerberos 身份验证是否按预期运行。有关更多信息,请参阅 mongokerberos
文档。
mongokerberos
仅在 MongoDB Enterprise 中可用。