文档菜单
文档首页
/
MongoDB 手册
/ / / /

自托管部署的外部源配置文件值

本页内容

  • 使用__rest 扩展指令
  • 使用 __exec 扩展指令
  • 扩展指令参考
  • 输出具有已解析扩展指令值的配置文件

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/mongos 将返回错误并终止。您只能在命令行上指定 --configExpand 选项。

__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会抛出错误并终止。

重要

指定的 REST 端点返回的值不能包含任何额外的展开指令。mongod/mongos 不会对返回的数据进行额外的处理,如果返回的数据包含额外的展开指令,将使用错误代码终止。

__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上,对配置文件的写入权限必须限制为仅运行 mongod / mongos 进程的用户。
扩展解析

要解析 __exec 块,使用 mongod/mongos--configExpand "exec" 选项启动。

mongod/mongos 尝试执行指定的操作。如果命令执行成功,mongod/mongos 将使用返回的值替换 certificateKeyFilePassword 的值。如果命令失败或返回配置文件设置无效的值,mongod/mongos 将引发错误并终止。

以下示例配置文件使用 __exec 展开指令从shell或终端命令的输出中加载配置文件。 __exec 展开指令及其选项必须是在配置文件中指定的唯一值。

__exec: "python /home/myUserName/getFullConfig.py"
type: "yaml"
文件权限
如果配置文件包含 __exec 扩展,在Linux/macOS上,对配置文件的写入权限必须限制为仅运行 mongod / mongos 进程的用户。
扩展解析

要解析 __exec 块,使用 mongod/mongos--configExpand "rest" 选项启动。

如果命令执行成功,mongod/mongos 会解析返回的配置 yaml 文件并在启动时使用它。如果命令失败或返回无效的 yaml 文件,则 mongod/mongos 会抛出错误并终止。

重要

执行指定的 __exec 字符串返回的数据不能包含任何额外的扩展指令。如果返回的数据包含额外的扩展指令,则 mongod/mongos 将不会对返回的数据进行额外处理,并且如果返回的数据包含额外的扩展指令,则会以错误代码终止。

__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 将不会对返回的数据进行任何其他处理,并且如果返回的数据包含其他扩展指令,将终止并显示错误代码。

类型
字符串

可选 控制如何解析从指定的 URL 返回的值。

可能的值是

  • string默认值

    __rest 指令指向以字面字符串格式解析返回的数据。如果指定 string,则必须在加载外部源值字段下嵌套整个 __rest 块和相关选项。

  • yaml

    __rest 指令指向以 yaml 格式解析返回的数据。如果指定 yaml,则必须在配置文件中只包含 __rest 块。在 mongod/mongos 中,将使用从 REST 资源检索到的 yaml 替换配置文件内容。

trim
字符串
可选 指定 whitespace 以指示 __rest 去除任何前导或尾随空白字符,特别是 " ""\r""\n""\t""\v""\f" 的出现。默认为 none,或无修剪。
字符串

可选 扩展结果的 SHA-256 摘要。

如果指定,还必须指定 digest_key.

字符串

可选 用于计算 SHA-256 digest. 的密钥的十六进制字符串表示。

如果指定,还必须指定 digest.

注意

  • 如果配置文件包含__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
字符串

必需 mongod/mongos 在终端或shell上执行以检索外部源值的字符串。

在Linux和OSX主机上,通过POSIX popen() 处理执行。在Windows主机上,通过进程控制API处理执行。__exec 以启动 mongodmongos 的相同用户身份打开只读管道。

重要:执行指定命令返回的数据 不能 包含任何额外的扩展指令。 mongod/mongos 不会对返回的数据进行任何额外的处理,如果返回的数据包含额外的扩展指令,将终止并显示错误代码。

类型
字符串

可选 控制如何解析执行命令返回的值。

可能的值是

  • string (默认值)

    __exec 指令指向返回的数据作为文本字符串解析。如果指定 string,则必须将整个 __exec 块和支持选项嵌套在外部加载值对应的字段下。

  • yaml

    __exec 指令指向返回的数据作为 yaml 格式的文件解析。如果指定 yaml,则 __exec 块必须是配置文件中的唯一内容。在执行命令后,mongod/mongos 将用从执行的命令中检索到的 yaml 替换配置文件内容。

trim
字符串
可选 指定 whitespace 指示 __exec 去除任何前导或尾随空白字符,特别是 " ""\r""\n""\t""\v""\f" 的出现。默认为 none,即不删除。
字符串

可选 扩展结果的 SHA-256 摘要。

如果指定,还必须指定 digest_key

字符串

可选。用于计算 SHA-256 摘要 的秘密的十六进制字符串表示。

如果指定,还必须指定 摘要

注意

有关示例,请参阅 使用 __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

返回

配置文件选项