O MongoDB suporta o uso de diretivas de expansão em arquivos de configuração para carregar valores de origem externa. As diretivas de expansão podem carregar valores paraopções específicas do arquivo de configuração ou carregar o arquivo de configuração inteiro. As diretivas de expansão ajudam a ocultar informações confidenciais, como certificados de segurança e senhas.
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
Se o arquivo de configuração incluir a
__restexpansão, no Linux/macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado apenas ao usuário quemongosmongodestiver executando o processo / apenas.Se o arquivo de configuração incluir a expansão
__exec, no Linux ou macOS, o acesso de gravação ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas.
Para usar diretivas de expansão, você deve especificar a opção de linha de comando --configExpand com a lista completa de diretivas de expansão usadas:
mongod --config "/path/to/config/mongod.conf" --configExpand "rest,exec"
Se você omitir a opção --configExpand ou não especificar a lista completa de diretivas de expansão usadas no arquivo de configuração, o mongod/mongos retornará um erro e será encerrado. Você só pode especificar a opção --configExpand na linha de comando.
Use a __rest diretiva de expansão
A diretiva de expansão __rest carrega valores do arquivo de configuração de um ponto de extremidade REST. __rest suporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração.
O arquivo de configuração a seguir usa a diretiva de expansão __rest para carregar o valor de configuração net.tls.certificateKeyFilePassword de um endpoint REST 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"
- Permissão de arquivo
- Se o arquivo de configuração incluir a expansão
__rest, no Linux ou macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas. - Análise de expansão
Para analisar os blocos
__rest, inicie omongod/mongoscom a opção--configExpand "rest".O
mongod/mongosemite uma solicitaçãoGETrelação à URL especificada. Se for bem-sucedido,mongod/mongossubstitui o valor decertificateKeyFilePasswordpelo valor retornado. Se a URL não conseguir resolver ou se o ponto de extremidadeRESTretornar um valor inválido,mongod/mongoslançará um erro e encerrará.
O seguinte arquivo de configuração utiliza a diretiva de expansão __rest para carregar o arquivo de configuração de um endpoint REST externo. A diretiva de expansão e suas opções devem ser os únicos valores especificados no arquivo de configuração.
__rest: "https://myrestserver.example.net/api/config/fullConfig" type: "yaml"
- Permissão de arquivo
- Se o arquivo de configuração incluir a expansão
__rest, no Linux ou macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas. - Análise de expansão
Para analisar os blocos
__rest, inicie omongod/mongoscom a opção--configExpand "rest".O
mongod/ emitemongosumaGETsolicitação para o URL especificado. Se for bem-sucedido, omongod/ analisará o arquivo de configuraçãomongosretornadoyamle o usará durante a inicialização. Se o URL não conseguir resolver ou retornar umyamlarquivo formatado corretamente, omongod/ gera um erro e émongosencerrado.
Importante
Use a __exec diretiva de expansão
A diretiva de expansão __exec carrega os valores do arquivo de configuração a partir de um comando shell ou terminal. __exec suporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração.
O exemplo de arquivo de configuração a seguir usa a diretiva de expansão __exec para carregar o valor de configuração net.tls.certificateKeyFilePassword a partir da saída de um comando de shell ou 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"
- Permissão de arquivo
- Se o arquivo de configuração incluir a expansão
__exec, no Linux ou macOS, o acesso de gravação ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas. - Análise de expansão
Para analisar os blocos
__exec, inicie omongod/mongoscom a opção--configExpand "exec".O
mongod/ tenta executar a operaçãomongosespecificada. Se o comando for executado com êxito, omongod/mongossubstituirá o valor decertificateKeyFilePasswordpelo valor retornado. Se o comando falhar ou retornar um valor inválido para a configuração do arquivo de configuração, omongod/mongosgera um erro e é encerrado.
O arquivo de configuração de exemplo a seguir usa a diretiva de expansão __exec para carregar o arquivo de configuração a partir da saída de um comando de shell ou terminal. A diretiva de expansão __exec e suas opções devem ser os únicos valores especificados no arquivo de configuração.
__exec: "python /home/myUserName/getFullConfig.py" type: "yaml"
- Permissão de arquivo
- Se o arquivo de configuração incluir a expansão
__exec, no Linux ou macOS, o acesso de gravação ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas. - Análise de expansão
Para analisar os blocos
__exec, inicie omongod/mongoscom a opção--configExpand "rest".Se o comando for executado com êxito, o
mongod/mongosanalisa o arquivo de configuraçãoyamlretornado e o usa durante a inicialização. Se o comando falhar ou retornar um arquivoyamlinválido, omongod/mongoslançará um erro e encerrará.
Importante
Os dados retornados pela execução da string __exec especificada não podem incluir nenhuma diretiva de expansão adicional. O mongod/mongos não realiza processamento adicional nos dados retornados e será encerrado com um código de erro se os dados retornados incluírem diretivas de expansão adicionais.
Referência de diretivas de expansão
__restA diretiva de expansão
__restcarrega valores do arquivo de configuração de um ponto de extremidadeREST.__restsuporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração. Omongod/mongosentão começa a usar os valores de origem externa como parte da sua configuração.A diretiva de expansão
__resttem a seguinte sintaxe:Passo a passo de como especificar um endpoint
RESTpara uma configuração específica ou para configurações específicas no arquivo de configuração:<some configuration file setting>: __rest: "<string>" type: "string" trim: "none|whitespace" digest: "<string>" digest_key: "<string>" Para especificar um ponto de extremidade
RESTpara todo o arquivo de configuração:__rest: "<string>" type: "yaml" trim: "none|whitespace" Se especificar todo o arquivo de configuração por meio do endpoint
REST, a diretiva de expansão e suas opções devem ser os únicos valores especificados no arquivo de configuração.
__restusa os seguintes campos:CampoTipoDescriçãostring
Obrigatório A URL na qual o
mongod/mongosemite uma solicitaçãoGETpara recuperar o valor de origem externa.Para endpoints não locaishost
REST(por exemplo, umRESTendpoint hospedado em um servidor remoto),__restrequer URLs criptografadas ()https://em que a máquina host e o servidor remoto suportem TLS 1.1 ou posterior.Se o endpoint
RESTespecificado no URL exigir autenticação, codifique as credenciais no URL com o formato padrão RFC 3986 User Information.Para
RESTendpoints localhost (por exemplo, umRESTendpoint escutando na máquina host),__restpermitehttp://URLs não criptografadas ().IMPORTANTE: o valor retornado pelo
RESTendpoint especificado não pode incluir nenhuma diretiva de expansão adicional. Omongod/mongosnão executa processamento adicional nos dados retornados e será encerrado com um código de erro se os dados retornados incluírem diretivas de expansão adicionais.typestring
Opcional Controla como analisa o valor retornado da URL
__restespecificada.Os valores possíveis são:
string(Padrão)Direciona para analisar os dados retornados como uma string
__restliteral. Sestringespecificar, todo o__restbloco e as opções de suporte deverão estar aninhados sob o campo para o qual você está carregando valores de origem externa.yamlDireciona para analisar os dados retornados como
__restumyamlarquivo formatado em. Seyamlespecificar, o bloco deverá ser o único conteúdo no arquivo de__restconfiguração. Omongod/ substitui o conteúdomongosdoyamlarquivo de configuração pelo recuperado do recurso REST.
trimstring
Opcional Especifique
whitespacepara direcionar para cortar qualquer espaço em branco à esquerda ou à direita, especificamente__restocorrências" ""\r""\n""\t"de,,,,"\v""\f"e. O padrão énoneou nenhum corte.string
Opcional. O resumo SHA-256 do resultado da expansão.
Se especificado, você também deve especificar a digest_key.
string
Opcional. A representação de string hexadecimal do256 segredo utilizado para calcular o resumo SHA-.
Se especificado, você também deve especificar o resumo.
Observação
Se o arquivo de configuração incluir a expansão
__rest, no Linux ou macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas.Para ativar a análise da diretiva de expansão
__rest, inicie omongod/mongoscom a opção--configExpand "rest".
Para obter exemplos, consulte Usar a diretiva de expansão
__rest.
__execA diretiva de expansão
__execcarrega valores do arquivo de configuração a partir da saída de um comando shell ou terminal.__execsuporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração. Omongod/mongosentão começa a usar os valores de origem externa como parte da sua configuração.A diretiva de expansão
__exectem a seguinte sintaxe:Para especificar um comando de terminal ou shell para uma configuração ou configurações específicas do arquivo de configuração:
<some configuration file setting>: __exec: "<string>" type: "string" trim: "none|whitespace" Para especificar um comando shell ou terminal para todo o arquivo de configuração:
__exec: "<string>" type: "yaml" trim: "none|whitespace" Se especificar todo o arquivo de configuração por meio de um comando de terminal ou shell, a diretiva de expansão e suas opções devem ser os únicos valores especificados no arquivo de configuração.
__execusa os seguintes campos:CampoTipoDescrição__execstring
Obrigatório A string que
mongod/mongosexecuta no terminal ou shell para recuperar o valor de origem externa.Em hosts Linux e OSX, a execução é tratada via POSIX
popen(). Em hosts Windows, a execução é feita por meio da API de controle de processo.__execabre um pipeline somente leitura como o mesmo usuário que iniciou omongodoumongos.IMPORTANTE: os dados retornados pela execução do comando especificado não podem incluir nenhuma diretiva de expansão adicional. O
mongod/mongosnão executa processamento adicional nos dados retornados e será encerrado com um código de erro se os dados retornados incluírem diretivas de expansão adicionais.typestring
Opcional Controla como analisa o valor retornado pelo comando
__execexecutado.Os valores possíveis são:
string(Padrão)Direciona para analisar os dados retornados como uma string
__execliteral. Sestringespecificar, todo o__execbloco e as opções de suporte deverão estar aninhados sob o campo para o qual você está carregando valores de origem externa.yamlDireciona para analisar os dados retornados como
__execumyamlarquivo formatado em. Seyamlespecificar, o bloco deverá ser o único conteúdo no arquivo de__execconfiguração. Omongod/ substitui o conteúdo do arquivo de configuraçãomongospeloyamlrecuperado do comando executado.
trimstring
Opcional Especifique
whitespacepara direcionar para cortar qualquer espaço em branco à esquerda ou à direita, especificamente__execocorrências" ""\r""\n""\t"de,,,,"\v""\f"e. O padrão énoneou nenhum corte.string
Opcional. O resumo SHA-256 do resultado da expansão.
Se especificado, você também deve especificar a digest_key
string
Opcional. A representação de string hexadecimal do256 segredo utilizado para calcular o resumo SHA-.
Se especificado, você também deve especificar o resumo
Observação
Se o arquivo de configuração incluir a expansão
__exec, no Linux ou macOS, o acesso de gravação ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas.Para ativar a análise das diretivas de expansão
__exec, iniciemongod/mongoscom a opção--configExpand "exec".
Para obter exemplos, consulte Usar a diretiva de expansão
__exec.
Enviar o arquivo de configuração com valores de diretiva de expansão resolvidos
É possível testar a saída final de um arquivo de configuração que especifica uma ou mais diretivas de expansão iniciando o mongod/mongos com a opção --outputConfig. Quando iniciado com --outputConfig, um mongod/mongos gera o documento de configuração YAML resolvido para stdout e interrompe. Se alguma diretiva de expansão especificada no arquivo de configuração retornar diretivas de expansão adicionais, o mongod/mongos gerará um erro e será encerrado.
Aviso
A opção --outputConfig retorna os valores resolvidos para qualquer campo usando uma diretiva de expansão. Isso inclui qualquer informação privada ou confidencial anteriormente ocultada pelo uso de uma fonte externa para a opção de configuração.
Por exemplo, o seguinte arquivo de configuração mongod.conf contém uma diretiva de expansão __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
A string registrada na URL especificada é 20128
Se o arquivo de configuração incluir a expansão __rest, no Linux ou macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processo mongod ou mongos apenas.
Inicie o mongod com as opções --configExpand "rest" e --outputConfig:
mongod -f mongod.conf --configExpand rest --outputConfig
O mongod gera o seguinte para stdout antes de terminar:
config: mongod.conf storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: port: 20128 outputConfig: true