使用 Microsoft Entra ID 域服务配置用户身份验证和授权
在此页面上
注意
从 MongoDB 8.0 开始,LDAP 身份验证和授权已弃用。该功能可用,并将在 MongoDB 的整个生命周期内继续运行,无需更改 8。LDAP 将在将来的主要版本中删除。
有关详细信息,请参阅 LDAP弃用。
注意
本指南向您展示如何启用 Atlas 从 Microsoft Entra ID Domain Services 对数据库用户(非 Atlas 用户)进行身份验证和授权 ,第三方 LDAP 提供商。
您可以仅启用 LDAP 身份验证,也可以同时启用 LDAP 身份验证和授权:
如果您仅启用 LDAP 身份验证,则将单个用户添加到 Atlas,并为每个添加的用户分配数据库访问权限。
如果您同时启用 LDAP 身份验证和授权,则将用户组添加到 Atlas,并为每个群组分配数据库访问权限。用户从其所属的 LDAP 群组继承数据库访问权限。
Atlas 支持从 Microsoft Entra ID 域服务中对数据库用户进行身份验证和授权。
限制
您必须部署
M10
或更大的 Atlas 集群才能启用 LDAP 集成。LDAP 集成是 Atlas Enterprise 的一项功能。Atlas 不支持数据库用户的单点登录集成。要了解 Atlas 管理 Web 界面的单点登录集成,请参阅配置联合身份验证。
必需的访问权限
要管理 LDAP 用户或群组,必须拥有 Atlas 的 Organization Owner
或 Project Owner
访问权限。
先决条件
要将 Microsoft Entra ID 域服务 LDAP 与 Atlas 集成在一起,您必须:
Azure订阅。 要获取订阅,请访问 Microsoft Azure 门户。
Contributor
拥有 Azure 订阅的 权限或更高权限,才能创建 LDAP 集成所需的资源。与您的订阅关联的 Microsoft Entra ID 租户。有关设置 Microsoft Entra ID 租户的信息,请参阅 Microsoft Entra ID 文档。
Global Administrator
在 Microsoft Entra ID 租户中具有启用 Microsoft Entra ID 域服务的权限。自定义的可路由域名。
步骤
为您的域配置 Microsoft Entra ID 域服务
为您的域配置 Microsoft Entra ID 域服务。
要配置 Microsoft Entra ID Domain Services,请按照 创建高级托管域 Azure 文档中的教程使用Custom domain names
DNS 名称选项。
配置托管域时,确保记录在 DNS domain name 字段中输入的值。该值是您的 <managed-domain>
。您必须在本教程的几个地方提供此值。
例子
aadds.example.com
获取安全 LDAP 的 SSL 证书。
Microsoft Entra ID Domain Services 使用 SSL 证书来保护 LDAP。 您的证书必须遵守 Azure 文档中概述的要求。
可通过以下任一方式获取证书:
从贵组织使用的公共或企业证书颁发机构 (CA) 获取证书。
您必须获取通配符证书,才能确保安全 LDAP 与 Microsoft Entra ID 域服务正常配合使用。
证书的主题名称必须与您在配置 Microsoft Entra ID 域服务时使用的
<managed-domain>
匹配。例子
*.aadds.example.com
生成自签名证书。不建议 在生产中使用自签名证书。
要在 MacOS 或 Linux 系统上生成测试用的自签名证书
注意
如果您使用的是 macOS Catalina,请安装最新版本的 openssl
。运行以下命令,使用 Homebrew 进行安装:
brew install openssl
通过
openssl
生成私钥。以下命令将生成一个密钥文件,名为<your-key-name>.key
:openssl genrsa -out <your-key-name>.key 2048 编辑以下配置文件模板。通过与组织相关的值更新
[dn-param]
部分的属性。确保主题名称 (CN
) 与以下模板匹配:*.<managed-domain>
例子
*.aadds.example.com
openssl x509 extfile params extensions = extend [req] # openssl req params prompt = no distinguished_name = dn-param [dn-param] # DN fields C = US ST = NY L = New York O = MongoDB OU = Atlas CN = *.aadds.example.com [extend] # openssl extensions subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always keyUsage = digitalSignature,keyEncipherment,keyCertSign extendedKeyUsage=serverAuth,clientAuth 将文件另存为
<your-config-name>.cfg
。使用您创建的密钥和配置文件生成证书签名请求。以下命令生成证书签名请求,名为
<your-csr-name>.csr
:openssl req -new -key <your-key-name>.key \ -out <your-csr-name>.csr -config <your-config-name>.cfg \ -extensions extend 使用您创建的密钥、配置和证书签名请求文件生成自签名证书。以下命令生成自签名证书文件,名为
<your-cert-name>.crt
openssl x509 -req -sha256 -days 365 -in <your-csr-name>.csr \ -signkey <your-key-name>.key -out <your-cert-name>.crt \ -extfile <your-config-name>.cfg
要在 Windows 系统上生成自签名证书 用于测试目的 ,请参阅 Azure 文档。
获取包含您的私钥的 SSL 证书。
Microsoft Entra ID 域服务使用私钥以解密安全 LDAP 流量。包含私钥的证书使用 PKCS#12
格式,并使用 .pfx
文件格式。您必须将该格式的证书上传到 Microsoft Entra ID 域服务中,才能解密通过公共互联网发送的安全 LDAP 流量。
要在 MacOS 或 Linux 系统上生成 .pfx
证书:
将公钥和 SSL 证书保存到本地计算机。
注意
此证书必须使用
PEM
格式。如果此证书不包含私钥,则您可以将私钥保存为
.key
格式的文件。使用私钥和证书通过
openssl
生成.pfx
证书。以下命令生成名为<your-cert-name>.pfx
的.pfx
证书文件:openssl pkcs12 -export -out <your-cert-name>.pfx \ -inkey <your-key-name>.key -in <your-cert-name>.crt 在出现提示时,输入并验证密码以加密该文件。在将
.pfx
证书上传到 Microsoft Entra ID 域服务时,您需要输入该密码以解密私钥。
.pfx
要在 Windows 系统上生成 证书,请参阅 Azure 文档。
在 Microsoft Entra ID 域服务上启用安全 LDAP。
要在 Microsoft Entra ID Domain Services 上启用安全 LDAP,请参阅 Azure 文档。
配置您的 DNS 提供商。
您必须配置 DNS 提供程序,以便 Atlas 和数据库节点可以连接到 Microsoft Entra ID 域服务管理的自定义域中的 LDAP 服务器。
创建 LDAP 流量的主机记录,以将 <managed-domain>
的子域解析为 Microsoft Entra ID 域服务 LDAP 服务使用的外部 IP 地址:
LDAP IP 地址 | LDAP 流量的子域 |
---|---|
|
|
要查找 Microsoft Entra ID Domain Services LDAP 服务使用的外部 IP 地址,请参阅 Azure 文档。
将您的自定义域添加到 Microsoft Entra ID 中。
将您的自定义域名添加到 Microsoft Entra ID 中,以创建属于您的域的用户。在添加您的域后,还必须将 Microsoft Entra ID DNS 信息添加到 DNS 提供程序的 TXT
记录中并验证配置。
要将您的自定义域添加到 Microsoft Entra ID 中,请参阅 Azure 文档。
为入站 LDAP 流量配置 Microsoft Entra ID 域服务。
您必须允许从所有端口通过公共互联网传输到端口 636
的所有流量,才能将 Microsoft Entra ID 域服务作为 Atlas 的 LDAP 提供程序。
要添加入站安全规则以允许端口 上的入站 LDAP636
流量,请参阅 Azure 文档。
创建绑定用户。
创建一个绑定用户。绑定用户是一个 Microsoft Entra ID 用户,用于查询帐户以及在数据库用户连接到 Atlas 数据库时验证其凭证。绑定用户必须属于您添加到 Microsoft Entra ID 的自定义域。
要创建 Microsoft Entra ID 用户,请参阅 Azure 文档。
为 Microsoft Entra ID 域服务启用绑定用户帐户。
您必须先为绑定用户生成用于 Kerberos 和 NTLM 身份验证的密码哈希,然后绑定用户才能使用 Microsoft Entra ID 域服务。这些步骤因 Microsoft Entra ID 用户帐户类型而异。
要了解如何为用户生成密码哈希,请参阅 Azure 文档。
创建 Microsoft Entra ID 用户。
如果还没有这些用户,请在 Microsoft Entra ID 域服务中创建要授予数据库访问权限的用户。用户必须属于您添加到 Microsoft Entra ID 的自定义域。
要创建 Microsoft Entra ID 用户,请参阅 Azure 文档。
为 LDAP 身份验证配置 Atlas
以下过程使 Atlas 能够从 Microsoft Entra ID 域服务 LDAP 中对数据库用户进行身份验证:
AtlasGoAdvanced在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Security 标题下的 Advanced。
显示“高级”页面。
将 LDAP Authentication(基于推送的日志导出)旁边的按钮切换为 On(开)。
注意
启用此功能后,您可能会产生额外的费用。请参阅高级安全。
将用户添加到 DN 映射。
将用户添加到类似于以下示例的 DN 映射, 支持客户端在连接 Atlas 数据库时提供用户名而不是完整 DNS:
[ { "match":"(.+)", "substitution":"CN={0},OU=AADDC Users,DC=<managed-domain>,DC=com" } ]
注意
对于 Microsoft Entra ID 域服务,可分辨名称中的属性必须是大写的。
如果 <managed-domain>
包含一个或多个子域,则您必须为每个子域的可分辨名称添加一个 DC
(domainComponent) 属性。
例子
如果 <managed-domain>
是 aadds.example.com
,则域组件为:
DC=aadds,DC=example,DC=com
AtlasGoDatabase Access在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Security 标题下的 Database Access。
显示数据库访问页面。
将 LDAP 用户添加到 Atlas。
注意
如果要启用 LDAP 授权,请跳过此步骤。
将 Azure AD 托管用户添加到 Atlas。
单击 Add New Database User(添加新的数据库用户)。
单击 LDAP User(连接)。
执行以下操作之一:
如果您尚未输入 User to DN Mapping,请输入 LDAP 用户的完整标识名 (DN)。遵循此模板:
CN=<user-name>,OU=AADDC Users,DC=<managed>,DC=<domain>,DC=com 例如,如果
<user-name>
为Jane Doe
并且<managed-domain>
为aadds.example.com
,则用户的 DN 为:CN=Jane Doe,ou=AADDC Users,DC=aadds,DC=example,DC=com 如果您输入了 User to DN Mapping,则输入映射所需的用户名。
选择要授予用户的数据库访问级别。
单击 Add User(连接)。
将数据库访问 LDAP 群组添加到 Atlas
注意
如果您不想启用 LDAP 授权,请跳过本部分。
重要
在启用授权之前,您必须启用 LDAP 身份验证。
启用和配置 LDAP 授权后,仅配置为 LDAP 身份验证的数据库用户将无法再访问数据库。
Atlas LDAP 授权使用 LDAP 群组,确定用户是否有权执行数据库操作。
对于要为用户授予的每个访问级别,创建单独的 Microsoft Entra ID 组。例如,创建一个组以对一个数据库进行读取访问,创建另一个组以进行读写访问,依此类推。根据每个用户所需的访问级别,将用户分配到不同的组。
要创建 Microsoft Entra ID 数据库访问群组并分配用户,请参阅 Azure 文档。
为 LDAP 授权配置 Atlas
注意
如果您不想启用 LDAP 授权,请跳过本部分。
以下过程将 Microsoft Entra ID 域服务数据库访问组添加到 Atlas 中,并在 Atlas 中启用数据库用户授权:
AtlasGoDatabase Access在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Security 标题下的 Database Access。
显示数据库访问页面。
将数据库访问 LDAP 群组添加到 Atlas。
将您创建的每个 Azure 数据库群组添加到 Atlas。 您所添加群组的成员有权执行已授权此群组的数据库操作。
单击 Add New Database User(添加新的数据库用户)。
点击 LDAP Group,然后输入包含数据库用户的组的完整标识名,即使启用了 User to DN Mapping 也要如此操作。遵循此模板:
CN=<group-name>,OU=AADDC Users,DC=<managed-domain>,DC=com 注意
对于 Microsoft Entra ID 域服务,可分辨名称中的属性必须是大写的。
如果
<managed-domain>
包含一个或多个子域,则您必须为每个子域的可分辨名称添加一个DC
(domainComponent) 属性。例子
如果
<managed-domain>
是aadds.example.com
,则域组件为:DC=aadds,DC=example,DC=com
例如,如果
<group-name>
为Atlas read only
并且<managed-domain>
为aadds.example.com
,则用户的 DN 为:CN=Atlas read only,OU=AADDC Users,DC=aadds,DC=example,DC=com
选择要授予此群组中用户的数据库访问级别。
单击 Add User(连接)。
AtlasGoAdvanced在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Security 标题下的 Advanced。
显示“高级”页面。
在 Query Template(查询模板)中输入查询模板。
当用户尝试执行操作时,Atlas 会执行 LDAP 查询模板,获取经验证的用户所属的 LDAP 群组。如果查询返回至少一个有权执行此操作的群组,则 Atlas 允许执行此操作。如果查询未返回有权执行此操作的群组,则 Atlas 不允许执行此操作。
在运行查询时,Atlas 会替换 {USER}
占位符中经验证的用户名。该查询与 Server Hostname 中指定的主机相关。
查询的格式必须符合 RFC4515 。
如果您要识别用户所属的群组,则可使用默认 Query Template:
{USER}?memberOf?base
注意
其他查询模板也可能有效。
使用以下命令连接到集群 mongosh
以下过程验证 LDAP 身份验证(以及 LDAP 授权,如启用)是否配置正确:
注意
启用 LDAP 身份验证后,数据库用户必须为其客户端覆盖连接字符串中的以下参数:
authSource
必须是$external
authenticationMechanism
必须是PLAIN
AtlasGoClusters在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。
如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。
如果尚未出现,请单击侧边栏中的 Clusters(集群)。
会显示集群页面。
使用 mongosh
通过您添加到 Atlas 的用户凭据连接到您的集群。
要复制连接字符串:
单击 Connect(连接)。
单击 LDAP,然后单击 Copy(复制)。
粘贴并编辑包含您的用户 DN 和密码的字符串。
注意
如果未启用用户到 DN 映射,则使用用户的完整 DN 连接集群。
注意
对于 Microsoft Entra ID 域服务,可分辨名称中的属性必须是大写的。
如果 <managed-domain>
包含一个或多个子域,则您必须为每个子域的可分辨名称添加一个 DC
(domainComponent) 属性。
例子
如果 <managed-domain>
是 aadds.example.com
,则域组件为:
DC=aadds,DC=example,DC=com
将用户完整 DN 中的用户名或群组名称中的空格转义:
--username CN=Jane\ Doe,OU=AADDC\ Users,DC=aadds,DC=example,DC=com
注意
如果您使用用户的完整 DN,请仅包含 AADDC Users
OU(组织单位)。不要包含用户所属的其他 Microsoft Entra ID 组。
排除 LDAP 连接问题
注意
在 Microsoft Entra ID Domain Services 中,绑定用户必须是Microsoft Entra ID DC Administrators
群组的成员才能执行 LDAP 搜索。 在运行ldapsearch
之前,确保绑定用户具有这些权限。
使用 ldapsearch
,确定您配置 Atlas 所使用的查询模板是否按预期方式返回用户 DN。如果 LDAP 身份验证有效,但 LDAP 授权无效,则查询模板可能不会返回正确的用户 DNS。
使用以下 ldapsearch
模板:
ldapsearch -H 'ldaps://ldap.<managed-domain>.com' -b 'DC=<managed>,DC=<domain>,DC=com' -s sub -D 'CN=<bind-user-dn>,OU=AADDC Users,DC=<managed>,DC=<domain>,DC=com' -w '<REDACTED>' '(&(objectCategory=user)(memberOf=CN=<group-name>,OU=AADDC Users,DC=<managed-domain>,DC=com))'
注意
对于 Microsoft Entra ID 域服务,可分辨名称中的属性必须是大写的。
如果 <managed-domain>
包含一个或多个子域,则您必须为每个子域的可分辨名称添加一个 DC
(domainComponent) 属性。
例子
如果 <managed-domain>
是 aadds.example.com
,则域组件为:
DC=aadds,DC=example,DC=com
例如,如果 bind-user-dn
是 CN=LDAP Bind User,OU=AADDC Users,DC=aadds,DC=example,DC=com
,<managed-domain>
是 aadds.example.com
,group-name
是 Atlas read only
,请使用以下命令:
ldapsearch -H 'ldaps://ldap.aadds.example.com' -b 'DC=aadds,DC=example,DC=com' -s sub -D 'CN=LDAP Bind User,OU=AADDC Users,DC=aadds,DC=example,DC=com' -w '<REDACTED>' '(&(objectCategory=user)(memberOf=CN=Atlas read only,OU=AADDC Users,DC=aadds,DC=example,DC=com))'
注意
其他查询模板也可能有效。