自托管部署的外部源配置文件值
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
如果配置文件包含
__rest
扩展,在Linux/macOS上,对配置文件的读取权限必须限制为仅运行mongod
/mongos
进程的用户。如果配置文件包含
__exec
扩展,在Linux/macOS上,对配置文件的写入权限必须限制为仅运行mongod
/mongos
进程的用户。
要使用扩展指令,您必须使用带有所使用的扩展指令完整列表的 --configExpand
命令行选项。
mongod --config "/path/to/config/mongod.conf" --configExpand "rest,exec"
如果您省略了 --configExpand
选项 或者 未指定配置文件中使用的扩展指令的完整列表,则 mongod
/mongos
将返回错误并终止。您只能在命令行上指定 --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
进程的用户。 - 扩展解析
要解析
__rest
块,使用带有--configExpand "rest"
选项的mongod
/mongos
启动。mongod
/mongos
会对指定的URL发起GET
请求。如果成功,mongod
/mongos
会用返回的值替换certificateKeyFilePassword
的值。如果URL无法解析,或者REST端点返回无效的值,则mongod
/mongos
会抛出错误并终止。
以下配置文件使用__rest
扩展指令从外部REST
端点加载配置文件。扩展指令及其选项必须是在配置文件中指定的唯一值。
__rest: "https://myrestserver.example.net/api/config/fullConfig" type: "yaml"
- 文件权限
- 如果配置文件包含
__rest
扩展,在Linux/macOS上,必须限制对配置文件的读取访问权限,仅允许运行mongod
/mongos
进程的用户。 - 扩展解析
要解析
__rest
块,使用带有--configExpand "rest"
选项的mongod
/mongos
启动。mongod
/mongos
会对指定的URL发起GET
请求。如果成功,mongod
/mongos
会解析返回的配置yaml
文件并在启动时使用它。如果URL无法解析或返回的文件格式不正确,则mongod
/mongos
会抛出错误并终止。
使用 __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
展开指令从shell或终端命令的输出中加载配置文件。 __exec
展开指令及其选项必须是在配置文件中指定的唯一值。
__exec: "python /home/myUserName/getFullConfig.py" type: "yaml"
扩展指令参考
__rest
__rest
扩展指令从REST
端点加载配置文件值。__rest
支持加载配置文件中的特定值或加载整个配置文件。然后,mongod
/mongos
开始将其作为配置的一部分使用外部源值。__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
包含以下字段字段类型描述字符串必需 这是
mongod
/mongos
发起GET
请求以检索外部来源值的 URL。对于非本地主机的
REST
端点(例如,在远程服务器上托管的REST
端点),__rest
要求使用加密(https://
)URL,其中主机机器和远程服务器都支持 TLS 1.1 或更高版本。如果指定的 URL 中的
REST
端点需要身份验证,则可以使用标准的 RFC 3986 用户信息 格式将凭据编码到 URL 中。对于本地主机
REST
端点(例如,在主机机器上监听的REST
端点),__rest
允许使用未加密(http://
)URL。重要: 指定的
REST
端点返回的值 不能 包含任何其他扩展指令。如果返回的数据包含其他扩展指令,则mongod
/mongos
将不会对返回的数据进行任何其他处理,并且如果返回的数据包含其他扩展指令,将终止并显示错误代码。类型
字符串trim
字符串字符串可选 扩展结果的 SHA-256 摘要。
如果指定,还必须指定 digest_key.
字符串注意
如果配置文件包含
__rest
扩展,在Linux/macOS上,必须限制对配置文件的读取访问权限,仅允许运行mongod
/mongos
进程的用户。要启用解析
__rest
扩展指令,请使用mongod
/mongos
的--configExpand "rest"
选项启动。
有关示例,请参阅 使用
__rest
扩展指令。
__exec
__exec
扩展指令从shell或终端命令的输出中加载配置文件值。__exec
支持在配置文件中加载特定值或加载整个配置文件。然后mongod
/mongos
开始使用作为配置一部分的外部源值。__exec
扩展指令的语法如下指定用于特定配置文件设置或设置的shell或终端命令
<some configuration file setting>: __exec: "<string>" type: "string" trim: "none|whitespace" 指定用于整个配置文件的shell或终端命令
__exec: "<string>" type: "yaml" trim: "none|whitespace" 如果通过终端或shell命令指定整个配置文件,则扩展指令及其选项 必须 是配置文件中指定的唯一值。
__exec
包含以下字段字段类型描述__exec
字符串类型
字符串trim
字符串字符串可选 扩展结果的 SHA-256 摘要。
如果指定,还必须指定 digest_key
字符串注意
有关示例,请参阅 使用
__exec
扩展指令。
输出解析后的扩展指令值的配置文件
您可以通过使用 mongod
/mongos
的 --outputConfig
选项来测试指定一个或多个扩展指令的配置文件最终输出。使用 --outputConfig
选项启动的 mongod
/mongos
将解析后的 YAML 配置文档输出到 stdout
并停止。如果配置文件中指定的任何扩展指令返回额外的扩展指令,则 mongod
/mongos
将引发错误并终止。
警告
选项 --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 记录的字符串是 20128
如果配置文件包含__rest
扩展,在Linux/macOS上,必须限制对配置文件的读取访问权限,仅允许运行mongod
/ mongos
进程的用户。
使用 --configExpand "rest"
和 --outputConfig
选项启动 mongod
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