Este tutorial le muestra cómo conectar mongosh a un set de réplicas autogestionado habilitado para TLS.
Antes de comenzar
Antes de empezar, verifique que tiene lo siguiente:
Un set de réplicas que configuró para usar TLS siguiendo los pasos de Configurar TLS en implementaciones autogestionadas.
Control de acceso de MongoDB habilitado en su implementación y al menos un usuario administrador creado. Para configurar el control de acceso, consulte Habilitar el control de acceso en implementaciones autogestionadas. Este usuario debe tener privilegios
clusterMonitor.Si deseas conectarte a tu implementación mediante la autenticación X.509, asegúrate de tener OpenSSL instalado para generar un certificado de cliente.
Acceso a
mongosh.
Pasos
Si no desea utilizar TLS mutuo o X.509 autenticación de cliente, siga este procedimiento. Si establece allowConnectionsWithoutCertificates en true en la configuración de su servidor, los clientes pueden conectarse sin presentar un certificado y autenticarse con SCRAM en su lugar.
Conéctese a su implementación con mongosh
Conecte mongosh a su set de réplicas utilizando las siguientes opciones:
mongosh "mongodb://mongo0.example.com:27017,mongo1.example.com:27017,mongo2.example.com:27017" \ --tls --tlsCAFile /etc/ssl/mongodb/ca.pem
--tlshabilita el cifrado TLS para la conexión.--tlsCAFilese establece en el certificado de CA que firmó los certificados del servidor para quemongoshpueda verificar los certificados del servidor.
La conexión sin un certificado de cliente establece una sesión cifrada con TLS, pero no lo autentica. Para ejecutar la mayoría de los comandos, debe autenticarse con un mecanismo como SCRAM.
Autenticar usuario
Utilice el método db.auth() para autenticarse con su nombre de usuario y contraseña de administrador.
Si desea utilizar TLS mutuo y autenticación de cliente X.509 al conectarse a su implementación, siga este procedimiento para crear y autenticarse con un certificado de cliente.
Generar un certificado de cliente
Advertencia
No utilice el mismo certificado que los nodos de su servidor. Debe generar un nuevo certificado de cliente para la509 autenticación X., incluso si sus certificados de servidor son válidos para la autenticación de cliente.
Genere un certificado de cliente mediante el proceso descrito en Obtener certificados de servidor TLS. Realice los siguientes ajustes:
En su archivo de configuración, establezca
extendedKeyUsage = clientAuthen lugar deserverAuth.La CA que firmó los certificados de autenticación de cliente de su nodo también debe firmar su certificado de cliente. Generalmente, esto es
ca.pem. Sin embargo, si obtuvo certificados separados para la autenticación de cliente, es posible que tenga una CA diferente para los certificados de cliente.Asigne a sus archivos de salida los nombres
client.key,client.crtyclient.pemen lugar de los nombres específicos de los nodos utilizados en el tutorial de certificados.
Una vez completado el proceso, copie client.pem en una ubicación segura en la máquina donde ejecuta mongosh:
cp client.pem /etc/ssl/mongodb/client.pem
Identifique el asunto de su cliente
Identifique el asunto de su certificado de cliente. Necesita este valor para confirmar que se autenticó con el certificado de cliente esperado después de conectarse.
Para ver el asunto, ejecute el siguiente comando:
openssl x509 -in /etc/ssl/mongodb/client.pem -noout -subject
Toma nota del resultado, que se parece a lo siguiente:
subject=C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser
Guarda el nombre del sujeto para usarlo más adelante en este tutorial. En este ejemplo, el nombre del sujeto es C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser.
Conéctese a su implementación con su certificado de cliente.
Conecte mongosh a su set de réplicas utilizando las siguientes opciones:
mongosh "mongodb://mongo0.example.com:27017,mongo1.example.com:27017,mongo2.example.com:27017" \ --tls \ --tlsCAFile /etc/ssl/mongodb/ca.pem \ --tlsCertificateKeyFile /etc/ssl/mongodb/client.pem
--tlshabilita el cifrado TLS para la conexión.--tlsCAFilese establece en el certificado de CA que firmó los certificados del servidor para quemongoshpueda verificar la conexión del servidor.--tlsCertificateKeyFilepresenta el certificado de cliente y la llave privada que el servidor utiliza para autenticar su conexión con X.509.
Esto lo conecta a su implementación de MongoDB a través de TLS.
Autenticarse como usuario administrador
Utilice el método db.auth() para autenticarse con su nombre de usuario y contraseña de administrador.
Crea un usuario en la $external base de datos
Cree un usuario en la base de datos $external que corresponda al nombre del sujeto de su certificado de cliente con el método db.createUser(). Reemplace el nombre de usuario con el sujeto de su certificado de cliente que identificó anteriormente:
db.getSiblingDB("$external").runCommand({ createUser: "C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser", roles: [ { role: "readWriteAnyDatabase", db: "admin" } ] })
Después de crear un usuario, utilice el método db.auth() para autenticarse en la base de datos $external mediante X.509:
db.getSiblingDB("$external").auth({ mechanism: "MONGODB-X509", user: "C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser" })
Resultado final
Después de completar este tutorial, mongosh se conecta a su set de réplicas a través de una conexión TLS cifrada, autenticada con SCRAM o X.509.