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: 6d795365637265744b65795374756666
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 --configExpand opção ou se não especificar a lista completa de diretivas de expansão usadas no arquivo de configuração, retornará um erro e mongod --configExpand encerrará. Você só pode especificar a opção na linha de comando.
Use a diretiva de expansão __rest
A __rest diretiva de expansão carrega valores de arquivo de configuração de um REST endpoint. __rest suporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração.
O seguinte arquivo de configuração usa a __rest diretiva de expansão para carregar o net.tls.certificateKeyFilePassword valor de configuração de um REST endpoint 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
__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.- Análise de expansão
Para analisar os
__restblocos, inicie omongodcom a--configExpand "rest"opção.O emite uma
mongodGETsolicitação em relação à URL especificada. Se for bem-sucedido,mongodsubstitui o valor decertificateKeyFilePasswordpelo valor retornado. Se a URL não conseguir resolver ou se o ponto deRESTextremidade retornar um valor inválido, lançará um erro emongodencerrará.
O seguinte arquivo de configuração utiliza a __rest diretiva de expansão para carregar o arquivo de configuração de um REST endpoint 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
__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.- Análise de expansão
Para analisar os
__restblocos, inicie omongodcom a--configExpand "rest"opção.O emite uma
mongodGETsolicitação em relação à URL especificada. Se for bem-sucedido, analisa o arquivo de configuraçãomongodretornadoyamle o usa durante a inicialização. Se o URL não conseguir resolver ou retornar umyamlarquivo formatado corretamente, o lançará um erro emongodencerrará.
Importante
O valor retornado pelo REST endpoint especificado não pode incluir nenhuma diretiva de expansão adicional. O mongod nã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.
Use a diretiva de expansão __exec
A __exec diretiva de expansão carrega valores de arquivo de configuração de um comando de 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 __exec diretiva de expansão 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
__execexpansão, no Linux/macOS, o acesso de gravação ao arquivo de configuração deverá ser limitado apenas ao usuário quemongosmongodestiver executando o processo / apenas.- Análise de expansão
Para analisar os
__execblocos, inicie omongodcom a--configExpand "exec"opção.O
mongodtenta executar a operação especificada. Se o comando for executado com sucesso, omongodsubstitui o valor decertificateKeyFilePasswordpelo valor retornado. Se o comando falhar ou retornar um valor inválido para a configuração do arquivo de configuração, omongodlançará um erro e encerrará.
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 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
__execexpansão, no Linux/macOS, o acesso de gravação ao arquivo de configuração deverá ser limitado apenas ao usuário quemongosmongodestiver executando o processo / apenas.- Análise de expansão
Para analisar os
__execblocos, inicie omongodcom a--configExpand "rest"opção.Se o comando for executado com sucesso, o
mongodanalisará o arquivo de configuraçãoyamlretornado e o usará durante a inicialização. Se o comando falhar ou retornar um arquivoyamlinválido, omongodgerará um erro e será encerrado.
Importante
Os dados retornados executando a __exec string especificada não podem incluir nenhuma diretiva de expansão adicional. O mongod nã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.
Referência de diretivas de expansão
__restA
__restdiretiva de expansão carrega valores de arquivo de configuração de umRESTendpoint.__restsuporta carregar valores específicos no arquivo de configuração ou carregar todo o arquivo de configuração. O então começa a usar os valores de origem externa como parte de suamongodconfiguração.A
__restdiretiva de expansão tem 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 para a qual o emite
mongodumaGETsolicitação de para recuperar o valor de origem externa.Para endpoints não locaishost
REST(por exemplo, umRESTendpoint hospedado em um servidor remoto),__restexigehttps://URLs criptografadas () em que tanto a máquina host quanto o servidor remoto suportam 1 TLS.1 ou posterior.Se o
RESTendpoint especificado no URL exigir autenticação, codifique as credenciais no URL com o formato padrão 3986 de informações do usuário RFC.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. Omongodnã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:
trimstring
Opcional Especifique
whitespacepara direcionar para cortar qualquer espaço em branco à esquerda ou à direita, especificamente__restocorrências" ""\r""\n""\t"de,,,,"\v"e."\f"noneO padrão é ou 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 64representação de cadeia hexadecimal de 32caracteres da256 chave de bytes usada para calcular o resumo HMAC-SHA 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 32 Depois 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:f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304 Observação
Para habilitar a análise da
__restdiretiva de expansão, inicie omongodcom a--configExpand "rest"opção.
Para obter exemplos, consulte Usar a
__restdiretiva de expansão.
__execA
__execdiretiva de expansão carrega valores de arquivo de configuração da saída de um comando de 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. O então começa a usar os valores de origem externa como parte de suamongodconfiguração.A
__execdiretiva de expansão tem 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 o executa no terminal ou shell para recuperar o valor de origem
mongodexterna.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
mongodnã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:
trimstring
Opcional Especifique
whitespacepara direcionar para cortar qualquer espaço em branco à esquerda ou à direita, especificamente__execocorrências" ""\r""\n""\t"de,,,,"\v"e."\f"noneO padrão é ou 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 64representação de cadeia hexadecimal de 32caracteres da256 chave de bytes usada para calcular o resumo HMAC-SHA 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 32 Depois 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:f38d0d5adfcf1a0575f9fa9051c70a2f88b1bb7562513c9efd7686e9c21ad304 Observação
Para habilitar a análise das
__execdiretivas de expansão do, inicie omongodcom a--configExpand "exec"opção.
Para obter exemplos, consulte Usar a
__execdiretiva de expansão.
Enviar o arquivo de configuração com valores de diretiva de expansão resolvidos
Você pode testar a saída final de um arquivo de configuração que especifica uma ou mais diretivas de expansão iniciando o mongod com a --outputConfig opção. Um mongod iniciado com envia o documento de configuração YAML resolvido --outputConfig para stdout e interrompe. Se qualquer diretiva de expansão especificada no arquivo de configuração retornar diretivas de expansão adicionais, o lançará um erro e mongod encerrará.
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 mongod.conf de configuração contém uma __rest diretiva de expansão:
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 __rest expansão, no Linux/macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado apenas ao usuário que mongos mongod estiver executando o processo / 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