MongoDB は、構成ファイルの展開ディレクティブを使用して外部から取得された値をロードすることをサポートしています。 展開ディレクティブを使用すると、特定の構成ファイル オプションの値をロードしたり、構成ファイル全体をロードしたりできます。 展開ディレクティブを使用すると、セキュリティ証明書やパスワードなどの機密情報はぼかして表示されます。
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
展開ディレクティブを使用するには、使用される展開ディレクティブの完全なリストを含む--configExpandコマンドライン オプションを指定する必要があります。
mongod --config "/path/to/config/mongod.conf" --configExpand "rest,exec"
--configExpandオプションを省略する場合、または構成ファイルで使用される展開ディレクティブの完全なリストを指定しない場合、mongod はエラーを返し、終了します。 オプションはコマンドラインでのみ指定できます--configExpand 。
__rest展開ディレクティブを使用する
__rest展開ディレクティブは、 RESTエンドポイントから構成ファイル値をロードします。 __restは、構成ファイル内の特定の値の読み込みまたは構成ファイル全体の読み込みをサポートしています。
次の構成ファイルでは、 __rest展開ディレクティブを使用して、外部のRESTエンドポイントから設定net.tls.certificateKeyFilePassword値を読み込みます。
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"
- ファイル権限
構成ファイルに
__rest展開が含まれている場合、Linux/macOS では、構成ファイルへの読み取りアクセスは、mongod/mongosプロセスを実行しているユーザーのみに制限する必要があります。- 展開解析
ブロックを解析するには、
__restmongod--configExpand "rest"オプションを使用して を起動します。mongodGETは、指定されたURLに対して リクエストを発行します。成功した場合、mongodはcertificateKeyFilePasswordの値を返された値に置き換えます。 URLの解決に失敗した場合、またはRESTエンドポイントが無効な値を返した場合、mongodはエラーをスローして終了します。
次の構成ファイルでは、 __rest展開ディレクティブを使用して、外部のRESTエンドポイントから構成ファイルをロードします。 展開ディレクティブとそのオプションは、構成ファイルで指定される値のみである必要があります。
__rest: "https://myrestserver.example.net/api/config/fullConfig" type: "yaml"
- ファイル権限
構成ファイルに
__rest展開が含まれている場合、Linux/macOS では、構成ファイルへの読み取りアクセスは、mongod/mongosプロセスを実行しているユーザーのみに制限する必要があります。- 展開解析
ブロックを解析するには、
__restmongod--configExpand "rest"オプションを使用して を起動します。mongodGETは、指定されたURLに対して リクエストを発行します。成功した場合、mongodは返された構成yamlファイルを解析し、スタートアップ時にそのファイルを使用します。 URLの解決または適切にフォーマットされた ファイルの返却に失敗した場合、yamlmongodはエラーをスローして終了します。
重要
指定されたREST エンドポイントによって返される値には、追加の展開ディレクティブを含めることはできません。 は返されたデータに対して追加の処理を実行せず、返されたデータに追加の展開ディレクティブが含まれている場合はエラーmongod コードで終了します。
__exec展開ディレクティブを使用する
__exec展開ディレクティブは、shell またはターミナルコマンドから構成ファイル値をロードします。 __execは、構成ファイル内の特定の値の読み込みまたは構成ファイル全体の読み込みをサポートしています。
次の構成ファイルの例では、 __exec展開ディレクティブを使用して、shell またはターミナルコマンドの出力から設定net.tls.certificateKeyFilePassword値をロードします。
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"
- ファイル権限
構成ファイルに
__exec展開が含まれている場合、Linux/macOS では、構成ファイルへの書込み (write) アクセスは、mongod/mongosプロセスを実行しているユーザーのみに制限する必要があります。- 展開解析
ブロックを解析するには、
__execmongod--configExpand "exec"オプションを使用して を起動します。mongodは指定された操作の実行を試みます。コマンドが正常に実行されると、mongodはcertificateKeyFilePasswordの値を返された値に置き換えます。コマンドが失敗した場合、または構成ファイル設定に無効な値が返された場合、mongodはエラーをスローして終了します。
次の構成ファイルの例では、 __exec展開ディレクティブを使用して、shell またはターミナルコマンドの出力から構成ファイルを読み込みます。 __exec展開ディレクティブとそのオプションは、構成ファイルで指定される値のみである必要があります。
__exec: "python /home/myUserName/getFullConfig.py" type: "yaml"
- ファイル権限
構成ファイルに
__exec展開が含まれている場合、Linux/macOS では、構成ファイルへの書込み (write) アクセスは、mongod/mongosプロセスを実行しているユーザーのみに制限する必要があります。- 展開解析
ブロックを解析するには、
__execmongod--configExpand "rest"オプションを使用して を起動します。コマンドが正常に実行されると、
mongodは返された構成yamlファイルを解析し、スタートアップ時にそのファイルを使用します。コマンドが失敗した場合、または無効なyamlファイルを返した場合、mongodはエラーをスローして終了します。
重要
指定された__exec string を実行して返されるデータには、追加の展開ディレクティブを含めることはできません。mongod は返されたデータに対して追加の処理を実行せず、返されたデータに追加の展開ディレクティブが含まれている場合はエラー コードで終了します。
展開ディレクティブに関する参考資料
__rest展開ディレクティブは、
__restエンドポイントから構成ファイル値をロードします。REST__restmongodは、構成ファイル内の特定の値の読み込みまたは構成ファイル全体の読み込み をサポートしています。次に、 は、構成の一部として外部ソースの値の使用を開始します。__rest展開ディレクティブの構文は次のとおりです。特定の構成ファイル設定に対して
RESTエンドポイントを指定するには、次のようにします。<some configuration file setting>: __rest: "<string>" type: "string" trim: "none|whitespace" digest: "<string>" digest_key: "<string>" 構成ファイル全体に
RESTエンドポイントを指定するには__rest: "<string>" type: "yaml" trim: "none|whitespace" RESTエンドポイント経由で構成ファイル全体を指定する場合、展開ディレクティブとそのオプションは構成ファイルで指定される値のみである必要があります。
__restは、次のフィールドがあります。フィールドタイプ説明string
mongodGET必須。 が外部ソースの値を取得するために リクエストを発行するURL 。非ローカルホスト
RESTエンドポイント(たとえば、リモート サーバーでホストされているRESTエンドポイント)の場合、__restにはホストマシンとリモート サーバーの両方が TLS 1.1以降をサポートしている暗号化された(https://) URL が必要です。RESTURLで指定された エンドポイントに認証が必要な場合は、標準の RFC3986 ユーザー情報形式を使用してURLに認証情報をエンコードします。ローカルホスト
RESTエンドポイント(ホスト マシンでリッスンするRESTエンドポイントなど)の場合、__restは暗号化されていない(http://)URL を許可します。重要: 指定された
RESTエンドポイントによって返される値には、追加の展開ディレクティブを含めることはできません。 は返されたデータに対して追加の処理を実行せず、返されたデータに追加の展開ディレクティブが含まれている場合はエラーmongodコードで終了します。typestring
trimstring
任意
whitespaceを指定すると、__restは先頭または末尾の空白、具体的には" "、"\r"、"\n"、"\t"、"\v"、"\f"の発生を削除します。 デフォルトはnone、または削除なし。string
任意。 展開結果の SHA- 256ダイジェスト。
指定する場合は、 Digest_key も指定する必要があります。
string
任意。 stringSHA-256 ダイジェスト を計算するために使用されるシークレットの 16進数 表現。
指定する場合は、ダイジェストも指定する必要があります。
注意
__rest展開ディレクティブの解析を有効にするには、 オプションを使用してmongod--configExpand "rest"を起動します。
例については、「
__rest展開ディレクティブの使用 」を参照してください。
__exec展開ディレクティブは、
__execシェルまたはターミナルコマンドの出力から構成ファイル値をロードします。__execは、構成ファイル内の特定の値の読み込みまたは構成ファイル全体の読み込み をサポートしています。次に、mongodは構成の一部として外部ソースの値の使用を開始します。__exec展開ディレクティブの構文は次のとおりです。特定の構成ファイル設定に対して shell またはターミナルコマンドを指定するには、次のようにします。
<some configuration file setting>: __exec: "<string>" type: "string" trim: "none|whitespace" 構成ファイル全体に対して shell またはターミナルコマンドを指定するには:
__exec: "<string>" type: "yaml" trim: "none|whitespace" ターミナルコマンドまたは shell コマンドを使用して構成ファイル全体を指定する場合、展開ディレクティブとそのオプションは、構成ファイルで指定される値のみである必要があります。
__execは、次のフィールドがあります。フィールドタイプ説明__execstring
必須 外部ソースの値を取得するために がターミナルまたはシェルで実行する
mongodstring 。Linux および OSX ホストでは、実行は POSIX
popen()によって処理されます。 Windows ホストでは、実行は プロセス制御 API 経由で処理されます。__execは、mongodまたはmongosを開始したのと同じユーザーとして読み取り専用パイプを開きます。重要: 指定されたコマンドを実行して返されるデータには、追加の展開ディレクティブを含めることはできません。 は返されたデータに対して追加の処理を実行せず、返されたデータに追加の展開ディレクティブが含まれている場合はエラー
mongodコードで終了します。typestring
trimstring
任意
whitespaceを指定すると、__execは先頭または末尾の空白、具体的には" "、"\r"、"\n"、"\t"、"\v"、"\f"の発生を削除します。 デフォルトはnone、または削除なし。string
任意。 展開結果の SHA- 256ダイジェスト。
指定する場合は、 Digest_keyも指定する必要があります
string
任意。 stringSHA-256 ダイジェスト を計算するために使用されるシークレットの 16進数 表現。
指定する場合は、ダイジェストも指定する必要があります
注意
__exec展開ディレクティブの解析を有効にするには、 オプションを使用してmongod--configExpand "exec"を起動します。
例については、「
__exec展開ディレクティブの使用 」を参照してください。
解決された展開ディレクティブ値を含む構成ファイルを出力する
1 つ以上の展開ディレクティブを指定する構成ファイルの最終出力をテストするには、mongod --outputConfigmongod--outputConfigstdoutを オプションとともに起動します。 で開始された は解決されたmongod YAML 構成ドキュメントを に出力して停止します。構成ファイルで指定された展開ディレクティブのいずれかが追加の展開ディレクティブを返す場合、 はエラーをスローして終了します。
警告
--outputConfigオプションは、展開ディレクティブを使用している任意のフィールドの解決された値を返します。 これには、以前 構成オプションに外部ソースを使用していたためにぼかして表示されたプライベート情報や機密情報が含まれます。
たとえば、次の構成ファイルmongod.confには__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
指定された URL で記録された string は、 20128
構成ファイルに__rest展開が含まれている場合、Linux/macOS では、構成ファイルへの読み取りアクセスは、 mongod / mongosプロセスを実行しているユーザーのみに制限する必要があります。
}mongod --configExpand "rest"オプションと--outputConfig オプションを使用して を起動します。
mongod -f mongod.conf --configExpand rest --outputConfig
mongodは終了前に以下をstdoutに出力します。
config: mongod.conf storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: port: 20128 outputConfig: true