MongoDB admite utilizar directivas de expansión en archivos de configuración para cargar valores obtenidos externamente. Las directivas de expansión pueden cargar valores para opciones específicas del archivo de configuración o cargar el archivo de configuración completo. Las directivas de expansión ayudan a ocultar información confidencial, como certificados de seguridad y contraseñas.
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: __exec: "python /home/user/getIPAddresses.py" type: "string" trim: "whitespace" digest: 85fed8997aac3f558e779625f2e51b4d142dff11184308dc6aca06cff26ee9ad digest_key: 68656c6c30303030307365637265746d796f6c64667269656e64 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __rest: "https://myrestserver.example.net/api/config/myCertKeyFilePassword" type: "string" digest: b08519162ba332985ac18204851949611ef73835ec99067b85723e10113f5c26 digest_key: 6d795365637265744b65795374756666
Para usar las directivas de expansión, debes especificar la opción de línea de comandos --configExpand con la lista completa de directivas de expansión utilizadas:
mongod --config "/path/to/config/mongod.conf" --configExpand "rest,exec"
Si omite la opción --configExpand o si no especifica la lista completa de directivas de expansión utilizadas en el archivo de configuración, el mongod devuelve un error y termina. Solo puede especificar la opción --configExpand en la línea de comandos.
Utiliza la directiva de expansión __rest
La __rest directiva de expansión carga los valores del archivo de configuración desde un endpoint de REST. __rest es compatible con la carga de valores específicos en el archivo de configuración o la carga de todo el archivo de configuración.
El siguiente archivo de configuración utiliza la directiva de expansión __rest para cargar el valor de configuración net.tls.certificateKeyFilePassword de un punto final externo REST:
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: 192.51.100.24,127.0.0.1 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __rest: "https://myrestserver.example.net/api/config/myCertKeyFilePassword" type: "string"
- Permiso de archivo
Si el archivo de configuración incluye la expansión
__rest, en Linux/macOS, el acceso de lectura al archivo de configuración debe limitarse solo al usuario que ejecuta el procesomongod/mongos.- Análisis de expansión
Para analizar los
__restbloques, comience elmongodcon la--configExpand "rest"opción.El
mongodemite una solicitudGETa la URL especificada. Si es exitoso, elmongodreemplaza el valor decertificateKeyFilePasswordcon el valor devuelto. Si la URL no se resuelve o si el punto de conexiónRESTdevuelve un valor no válido, elmongodgenera un error y finaliza.
El siguiente archivo de configuración utiliza la directiva de expansión __rest para cargar el archivo de configuración desde un endpoint externo de REST. La directiva de expansión y sus opciones deben ser los únicos valores especificados en el archivo de configuración.
__rest: "https://myrestserver.example.net/api/config/fullConfig" type: "yaml"
- Permiso de archivo
Si el archivo de configuración incluye la expansión
__rest, en Linux/macOS, el acceso de lectura al archivo de configuración debe limitarse solo al usuario que ejecuta el procesomongod/mongos.- Análisis de expansión
Para analizar los
__restbloques, comience elmongodcon la--configExpand "rest"opción.El
mongodemite una solicitudGETa la URL especificada. Si tiene éxito, elmongodanaliza el archivo de configuraciónyamldevuelto y lo utiliza durante el inicio. Si la URL no se resuelve o no devuelve un archivoyamlcon el formato adecuado, elmongodgenera un error y finaliza.
Importante
El valor devuelto por el REST punto final especificado no puede incluir directivas de expansión adicionales. El mongod no realiza ningún procesamiento adicional sobre los datos devueltos y finalizará con un código de error si los datos devueltos incluyen directivas de expansión adicionales.
Utiliza la directiva de expansión __exec
La directiva de expansión __exec carga valores del archivo de configuración desde un comando de shell o terminal. __exec admite cargar valores específicos en el archivo de configuración o cargar todo el archivo de configuración.
El siguiente ejemplo de archivo de configuración utiliza la directiva de expansión __exec para cargar el valor de la configuración net.tls.certificateKeyFilePassword a partir de la salida de un comando de shell o terminal:
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: 192.51.100.24,127.0.0.1 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __exec: "python /home/myUserName/getPEMPassword.py" type: "string"
- Permiso de archivo
Si el archivo de configuración incluye la expansión
__exec, en Linux/macOS, el acceso de escritura al archivo de configuración debe limitarse únicamente al usuario que ejecuta el procesomongod/mongos.- Análisis de expansión
Para analizar los
__execbloques, comience elmongodcon la--configExpand "exec"opción.El
mongodintenta ejecutar la operación especificada. Si el comando se ejecuta correctamente, elmongodreemplaza el valor decertificateKeyFilePasswordcon el valor devuelto. Si el comando falla o devuelve un valor no válido para la configuración del archivo de configuración, elmongodgenera un error y finaliza.
El siguiente archivo de configuración de ejemplo utiliza la directiva de expansión __exec para cargar el archivo de configuración desde la salida de un comando de shell o terminal. La directiva de expansión __exec y sus opciones deben ser los únicos valores especificados en el archivo de configuración.
__exec: "python /home/myUserName/getFullConfig.py" type: "yaml"
- Permiso de archivo
Si el archivo de configuración incluye la expansión
__exec, en Linux/macOS, el acceso de escritura al archivo de configuración debe limitarse únicamente al usuario que ejecuta el procesomongod/mongos.- Análisis de expansión
Para analizar los
__execbloques, comience elmongodcon la--configExpand "rest"opción.Si el comando se ejecuta con éxito, el
mongodanaliza el archivo de configuraciónyamldevuelto y lo utiliza durante el inicio. Si el comando falla o devuelve un archivoyamlno válido, elmongodgenera un error y finaliza.
Importante
Los datos devueltos al ejecutar la string __exec especificada no pueden incluir ninguna directiva de expansión adicional. El mongod no realiza procesamiento adicional en los datos devueltos y finalizará con un código de error si los datos devueltos incluyen directivas de expansión adicionales.
Referencia de las directrices de expansión
__restLa
__restdirectiva de expansión carga los valores del archivo de configuración desde unRESTpunto final.__restadmite la carga de valores específicos en el archivo de configuración o la carga del archivo de configuración completo. Amongodcontinuación, comienza a utilizar los valores de origen externo como parte de su configuración.La directiva de expansión
__resttiene la siguiente sintaxis:Para especificar un endpoint de
RESTpara un ajuste o ajustes de archivo de configuración:<some configuration file setting>: __rest: "<string>" type: "string" trim: "none|whitespace" digest: "<string>" digest_key: "<string>" Para especificar un endpoint
RESTpara todo el archivo de configuración:__rest: "<string>" type: "yaml" trim: "none|whitespace" Si especificas el archivo de configuración completo vía el endpoint
REST, la directiva de expansión y sus opciones deben ser los únicos valores especificados en el archivo de configuración.
__restrequiere los siguientes campos:CampoTipoDescripciónstring
Obligatorio La URL contra la que el
mongodemite una solicitudGETpara recuperar el valor de origen externo.Para los endpoints de
RESTque no son localhost (por ejemplo, un endpoint deRESTalojado en un servidor remoto),__restrequiere URLs cifradas (https://) donde tanto la máquina host como el servidor remoto admitan TLS 1.1 o posterior.Si el
RESTpunto final especificado en la URL requiere autenticación, codifique las credenciales en la URL con el formato estándar de 3986 información de usuario RFC.Para los endpoints de localhost
REST(por ejemplo, un endpointRESTque escucha en la máquina host),__restpermite URLs sin cifrado (http://).IMPORTANTE: El valor devuelto por el punto final
RESTespecificado no puede incluir directivas de expansión adicionales. Elmongodno realiza procesamiento adicional en los datos devueltos y finalizará con un código de error si los datos devueltos incluyen directivas de expansión adicionales.typestring
Opcional Controla cómo
__restanaliza el valor devuelto desde la URL especificada.Los valores posibles son:
trimstring
Opcional Especifique
whitespacepara que__restrecorte cualquier espacio en blanco al principio o al final, específicamente las apariciones de" ","\r","\n","\t","\v"y"\f". Por defecto esnoneo no recorta.string
opcional. La salida HMAC-SHA256 del resultado de la expansión, calculada como
HMAC-SHA256(digest_key, message), dondemessagees el valor de la configuración que se va a recuperar.Si se especifica, también se debe especificar la clave de síntesis digest_key.
string
opcional. La representación de string hexadecimal de 64caracteres de la clave de 32bytes utilizada para calcular el HMAC-SHA256 digest del resultado de la expansión.
Si se especifica, también debe especificar el resumen.
Por ejemplo, supongamos que el
certificateKeyFilePasswordes "superSecret123". Para recuperar esta contraseña mediante una solicitud REST o una llamada al servicio exec, debe generar una clave de resumen y usarla para calcular el resumen de su contraseña.Ejecute el siguiente código en su terminal para generar una clave de resumen de 32bytes:
openssl rand -hex 32 Después de generar una clave de resumen, puede usarla para calcular el resumen de su contraseña:
echo -ne "superSecret123" | openssl dgst -sha256 -mac hmac -macopt hexkey:f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304 Nota
Para habilitar el análisis de la directiva de expansión
__rest, inicie elmongodcon la opción--configExpand "rest".
Para ejemplos, consulte Usar la directiva de expansión
__rest.
__execLa directiva de expansión
__execcarga los valores del archivo de configuración a partir de la salida de un comando de shell o terminal.__execes compatible con la carga de valores específicos en el archivo de configuración o la carga de todo el archivo de configuración. A continuación,mongodcomienza a utilizar los valores de origen externo como parte de su configuración.La directiva de expansión
__exectiene la siguiente sintaxis:Para especificar un comando shell o de terminal para una configuración específica o configuraciones en un archivo de configuración:
<some configuration file setting>: __exec: "<string>" type: "string" trim: "none|whitespace" Para especificar un shell o comando de terminal para todo el archivo de configuración:
__exec: "<string>" type: "yaml" trim: "none|whitespace" Si se especifica todo el archivo de configuración a través de un comando de terminal o shell, la directiva de expansión y sus opciones deben ser los únicos valores especificados en el archivo de configuración.
__execrequiere los siguientes campos:CampoTipoDescripción__execstring
Obligatorio La cadena que ejecuta en la terminal o shell para recuperar el valor de origen
mongodexterno.En los hosts Linux y OSX, la ejecución se gestiona mediante POSIX
popen(). En los hosts de Windows, la ejecución se gestiona a través de la API de control de procesos.__execabre una pipe de solo lectura como el mismo usuario que iniciómongodomongos.IMPORTANTE: Los datos devueltos al ejecutar el comando especificado no pueden incluir ninguna directiva de expansión adicional. El
mongodno realiza procesamiento adicional en los datos devueltos y finalizará con un código de error si los datos devueltos incluyen directivas de expansión adicionales.typestring
Opcional Controla cómo
__execanaliza el valor devuelto por el comando ejecutado.Los valores posibles son:
trimstring
Opcional Especifique
whitespacepara que__execrecorte cualquier espacio en blanco al principio o al final, específicamente las apariciones de" ","\r","\n","\t","\v"y"\f". Por defecto esnoneo no recorta.string
opcional. La salida HMAC-SHA256 del resultado de la expansión, calculada como
HMAC-SHA256(digest_key, message), dondemessagees el valor de la configuración que se va a recuperar.Si se especifica, también debe especificar la clave_digest
string
opcional. La representación de string hexadecimal de 64caracteres de la clave de 32bytes utilizada para calcular el HMAC-SHA256 digest del resultado de la expansión.
Si se especifica, también se debe especificar el resumen
Por ejemplo, supongamos que el
certificateKeyFilePasswordes "superSecret123". Para recuperar esta contraseña mediante una solicitud REST o una llamada al servicio exec, debe generar una clave de resumen y usarla para calcular el resumen de su contraseña.Ejecute el siguiente código en su terminal para generar una clave de resumen de 32bytes:
openssl rand -hex 32 Después de generar una clave de resumen, puede usarla para calcular el resumen de su contraseña:
echo -ne "superSecret123" | openssl dgst -sha256 -mac hmac -macopt hexkey:f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304 Nota
Para habilitar el análisis de las directivas de expansión
__exec, inicie elmongodcon la opción--configExpand "exec".
Para ejemplos, consulte Usar la directiva de expansión
__exec.
Genere el archivo de configuración con los valores resueltos de la directiva de expansión
Puedes probar el resultado final de un archivo de configuración que especifica una o más directivas de expansión comenzando elmongodcon la opción--outputConfig. Unmongodque comienza con--outputConfiggenera el documento de configuración YAML resuelto en stdout y se detiene. Si alguna directiva de expansión especificada en el archivo de configuración devuelve directivas de expansión adicionales, elmongodgenera un error y finaliza.
Advertencia
La opción --outputConfig devuelve los valores resueltos para cualquier campo usando una directiva de expansión. Esto incluye cualquier información privada o sensible previamente ocultada mediante una fuente externa para la opción de configuración.
Por ejemplo, el siguiente archivo de configuración mongod.conf contiene una directiva de expansión __rest:
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: port: __rest: "https://mongoconf.example.net:8080/record/1" type: string
La string grabada en la URL especificada es 20128
Si el archivo de configuración incluye la expansión __rest, en Linux/macOS, el acceso de lectura al archivo de configuración debe limitarse solo al usuario que ejecuta el proceso mongod / mongos.
Inicia el mongod con las opciones --configExpand "rest" y --outputConfig:
mongod -f mongod.conf --configExpand rest --outputConfig
El mongod emite lo siguiente a stdout antes de finalizar:
config: mongod.conf storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: port: 20128 outputConfig: true