Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs Menu
Docs Home
/ /

Autenticación segura de clientes con X.509

Los controladores de MongoDB para Kubernetes Operator pueden usar certificados X.509 para autenticar sus aplicaciones cliente en sus implementaciones de MongoDB.

Esta guía te explica cómo configurar la autenticación X.509 de clientes a tus instancias de MongoDB.

Nota

No puedes asegurar una instancia autónoma de MongoDB en un clúster de Kubernetes.

Antes de asegurar tu implementación de MongoDB usando TLS cifrado, complete lo siguiente:

  • Instalar el operador de Kubernetes

  • Crear credenciales para el operador de Kubernetes

Habilitar la autenticación X.509 a nivel de Proyecto configura a todos los agentes para que utilicen autenticación de cliente X.509 cuando se comuniquen con implementaciones de MongoDB.

Antes de proteger tu set de réplicas con X.509, implementa un set de réplicas cifrado con TLS.

1

Cambie la configuración de este archivo YAML para que coincida con la configuración del conjunto de réplicas deseada.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-replica-set>
6spec:
7 members: 3
8 version: "8.0.0"
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 authentication:
21 enabled: true
22 modes: ["X509"]
23...
2

Abra su editor de texto preferido y pegue la especificación del objeto al final de su archivo de recursos en el spec sección.

3

Para habilitar TLS y X.509 en tu implementación, configura los siguientes ajustes en tu objeto de Kubernetes:

Clave
Tipo
Necesidad
Descripción
Ejemplo
spec.security
.authentication

booleano

Requerido

Establece este valor en true para habilitar la autenticación en la implementación de MongoDB.

true

spec.security
.authentication

arreglo

Condicional

Configura este valor en ["X509"].

["X509"]

4
5

Invoca el siguiente comando de Kubernetes para actualizar tu set de réplicas:

kubectl apply -f <replica-set-conf>.yaml
6

Para comprobar el estado de su recurso MongoDB, utilice el siguiente comando:

kubectl get mdb <resource-name> -o yaml -w

Con la bandera -w (observar) activada, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el estado Running. Para obtener más información sobre el estado de implementación de recursos, consulta Solucionar problemas con el operador de Kubernetes.

Si ya ha creado certificados, le recomendamos que los renueve periódicamente mediante el siguiente procedimiento.

Nota

Para automatizar la renovación de certificados para las implementaciones de Ops Manager, considera configurar la integración cert-manager.

1

Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los comandos de kubectl en el namespace que creó.

Nota

Si está implementando un recurso de Ops Manager en una implementación de MongoDB de un clúster de Kubernetes múltiple:

  • Defina context como el nombre del clúster operador, por ejemplo: kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".

  • Establece el --namespace en el mismo ámbito que utilizaste para tu implementación de MongoDB de clústeres multi-Kubernetes, como por ejemplo: kubectl config --namespace "mongodb".

kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
2

Ejecute este kubectl comando para renovar un secreto existente que almacena los certificados del conjunto de réplicas:

kubectl create secret tls <prefix>-<metadata.name>-cert \
--cert=<replica-set-tls-cert> \
--key=<replica-set-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
3

Ejecuta este comando kubectl para renovar un secreto existente que almacena los certificados X.509 de los agentes:

kubectl create secret tls <prefix>-<metadata.name>-agent-certs \
--cert=<agent-tls-cert> \
--key=<agent-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -

Antes de asegurar tu clúster particionado usando X.509, por favor implementa un clúster particionado cifrado con TLS.

1

Cambia la configuración de este archivo YAML para que coincida con su configuración deseada de sharded cluster.

1---
2apiVersion: mongodb.com/v1
3kind: MongoDB
4metadata:
5 name: <my-sharded-cluster>
6spec:
7 shardCount: 2
8 mongodsPerShardCount: 3
9 mongosCount: 2
10 configServerCount: 3
11 version: "8.0.0"
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 authentication:
24 enabled: true
25 modes: ["X509"]
26...
2

Abre el editor de texto de preferencia y pega la especificación del objeto al final del archivo recurso, en la sección spec.

3

Para habilitar TLS y X.509 en tu implementación, configura los siguientes ajustes en tu objeto de Kubernetes:

Clave
Tipo
Necesidad
Descripción
Ejemplo
spec.security
.authentication

booleano

Requerido

Establece este valor en true para habilitar la autenticación en la implementación de MongoDB.

true

spec.security
.authentication

arreglo

Condicional

Configura este valor en ["X509"].

["X509"]

4
5

En cualquier directorio, ejecute el siguiente comando de Kubernetes para actualizar y reiniciar su clúster:

kubectl apply -f <sharded-cluster-conf>.yaml
6

Para comprobar el estado de su recurso MongoDB, utilice el siguiente comando:

kubectl get mdb <resource-name> -o yaml -w

Con la bandera -w (observar) activada, cuando la configuración cambia, la salida se actualiza inmediatamente hasta que la fase de estado alcanza el estado Running. Para obtener más información sobre el estado de implementación de recursos, consulta Solucionar problemas con el operador de Kubernetes.

Si ya ha creado certificados, le recomendamos que los renueve periódicamente mediante el siguiente procedimiento.

Nota

Para automatizar la renovación de certificados para las implementaciones de Ops Manager, considera configurar la integración cert-manager.

1

Si aún no lo ha hecho, ejecute el siguiente comando para ejecutar todos los comandos de kubectl en el namespace que creó.

Nota

Si está implementando un recurso de Ops Manager en una implementación de MongoDB de un clúster de Kubernetes múltiple:

  • Defina context como el nombre del clúster operador, por ejemplo: kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME".

  • Establece el --namespace en el mismo ámbito que utilizaste para tu implementación de MongoDB de clústeres multi-Kubernetes, como por ejemplo: kubectl config --namespace "mongodb".

kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
2

Ejecute este comando kubectl para renovar un secreto existente que almacena los certificados de las particiones del clúster fragmentado:

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-0-cert \
--cert=<shard-0-tls-cert> \
--key=<shard-0-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
kubectl -n mongodb create secret tls <prefix>-<metadata.name>-1-cert \
--cert=<shard-1-tls-cert> \
--key=<shard-1-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
3

Ejecuta este comando kubectl para renovar un secreto que almacena los certificados del servidor de configuración del clúster fragmentado:

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-config-cert \
--cert=<config-tls-cert> \
--key=<config-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
4

Ejecute este comando kubectl para renovar un secret existente que almacene los certificados de mongos del clúster sharded:

kubectl -n mongodb create secret tls <prefix>-<metadata.name>-mongos-cert \
--cert=<mongos-tls-cert> \
--key=<mongos-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -
5

Ejecuta este comando kubectl para renovar un secreto existente que almacena los certificados X.509 de los agentes:

kubectl create secret tls <prefix>-<metadata.name>-agent-certs \
--cert=<agent-tls-cert> \
--key=<agent-tls-key> \
--dry-run=client \
-o yaml |
kubectl apply -f -