Docs 菜单

Docs 主页启动和管理 MongoDBMongoDB Atlas

使用 Microsoft Entra ID 域服务配置用户身份验证和授权

在此页面上

注意

  • 此功能不适用于 M0 免费集群、M2M5 集群。如需了解更多信息,请参阅 Atlas M0(免费集群)、M2 和 M5 限制

  • 无服务器实例目前不支持此功能。要了解更多信息,请参阅无服务器实例限制

本指南向您展示如何启用 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 OwnerProject 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 域服务的权限。

  • 自定义的可路由域名。

1

要配置 Microsoft Entra ID Domain Services,请按照 创建高级托管域 Azure 文档中的教程使用Custom domain names DNS 名称选项。

配置托管域时,确保记录在 DNS domain name 字段中输入的值。该值是您的 <managed-domain> 。您必须在本教程的几个地方提供此值。

例子

aadds.example.com

2

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
  1. 通过 openssl 生成私钥。以下命令将生成一个密钥文件,名为 <your-key-name>.key

    openssl genrsa -out <your-key-name>.key 2048
  2. 编辑以下配置文件模板。通过与组织相关的值更新 [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
  3. 将文件另存为 <your-config-name>.cfg

  4. 使用您创建的密钥和配置文件生成证书签名请求。以下命令生成证书签名请求,名为 <your-csr-name>.csr

    openssl req -new -key <your-key-name>.key \
    -out <your-csr-name>.csr -config <your-config-name>.cfg \
    -extensions extend
  5. 使用您创建的密钥、配置和证书签名请求文件生成自签名证书。以下命令生成自签名证书文件,名为 <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 文档。

3

Microsoft Entra ID 域服务使用私钥以解密安全 LDAP 流量。包含私钥的证书使用 PKCS#12 格式,并使用 .pfx 文件格式。您必须将该格式的证书上传到 Microsoft Entra ID 域服务中,才能解密通过公共互联网发送的安全 LDAP 流量。

要在 MacOS 或 Linux 系统上生成 .pfx 证书:

  1. 将公钥和 SSL 证书保存到本地计算机。

    注意

    此证书必须使用 PEM 格式。

    如果此证书不包含私钥,则您可以将私钥保存为 .key 格式的文件。

  2. 使用私钥和证书通过 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 文档。

4

要在 Microsoft Entra ID Domain Services 上启用安全 LDAP,请参阅 Azure 文档。

5

您必须配置 DNS 提供程序,以便 Atlas 和数据库节点可以连接到 Microsoft Entra ID 域服务管理的自定义域中的 LDAP 服务器。

创建 LDAP 流量的主机记录,以将 <managed-domain> 的子域解析为 Microsoft Entra ID 域服务 LDAP 服务使用的外部 IP 地址:

LDAP IP 地址
LDAP 流量的子域
203.0.113.77
ldap.aadds.example.com

要查找 Microsoft Entra ID Domain Services LDAP 服务使用的外部 IP 地址,请参阅 Azure 文档。

6

将您的自定义域名添加到 Microsoft Entra ID 中,以创建属于您的域的用户。在添加您的域后,还必须将 Microsoft Entra ID DNS 信息添加到 DNS 提供程序的 TXT 记录中并验证配置。

要将自定义域添加到 Microsoft Entra ID,请参阅 Azure 文档。

7

您必须允许从所有端口通过公共互联网传输到端口 636 的所有流量,才能将 Microsoft Entra ID 域服务作为 Atlas 的 LDAP 提供程序。

要添加入站安全规则以允许端口 上的入站 LDAP636 流量,请参阅 Azure 文档。

8

创建一个绑定用户。绑定用户是一个 Microsoft Entra ID 用户,用于查询帐户以及在数据库用户连接到 Atlas 数据库时验证其凭证。绑定用户必须属于您添加到 Microsoft Entra ID 的自定义域。

要创建 Microsoft Entra ID 用户,请参阅 Azure 文档。

9

您必须先为绑定用户生成用于 Kerberos 和 NTLM 身份验证的密码哈希,然后绑定用户才能使用 Microsoft Entra ID 域服务。这些步骤因 Microsoft Entra ID 用户帐户类型而异。

要了解如何为用户生成密码哈希,请参阅 Azure 文档。

10

要查询 Microsoft Entra ID,绑定用户必须具有 目录读取 器授予的权限 角色。

要将目录读取者角色分配给绑定用户,请参阅 Azure 文档。

11

如果还没有这些用户,请在 Microsoft Entra ID 域服务中创建要授予数据库访问权限的用户。用户必须属于您添加到 Microsoft Entra ID 的自定义域。

要创建 Microsoft Entra ID 用户,请参阅 Azure 文档。

以下过程使 Atlas 能够从 Microsoft Entra ID 域服务 LDAP 中对数据库用户进行身份验证:

1
2
  1. 如果尚未显示,请从导航栏的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示该页,请从导航栏的 Projects(项目)菜单中选择所需的项目。

  3. 单击侧边栏中的 Advanced(支持)。

3

注意

启用此功能后,您可能会产生额外的费用。请参阅高级安全

4
  • Server Hostname

    ldap.<managed-domain>.com
  • Server Port636

  • Bind Username

    CN=<bind-username>,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

5

将用户添加到类似于以下示例的 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

6

如果您生成了自签名证书,则必须提供它。

7

等待 Atlas 部署更改。Atlas 使用 您提供的配置详细信息,验证集群是否可以连接到 LDAP 服务器、 使用 LDAP 服务器进行身份验证和查询 LDAP 服务器。

8

注意

如果要启用 LDAP 授权,请跳过此步骤

将 Azure AD 托管用户添加到 Atlas。

  1. 在左侧导航栏的 Security 部分,单击 Database Access

  2. 单击 Add New Database User(添加新的数据库用户)。

  3. 单击 LDAP User(连接)。

  4. 执行以下操作之一:

    1. 如果您尚未输入 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
    2. 如果您输入了 User to DN Mapping,则输入映射所需的用户名。

  5. 选择要授予用户的数据库访问级别。

  6. 单击 Add User(连接)。

注意

如果您不想启用 LDAP 授权,请跳过本部分

重要

  • 在启用授权之前,您必须启用 LDAP 身份验证。

  • 启用和配置 LDAP 授权后,仅配置为 LDAP 身份验证的数据库用户将无法再访问数据库。

Atlas LDAP 授权使用 LDAP 群组,确定用户是否有权执行数据库操作。

对于要为用户授予的每个访问级别,创建单独的 Microsoft Entra ID 组。例如,创建一个组以对一个数据库进行读取访问,创建另一个组以进行读写访问,依此类推。根据每个用户所需的访问级别,将用户分配到不同的组。

要创建 Microsoft Entra ID 数据库访问群组并分配用户,请参阅 Azure 文档。

注意

如果您不想启用 LDAP 授权,请跳过本部分

以下过程将 Microsoft Entra ID 域服务数据库访问组添加到 Atlas 中,并在 Atlas 中启用数据库用户授权:

1

将您创建的每个 Azure 数据库群组添加到 Atlas。 您所添加群组的成员有权执行已授权此群组的数据库操作。

  1. 在左侧导航栏的 Security 部分,单击 Database Access

  2. 单击 Add New Database User(添加新的数据库用户)。

  1. 点击 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
  1. 选择要授予此群组中用户的数据库访问级别。

  2. 单击 Add User(连接)。

2
  1. 如果尚未显示,请从导航栏的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示该页,请从导航栏的 Projects(项目)菜单中选择所需的项目。

  3. 单击侧边栏中的 Advanced(支持)。

3
4
5

当用户尝试执行操作时,Atlas 会执行LDAP 查询模板以获取经过身份验证的用户所属的 LDAP 群组。如果查询返回至少一个有权执行该操作的群组,则 Atlas 允许执行该操作。如果查询未返回有权执行此操作的群组,则 Atlas 不允许执行此操作。

在运行查询时,Atlas 会替换 {USER} 占位符中经验证的用户名。该查询与 Server Hostname 中指定的主机相关。

查询的格式必须符合 RFC4515 。

如果您要识别用户所属的群组,则可使用默认 Query Template

{USER}?memberOf?base

注意

其他查询模板也可能有效。

6

等待 Atlas 部署更改。Atlas 使用 您提供的配置详细信息,验证集群是否可以连接到 LDAP 服务器、 使用 LDAP 服务器进行身份验证和查询 LDAP 服务器。

以下过程验证 LDAP 身份验证(以及 LDAP 授权,如启用)是否配置正确:

注意

启用 LDAP 身份验证后,数据库用户必须为其客户端覆盖连接字符串中的以下参数:

  • authSource 必须是 $external

  • authenticationMechanism 必须是 PLAIN

1

要复制连接字符串:

  1. 单击 Atlas 左上角的 Database

  2. 单击 Database Deployments 页面上的 Connect

  3. 单击 LDAP,然后单击 Copy(复制)。

  4. 粘贴并编辑包含您的用户 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 组。

2

注意

在 Microsoft Entra ID Domain Services 中,绑定用户必须是AAD 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-dnCN=LDAP Bind User,OU=AADDC Users,DC=aadds,DC=example,DC=com<managed-domain>aadds.example.comgroup-nameAtlas 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))'

注意

其他查询模板也可能有效。

← 使用 LDAP 设置用户身份验证和授权