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