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