MongoDB admite el uso de directivas de expansión en archivos de configuración para cargar valores de origen externo. Las directivas de expansión pueden cargar valores para... Opciones 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
Si el archivo de configuración incluye el Expansión
__rest: en Linux/macOS, el acceso de lectura al archivo de configuración debe estar limitado únicamente al usuario que ejecuta el procesomongod/mongos.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.
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 omites la opción --configExpand o si no especificas la lista completa de directivas de expansión utilizadas en el archivo de configuración, la opción mongod/mongos devuelve un error y se termina. Solo puedes 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 __rest directiva de expansión para cargar el net.tls.certificateKeyFilePassword valor de configuración desde un REST punto final externo:
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 bloques
__rest, inicia elmongod/mongoscon la opción--configExpand "rest".El
mongod/ emitemongosunaGETsolicitud contra la URL especificada. Si la solicitud es correcta, elmongod/mongosreemplaza el valor decertificateKeyFilePasswordcon el valor devuelto. Si la URL no se resuelve o si elRESTpunto final devuelve un valor no válido, elmongod/mongosgenera un error y finaliza la conexión.
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 bloques
__rest, inicia elmongod/mongoscon la opción--configExpand "rest".El
mongod/mongosemite una solicitudGETcontra la URL especificada. Si es exitoso, elmongod/mongosanaliza el archivo de configuraciónyamldevuelto y lo utiliza durante el inicio. Si la URL no se resuelve o devuelve un archivoyamlcon el formato correcto, elmongod/mongosarroja un error y termina.
Importante
Utiliza la directiva de expansión __exec
La __exec directiva de expansión carga valores del archivo de configuración desde un comando de shell o terminal. __exec admite la carga de valores específicos en el archivo de configuración o la carga de 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 bloques
__exec, inicia elmongod/mongoscon la opción--configExpand "exec".El comando
mongod/mongosintenta ejecutar la operación especificada. Si el comando se ejecuta correctamente, el comandomongod/mongosreemplaza 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, el comandomongod/mongosgenera 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 bloques
__exec, inicia elmongod/mongoscon la opción--configExpand "rest".Si el comando se ejecuta correctamente,
mongod/ analiza el archivo de configuraciónmongosdevueltoyamly lo utiliza durante el inicio. Si el comando falla o devuelve unyamlarchivo nomongodválido, / genera un error ymongosfinaliza.
Importante
Los datos devueltos al ejecutar la string __exec especificada no pueden incluir ninguna directiva de expansión adicional. El mongod/mongos no realiza un procesamiento adicional de los datos devueltos y terminará 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 un endpoint deREST.__restadmite la carga de valores específicos en el archivo de configuración o la carga de todo el archivo de configuración. Elmongod/mongoscomienza entonces a utilizar los valores obtenidos externamente como parte de su configuración.La
__restdirectiva de expansión tiene 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
Requerido La URL ante la cual el
mongod/mongosemite una solicitudGETpara recuperar el valor obtenido externamente.Para puntos finales no localhost
REST(por ejemplo, un punto final deRESTalojado en un servidor remoto),__restrequiere URLs cifradas (https://) donde tanto la máquina host como el servidor remoto soporten TLS 1.1 o posterior.Si el endpoint
RESTespecificado en la URL requiere autenticación, codifica las credenciales en la URL mediante el estándar RFC 3986 Información del usuario formato.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 extremo especificado de
RESTno puede incluir ninguna directiva de expansión adicional. Elmongod/mongosno realiza un procesamiento adicional de los datos devueltos y finalizará con un código de error si los datos devueltos incluyen directivas adicionales de expansión.typestring
Opcional Controla cómo analiza el valor devuelto desde la URL
__restespecificada.Los valores posibles son:
string(por defecto)Indica a que analice los datos devueltos como una cadena literal. Si
__restsestringespecifica, todo el__restbloque y las opciones complementarias deben estar anidados bajo el campo para el que se cargan los valores de origen externo.yamlIndica a que analice los datos devueltos como
__restunyamlarchivo con formato. Si seyamlespecifica, el bloque debe ser el__restmongodúnico contenido del archivo de configuración. / reemplazamongoselyamlcontenido del archivo de configuración con el obtenido del recurso REST.
trimstring
Opcional: Especifique
whitespacepara indicar a que recorte cualquier espacio inicial o final, específicamente las__restocurrencias" ""\r"de,,,,"\n""\t""\v"y."\f"El valor predeterminado esnoneo no se recorta.string
opcional. El resumen SHA-256 del resultado de la expansión.
Si se especifica, también debe especificar digest_key.
string
Nota
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.Para habilitar el análisis de la directiva de expansión
__rest, inicie elmongod/mongoscon 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.__execadmite la carga de valores específicos en el archivo de configuración o la carga de todo el archivo de configuración. Elmongod/mongoscomenzará entonces a utilizar los valores obtenidos externamente como parte de su configuración.La
__execdirectiva de expansión tiene 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 string que el
mongod/mongosejecuta en el terminal o shell para recuperar el valor obtenido externamente.En hosts Linux y OSX, la ejecución se gestiona mediante POSIX
popen(). En hosts Windows, la ejecución se gestiona mediante la API de control de procesos.__execabre una tubería de solo lectura con el mismo usuario que iniciómongodomongos.IMPORTANTE: Los datos devueltos al ejecutar el comando especificado no pueden incluir directivas de expansión adicionales.
mongod/mongosno realiza procesamiento adicional en los datos devueltos y finalizará con un código de error si estos incluyen directivas de expansión adicionales.typestring
Opcional Controla cómo
__execanaliza el valor devuelto por el comando ejecutado.Los valores posibles son:
string( Pordefecto )Indica a que analice los datos devueltos como una cadena literal. Si
__execsestringespecifica, todo el__execbloque y las opciones complementarias deben estar anidados bajo el campo para el que se cargan los valores de origen externo.yamlDirige a
__execpara analizar los datos devueltos como un archivo con formatoyaml. Si se especificayaml, el bloque__execdebe ser el único contenido en el archivo de configuración. El/Lamongod/mongosreemplaza el contenido del archivo de configuración con los/asyamlrecuperados/as a partir del comando ejecutado.
trimstring
Opcional: Especifique
whitespacepara indicar a que recorte cualquier espacio inicial o final, específicamente las__execocurrencias" ""\r"de,,,,"\n""\t""\v"y."\f"El valor predeterminado esnoneo no se recorta.string
opcional. El resumen SHA-256 del resultado de la expansión.
Si se especifica, también debe especificar la clave_digest
string
Nota
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.Para habilitar el análisis de las
__execdirectivas de expansión, iniciemongod/mongoscon la--configExpand "exec"opción.
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
Puede probar el resultado final de un archivo de configuración que especifique una o más directivas de expansión iniciando el mongod/mongos con la opción --outputConfig. Un mongod/mongos iniciado con --outputConfig emite el documento de configuración YAML resuelto en stdout y se detiene. Si cualquier directiva de expansión especificada en el archivo de configuración devuelve directivas de expansión adicionales, la mongod/mongos lanza un error y termina.
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.
Comience el mongod con --configExpand "rest" las opciones --outputConfig y:
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