O MongoDB oferece suporte ao 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 para opçõ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: 6d795365637265744b65795374756666Para 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 diretiva de expansão __rest
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
O valor retornado pelo ponto de extremidade REST especificado não pode 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.
Use a diretiva de expansão __exec
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
RESTnão localhosts (por exemplo, um endpointRESThospedado em um servidor),__restrequer URLs criptografadas (https://) em que a máquina host e o servidor suportem TLS 1.1 ou posterior.Se o ponto de extremidade
RESTespecificado na URL exigir autenticação, codifique as credenciais na URL com o padrão no formato RFC 3986 Informações do usuário .Para endpoints
RESTde host local (por exemplo, um endpointRESTouvindo na máquina host),__restpossibilita URLs não criptografados (http://).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
__restanalisa o valor retornado a partir da URL especificada.Os valores possíveis são:
trimstring
Opcional Especifique
whitespacepara instruir__resta cortar qualquer espaço em branco à esquerda ou à direita, especificamente as ocorrências de" ","\r","\n","\t","\v"e"\f". O padrão énoneou nenhum corte.string
opcional. A saída HMAC-SHA256 do resultado da expansão, calculada como
HMAC-SHA256(digest_key, message), ondemessageé o valor da configuração a ser recuperada.Se especificado, você também deve especificar o digest_key.
string
opcional. A representação de string hexadecimal de 64caracteres da chave de 32bytes usada para calcular o resumo HMAC-SHA256 do resultado da expansão.
Se especificado, você também deve especificar o resumo.
Por exemplo, suponha que o
certificateKeyFilePasswordseja "superSecret123". Para recuperar essa senha usando uma solicitação REST ou chamada de serviço exec, você deve gerar uma chave de resumo e usá-la para calcular o resumo de sua senha.Execute o seguinte código em seu terminal para gerar uma chave de resumo de 32bytes:
openssl rand -hex 32Depois de gerar uma chave de resumo, você pode usá-la para calcular o resumo de sua senha:
echo -ne "superSecret123" | openssl dgst -sha256 -mac hmac -macopt hexkey:f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304Observação
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
__execanalisa o valor retornado pelo comando executado.Os valores possíveis são:
trimstring
Opcional Especifique
whitespacepara instruir__execa cortar qualquer espaço em branco à esquerda ou à direita, especificamente as ocorrências de" ","\r","\n","\t","\v"e"\f". O padrão énoneou nenhum corte.string
opcional. A saída HMAC-SHA256 do resultado da expansão, calculada como
HMAC-SHA256(digest_key, message), ondemessageé o valor da configuração a ser recuperada.Se especificado, você também deve especificar o digest_key.
string
opcional. A representação de string hexadecimal de 64caracteres da chave de 32bytes usada para calcular o resumo HMAC-SHA256 do resultado da expansão.
Se especificado, você também deve especificar o digest
Por exemplo, suponha que o
certificateKeyFilePasswordseja "superSecret123". Para recuperar essa senha usando uma solicitação REST ou chamada de serviço exec, você deve gerar uma chave de resumo e usá-la para calcular o resumo de sua senha.Execute o seguinte código em seu terminal para gerar uma chave de resumo de 32bytes:
openssl rand -hex 32Depois de gerar uma chave de resumo, você pode usá-la para calcular o resumo de sua senha:
echo -ne "superSecret123" | openssl dgst -sha256 -mac hmac -macopt hexkey:f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304Observação
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: stringA 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 --outputConfigO mongod gera o seguinte para stdout antes de terminar:
config: mongod.confstorage: dbPath: "/var/lib/mongo"systemLog: destination: file path: "/var/log/mongodb/mongod.log"net: port: 20128outputConfig: true