使用 Okta LDAP 接口配置用户身份验证和授权
在此页面上
注意
从MongoDB 8.0开始, LDAP身份验证和授权已弃用。 该功能可用,并将在MongoDB 8的整个生命周期内继续运行,无需进行任何更改。 LDAP将在未来的主要发布中删除。
有关详细信息,请参阅 LDAP弃用。
注意
本指南向您展示如何启用Atlas从 Okta 对数据库用户(非Atlas用户)进行身份验证和授权 ,第三方 LDAP 提供商。
您可以仅启用 LDAP 身份验证,也可以同时启用 LDAP 身份验证和授权:
如果您仅启用 LDAP 身份验证,则将单个用户添加到 Atlas,并为每个添加的用户分配数据库访问权限。
如果您同时启用 LDAP 身份验证和授权,则将用户组添加到 Atlas,并为每个群组分配数据库访问权限。用户从其所属的 LDAP 群组继承数据库访问权限。
Atlas 支持:
通过 Okta Active Directory 同步对数据库用户进行身份验证。
从 Okta 对数据库用户进行身份验证。
在 Okta 群组中授权数据库用户。
限制
您必须部署
M10
或更大的 Atlas 集群才能启用 LDAP 集成。LDAP 集成是 Atlas Enterprise 的一项功能。Atlas 不支持在 Okta Active Directory 同步群组中授权数据库用户。
Atlas 不支持数据库用户的单点登录集成。要了解 Atlas 管理 Web 界面的单点登录集成,请参阅配置联合身份验证。
必需的访问权限
要管理 LDAP 用户或群组,必须拥有 Atlas 的 Organization Owner
或 Project Owner
访问权限。
步骤
为 LDAP 身份验证配置 Okta
以下过程将 Okta 配置为使用 Atlas 进行身份验证:
设置 Okta LDAP 界面。
要了解有关设置 Okta LDAP 界面的更多信息,请参阅 Okta 文档。
记下您的
<okta-instance-id>
。 您必须在配置过程中在多个位置提供此值。实例名称位于用于登录 Okta 帐户的 URL 中:
https://<okta-instance-id>.admin.okta.com
创建绑定用户。
创建新的 Okta 用户 用作 Atlas 绑定用户。绑定用户是 Okta 用户,用于查询帐户以及在数据库用户连接到 Atlas 数据库时验证数据库用户的档案。
重要
请勿将您自己的用户帐户用于绑定用户。
使用以下模板确定绑定用户的完整标识名 (DN):
uid=<bind-user-email>,dc=<okta-instance-id>,dc=okta,dc=com 例如,如果
<bind-user-email>
为bind@example.com
,<okta-instance-id>
为mdb-example
,则绑定用户的标识名为:uid=bind@example.com,ou=users,dc=mdb-example,dc=okta,dc=com
为 LDAP 身份验证配置 Atlas
以下过程使 Atlas 能够从 Okta LDAP对数据库用户进行身份验证:
AtlasGoAdvanced在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Security 标题下的 Advanced。
显示“高级”页面。
将 LDAP Authentication(基于推送的日志导出)旁边的按钮切换为 On(开)。
注意
启用此功能后,您可能会产生额外的费用。请参阅高级安全。
AtlasGoDatabase Access在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Security 标题下的 Database Access。
显示数据库访问页面。
将 LDAP 用户添加到 Atlas。
注意
如果要启用 LDAP 授权,请跳过此步骤。
将 Okta LDAP中托管的用户添加到 Atlas。
单击 Add New Database User(添加新的数据库用户)。
单击 LDAP User(连接)。
执行以下操作之一:
如果您尚未输入 User to DN Mapping,请输入 LDAP 用户的完整标识名 (DN)。遵循此模板:
uid=<user-name>,ou=users,dc=<okta-instance-id>,dc=okta,dc=com 例如,如果
<user-name>
为jane@example.com
并且<okta-instance-id>
为mdb-example
,则用户的 DN 为:uid=jane@example.com,ou=users,dc=mdb-example,dc=okta,dc=com 如果您输入了User to DN Mapping ,请输入映射所需的用户名或电子邮件地址。
选择要授予用户的数据库访问级别。
单击 Add User(连接)。
为 LDAP 授权配置 Okta
注意
如果您不想启用 LDAP 授权,请 跳过此部分 。
以下过程将配置 Atlas 以授权属于 Okta LDAP数据库访问群组的用户。
重要
在启用授权之前,您必须启用 LDAP 身份验证。
启用和配置 LDAP 授权后,仅配置为 LDAP 身份验证的数据库用户将无法再访问数据库。
为 LDAP 授权配置 Atlas
注意
如果您不想启用 LDAP 授权,请 跳过此部分 。
以下过程将 Okta 数据库访问群组添加到 Atlas,并在 Atlas 中启用数据库用户授权:
AtlasGoDatabase Access在Atlas中,Go项目的 页面。
如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。
如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。
在侧边栏中,单击 Security 标题下的 Database Access。
显示数据库访问页面。
将数据库访问 LDAP 群组添加到 Atlas。
将您创建的每个 Okta 数据库群组添加到 Atlas。 您添加的群组成员有权执行授予该群组的数据库操作。
单击 Add New Database User(添加新的数据库用户)。
点击 LDAP Group,然后输入包含数据库用户的组的完整标识名,即使启用了 User to DN Mapping 也要如此操作。遵循此模板:
cn=<group-name>,ou=groups,dc=<okta-instance-id>,dc=okta,dc=com 例如,如果
<group-name>
为db-read
,<okta-instance-id>
为mdb-example
,则绑定用户的标识名为:cn=db-read,ou=groups,dc=mdb-example,dc=okta,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 :
ou=groups,dc=<okta-instance-id>,dc=okta,dc=com?dn?sub?(&(objectClass=groupofUniqueNames)(uniqueMember={USER}))
注意
其他查询模板也可能有效。 使用默认模板{USER}?memberOf?base
可能会导致搜索时间更长。
使用以下命令连接到集群 mongosh
以下过程验证 LDAP 身份验证(以及 LDAP 授权,如启用)是否配置正确:
注意
启用 LDAP 身份验证后,数据库用户必须为其客户端覆盖连接字符串中的以下参数:
authSource
必须是$external
authenticationMechanism
必须是PLAIN
排除 LDAP 连接问题
注意
在 Okta 中,绑定用户必须具有Read Only Administrator
特权才能执行 LDAP 搜索。 在运行ldapsearch
之前,确保绑定用户具有这些权限。
使用 ldapsearch
,确定您配置 Atlas 所使用的查询模板是否按预期方式返回用户 DN。如果 LDAP 身份验证有效,但 LDAP 授权无效,则查询模板可能不会返回正确的用户 DNS。
使用以下 ldapsearch
模板:
ldapsearch -H 'ldaps://<okta-instance-id>.ldap.okta.com' -D "<bind-user-dn>" -w "<bind-user-pwd>" -b 'ou=groups,dc=<okta-instance-id>,dc=okta,dc=com' '(&(objectClass=groupofUniqueNames)(uniqueMember=<bind-user-dn or group-dn>))
例如,如果bind-user-dn
为uid=jane@example.com,ou=users,dc=mdb-example,dc=okta,dc=com
, <okta-instance-id>
为mdb-example
,则使用以下命令:
ldapsearch -H 'ldaps://mdb-example.ldap.okta.com' -D "uid=jane@example.com,dc=mdb-example,dc=okta,dc=com" -w "REDACTED" -b 'ou=groups,dc=mdb-example,dc=okta,dc=com' '(&(objectClass=groupofUniqueNames)(uniqueMember=uid=jane@example.com,ou=users,dc=mdb-example,dc=okta,dc=com))'
注意
其他查询模板也可能有效。 使用默认模板{USER}?memberOf?base
可能会导致搜索时间更长。