使用 LDAP 进行安全客户端身份验证
在此页面上
将身份验证请求代理到轻量级目录访问协议 (LDAP) 服务。
与 LDAP 服务器的简单 SASL 绑定。 MongoDB Enterprise 可以通过
saslauthd
或通过操作系统库绑定到 LDAP 服务器。
要了解更多信息,请参阅 MongoDB Server 文档中的LDAP 代理身份验证和LDAP 授权部分。
您可以使用 Kubernetes 操作符 配置 LDAP,对连接到 MongoDB 部署的应用程序进行身份验证。本指南介绍如何配置从客户端应用程序到 MongoDB 部署的 LDAP 身份验证。
注意
你无法在 Kubernetes 集群中保护 MongoDB 的独立实例。
Considerations
LDAP要在 CustomResourceDefinitions 中配置 LDAP ,请使用Kubernetes
spec.security.authentication.ldap
LDAPMongoDB AgentKubernetesOperatorMongoDB MongoDB资源规范中 下的参数以及特定于MongoDB 助手助手的其他安全LDAP设置。本部分中的过程描述了所需的设置,并提供了LDAP配置的示例。为了提高安全性,请考虑部署TLS 加密的副本集或TLS 加密的分片集群。 使用TLS加密是可选的。 默认情况下, LDAP流量以纯文本形式发送。 这意味着用户名和密码会受到网络威胁。 许多现代目录服务(例如 Microsoft Active Directory)都需要加密连接。 考虑使用基于 TLS / SSL 的 LDAP 对 Kubernetes 操作符 MongoDB 部署中的身份验证请求进行加密。
一般先决条件
在为 MongoDB 部署配置 LDAP 身份验证之前,请完成以下任务:
确保部署 MongoDB Enterprise 数据库资源。 MongoDB Community 数据库不支持 LDAP 身份验证。
部署副本集 或部署要使用 LDAP 保护其客户端身份验证安全 的分片集群 。
为副本集配置 LDAP 客户端身份验证
复制示例副本集资源。
更改此 YAML 文件的设立,以匹配所需的副本集配置。
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-replica-set> 6 spec: 7 members: 3 8 version: "4.2.2-ent" 9 opsManager: 10 configMapRef: 11 # Must match metadata.name in ConfigMap file 12 name: <configMap.metadata.name> 13 credentials: <mycredentials> 14 type: ReplicaSet 15 persistent: true
16 security: 17 tls: 18 ca: <custom-ca> 19 certsSecretPrefix: <prefix> 20 ...
将复制的示例部分粘贴到现有副本集资源中。
打开您首选的文本编辑器并粘贴 对象 规范位于资源文件末尾的spec
部分。
为副本集资源配置LDAP设置。
要在部署中启用LDAP ,请在 Kubernetes 对象中配置以下设置:
键 | 类型和必要性 | 说明 | 例子 |
---|---|---|---|
spec.security | boolean, required | 设置为 true 可启用 LDAP 身份验证。 | true |
spec.security | string, required | 指定连接到 LDAP 服务器时 MongoDB 绑定到的 LDAP 标识名。 | cn=admin,dc=example,dc=org |
spec.security | string, required | 指定 密钥 名称 包含连接到 LDAP 服务器时 MongoDB 绑定的 LDAP 绑定标识名的密码。 | <secret-name> |
spec.security | string, optional | <configmap-name> | |
spec.security | string, optional | 添加用于存储验证 LDAP 服务器的 TLS 证书的 CA 的字段名称。 | <configmap-key> |
spec.security | array of strings, required | 指定一个或多个 LDAP 服务器的 hostname:port 组合列表。 对于每个服务器,使用单独的一行。 | <example.com:636> |
spec.security | string, optional | 设置为 tls 可使用 LDAPS (LDAP over TLS )。 如果 LDAP 服务器不接受 TLS,请留空。 在部署数据库资源时,必须启用 TLS 才能使用此设置。 | tls |
spec.security | string, required | 指定映射,将提供给 要了解更多信息,请参阅security.ldap.userToDNMapping 和LDAP LDAP MongoDB Server文档中的 查询模板 。 | <match: "(.+)",substitution: "uid={0},ou=groups,dc=example,dc=org"> |
spec.security | string, required | 设置为 LDAP 可通过 LDAP 启用身份验证。 | LDAP |
生成的配置可能类似于以下示例:
security: authentication: enabled: true # Enabled LDAP Authentication Mode modes: - "LDAP" - "SCRAM" # LDAP related configuration ldap: # Specify the hostname:port combination of one or # more LDAP servers servers: - "ldap1.example.com:636" - "ldap2.example.com:636" # Set to "tls" to use LDAP over TLS. Leave blank if # the LDAP server doesn't accept TLS. You must enable TLS when you deploy the database resource to use this setting. transportSecurity: "tls" # If TLS is enabled, add a reference to a ConfigMap that # contains a CA certificate that validates the LDAP server's # TLS certificate. caConfigMapRef: name: "<configmap-name>" key: "<configmap-entry-key>" # Specify the LDAP Distinguished Name to which # MongoDB binds when connecting to the LDAP server bindQueryUser: "cn=admin,dc=example,dc=org" # Specify the password with which MongoDB binds # when connecting to an LDAP server. This is a # reference to a Secret Kubernetes Object containing # one "password" key. bindQueryPasswordSecretRef: name: "<secret-name>"
有关 LDAP 设置的完整列表,请参阅 Kubernetes 操作符 MongoDB 资源规范中的安全设置。另请参阅启用 LDAP 的 Kubernetes 操作符 部署中 MongoDB Agent 用户的spec.security.authentication.agents.automationUserName
设置。
为 MongoDB Agent 配置 LDAP 设置。
使用 Kubernetes Operator MongoDB 资源规范中特定于助手的安全设置更新 MongoDB资源。 生成的配置可能类似于以下示例:
security: authentication: agents: automationPasswordSecretRef: key: automationConfigPassword name: automation-config-password automationUserName: mms-automation-agent clientCertificateSecretRef: name: agent-client-cert mode: LDAP enabled: true ldap: bindQueryPasswordSecretRef: name: bind-query-password bindQueryUser: cn=admin,dc=example,dc=org servers: - openldap.namespace.svc.cluster.local:389 userToDNMapping: '[{match: "(.+)",substitution: "uid={0},ou=groups,dc=example,dc=org"}]' modes: - LDAP - SCRAM requireClientTLSAuthentication: false
将更改应用于副本集部署。
调用以下 Kubernetes 命令来更新副本集:
kubectl apply -f <replica-set-conf>.yaml
跟踪部署状态。
要检查 MongoDB
资源的状态,请使用以下命令:
kubectl get mdb <resource-name> -o yaml -w
设置 -w
(观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running
状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除。
为分片集群配置 LDAP 客户端身份验证
复制示例分片集群资源。
更改此 YAML 文件的设置,以匹配所需的分片集群配置。
1 2 apiVersion: mongodb.com/v1 3 kind: MongoDB 4 metadata: 5 name: <my-sharded-cluster> 6 spec: 7 shardCount: 2 8 mongodsPerShardCount: 3 9 mongosCount: 2 10 configServerCount: 3 11 version: "4.2.2-ent" 12 opsManager: 13 configMapRef: 14 name: <configMap.metadata.name> 15 # Must match metadata.name in ConfigMap file 16 credentials: <mycredentials> 17 type: ShardedCluster 18 persistent: true
19 security: 20 tls: 21 ca: <custom-ca> 22 certsSecretPrefix: <prefix> 23 ...
将复制的示例部分粘贴到现有的分片集群资源中。
打开您首选的文本编辑器并粘贴 对象 规范位于资源文件末尾的spec
部分。
为分分片集群资源配置LDAP设置。
要在部署中启用LDAP ,请在 Kubernetes 对象中配置以下设置:
键 | 类型和必要性 | 说明 | 例子 |
---|---|---|---|
spec.security | boolean, required | 设置为 true 可启用 LDAP 身份验证。 | true |
spec.security | string, required | 指定连接到 LDAP 服务器时 MongoDB 绑定到的 LDAP 标识名。 | cn=admin,dc=example,dc=org |
spec.security | string, required | 指定 密钥 名称 包含连接到 LDAP 服务器时 MongoDB 绑定的 LDAP 绑定标识名的密码。 | <secret-name> |
spec.security | string, optional | <configmap-name> | |
spec.security | string, optional | 添加用于存储验证 LDAP 服务器的 TLS 证书的 CA 的字段名称。 | <configmap-key> |
spec.security | array of strings, required | 指定一个或多个 LDAP 服务器的 hostname:port 组合列表。 对于每个服务器,使用单独的一行。 | <example.com:636> |
spec.security | string, optional | 设置为 tls 可使用 LDAPS (LDAP over TLS )。 如果 LDAP 服务器不接受 TLS,请留空。 在部署数据库资源时,必须启用 TLS 才能使用此设置。 | tls |
spec.security | string, required | 指定映射,将提供给 要了解更多信息,请参阅security.ldap.userToDNMapping 和LDAP LDAP MongoDB Server文档中的 查询模板 。 | <match: "(.+)",substitution: "uid={0},ou=groups,dc=example,dc=org"> |
spec.security | string, required | 设置为 LDAP 可通过 LDAP 启用身份验证。 | LDAP |
生成的配置可能类似于以下示例:
security: authentication: enabled: true # Enabled LDAP Authentication Mode modes: - "LDAP" - "SCRAM" # LDAP related configuration ldap: # Specify the hostname:port combination of one or # more LDAP servers servers: - "ldap1.example.com:636" - "ldap2.example.com:636" # Set to "tls" to use LDAP over TLS. Leave blank if # the LDAP server doesn't accept TLS. You must enable TLS when you deploy the database resource to use this setting. transportSecurity: "tls" # If TLS is enabled, add a reference to a ConfigMap that # contains a CA certificate that validates the LDAP server's # TLS certificate. caConfigMapRef: name: "<configmap-name>" key: "<configmap-entry-key>" # Specify the LDAP Distinguished Name to which # MongoDB binds when connecting to the LDAP server bindQueryUser: "cn=admin,dc=example,dc=org" # Specify the password with which MongoDB binds # when connecting to an LDAP server. This is a # reference to a Secret Kubernetes Object containing # one "password" key. bindQueryPasswordSecretRef: name: "<secret-name>"
有关 LDAP 设置的完整列表,请参阅 Kubernetes 操作符 MongoDB 资源规范中的安全设置。另请参阅启用 LDAP 的 Kubernetes 操作符 部署中 MongoDB Agent 用户的spec.security.authentication.agents.automationUserName
设置。
为 MongoDB Agent 配置 LDAP 设置。
使用 Kubernetes Operator MongoDB 资源规范中特定于助手的安全设置更新 MongoDB资源。 生成的配置可能类似于以下示例:
security: authentication: agents: automationPasswordSecretRef: key: automationConfigPassword name: automation-config-password automationUserName: mms-automation-agent clientCertificateSecretRef: name: agent-client-cert mode: LDAP enabled: true ldap: bindQueryPasswordSecretRef: name: bind-query-password bindQueryUser: cn=admin,dc=example,dc=org servers: - openldap.namespace.svc.cluster.local:389 userToDNMapping: '[{match: "(.+)",substitution: "uid={0},ou=groups,dc=example,dc=org"}]' modes: - LDAP - SCRAM requireClientTLSAuthentication: false
将更改应用于分分片集群部署。
调用以下 Kubernetes 命令来更新分片集群:
kubectl apply -f <sharded-cluster-conf>.yaml
跟踪部署状态。
要检查 MongoDB
资源的状态,请使用以下命令:
kubectl get mdb <resource-name> -o yaml -w
设置 -w
(观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running
状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除。