MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs 菜单
Docs 主页
/ /

自管理内部/成员资格身份验证

您可以要求 副本集分片的集群的成员相互进行身份验证。对于节点的内部身份验证, MongoDB可以使用 密钥文件X.509 证书。

所选方法用于所有内部通信。例如,当客户端使用支持的身份验证机制之一向 进行身份验证时,mongos 随后使用配置的内部身份验证方法连接到所需的 mongod 进程。

注意

启用内部身份验证还可同时启用客户端授权

密钥文件使用 SCRAM 挑战和响应身份验证机制,其中密钥文件包含成员的共享密码。

密钥的长度必须介于 6 到 1,024 个字符之间,且只能包含 base64 集合中的字符。MongoDB 去除空白字符(例如x0dx09x20),方便跨平台使用。因此,以下操作会生成相同的密钥:

echo -e "mysecretkey" > key1
echo -e "my secret key" > key1
echo -e "my secret key\n" > key2
echo -e "my secret key" > key3
echo -e "my\r\nsecret\r\nkey\r\n" > key4

用于内部成员身份验证的密钥文件使用 YAML 格式,允许在密钥文件中包含多个密钥。YAML 格式接受以下任一形式:

  • 单个密钥字符串(与早期版本相同)

  • 键字符串序列

YAML 格式与使用文本文件格式的现有单密钥文件兼容。

例如,

如果密钥文件包含单个密钥,您可以指定带或不带引号的密钥字符串:

my old secret key1

您可以将多个键字符串 [1] 指定为键字符串序列(可选择用引号括起来):

- my old secret key1
- my new secret key2

在文件中指定多个密钥的能力允许在不停机的情况下滚动升级密钥。 请参阅轮换自管理副本集的密钥和自管理分片集群的密钥轮换。

部署的所有 mongodmongos 实例必须共享至少一个公用密钥。

在 UNIX 系统上,密钥文件不得具有群组或全局权限。在 Windows 系统中,不检查密钥文件权限。

您必须在托管副本集或分片集群成员的每台服务器上存储密钥文件。

[1] 对于 MongoDB 的加密存储引擎,用于本地密钥管理的密钥文件只能包含单个密钥。

要指定密钥文件,请使用 security.keyFile 设置或 --keyFile 命令行选项。

有关密钥文件内部身份验证的示例,请参阅将自管理副本集更新为密钥文件身份验证。

副本集或分片集群的成员可以使用 X.509 证书进行内部身份验证,而不是使用密钥文件。这也称为双向 TLS 或 mTLS。MongoDB支持与安全 TLS/SSL 连接一起使用的 X.509 证书身份验证。

注意

MongoDB在支持 TLS 1.2+ 的系统上禁用对 TLS 1.0 和 TLS 1.1加密的支持。

启用 TLS 后,使用节点证书验证分片集群或副本集的内部连接的节点资格。您可以使用 net.tls.clusterFilenet.tls.certificateKeyFile 选项配置节点证书文件路径。节点具有以下配置要求:

  • 集群成员配置必须为至少一个用于身份验证的属性指定非空值。默认情况下,MongoDB 接受:

    • 组织 (O)

    • 组织单位 (OU)

    • 域组件 (DC)

    MongoDB会验证所有节点证书中的条目是否完全匹配。如果列出多个 OU 值,则所有证书必须使用相同的列表。

    您可以通过设置 net.tls.clusterAuthX509.extensionValue 来指定用于身份验证的替代属性。

  • 集群成员配置必须包含相同的 net.tls.clusterAuthX509.attributes 并使用匹配值。属性顺序不重要。以下示例设置 OOU,但不设置 DC

    net:
    tls:
    clusterAuthX509:
    attributes: O=MongoDB, OU=MongoDB Server

注意

如果将 enforceUserClusterSeparation 参数设置为 false,则会出现以下行为:

  • 您不能将 clusterAuthMode设立为允许 X.509 的选项,否则服务器将无法启动。仅当 clusterAuthModekeyFile 时,服务器才会启动。

  • 客户端可在 $external数据库中创建用户,其 O/OU/DC 属性与服务器为集群成员身份配置的属性相匹配。

  • 提供成员证书的客户端现在可以作为 $external数据库中的用户尝试 MONGODB-X509 身份验证。

要将enforceUserClusterSeparation参数设置为false ,请在启动期间运行以下命令:

mongod --setParameter enforceUserClusterSeparation=false

证书具有以下要求:

  • 必须由一个证书颁发机构 (CA) 为分片集群或副本集的成员颁发所有 X.509 证书。

  • 至少一个主题备用名称 (SAN) 条目必须与其他集群成员使用的服务器主机名匹配。比较 SAN时,MongoDB 可以比较 DNS 名称或 IP 地址。

    如果您不指定 subjectAltName, MongoDB将比较公用名 (CN)。但是,根据RFC2818,CN 的这种用法已被弃用

Key Usage and Extended Key Usage are X.509 extensions that strictly define and restrict the use of the key associated with a certificate. Both of these extensions are optional. If tlsCertificateKeyFile or tlsClusterFile point to certificates that omit these extensions, no restrictions apply to using the certificate.

If X.509 certificates used for tlsCertificateKeyFile or tlsClusterFile include the Extended Key Usage (EKU) extension, they must comply with the following rules:

  • tlsCertificateKeyFile must include serverAuth in EKU.

    extendedKeyUsage = serverAuth
  • tlsClusterFile must include clientAuth in EKU:

    extendedKeyUsage = clientAuth
  • If tlsClusterFile is omitted and only tlsCertificateKeyFile is configured, then tlsCertificateKeyFile must include both serverAuth and clientAuth in EKU:

    extendedKeyUsage = clientAuth, serverAuth

If X.509 certificates used for tlsCertificateKeyFile or tlsClusterFile include the Key Usage (KU) extension, set it as follows:

  • tlsCertificateKeyFile should contain digitalSignature, keyEncipherment, and keyAgreement in its KU extension:

    keyUsage = digitalSignature, keyEncipherment, keyAgreement
  • tlsClusterFile should contain digitalSignature in its KU extension:

    keyUsage = digitalSignature

您可以使用 TLS 在副本集(每个mongod 实例)或分片集群(每个 mongodmongos 实例)的每个节点之间进行内部身份验证。

要使用 TLS 进行内部身份验证,请使用以下设置:

重要

如果将 --tlsMode 设置为除 disabled 之外的任何值,MongoDB 会在内部副本集连接中使用 net.tls.certificateKeyFile 中指定的证书进行服务器和客户端身份验证。无论您将security.clusterAuthMode设置为X.509,此证书设置均适用。

mongodmongos 实例使用证书密钥文件向客户端证明自己的身份,但证书密钥文件也可用于成员身份验证。如果不指定集群文件,成员将使用其证书密钥文件进行成员身份验证。用 net.tls.certificateKeyFile--tlsCertificateKeyFile 指定证书密钥文件。

要将证书密钥文件同时用于客户端身份验证和成员资格身份验证,证书必须满足以下任一条件:

  • 省略 extendedKeyUsage

  • 指定 extendedKeyUsage = serverAuth, clientAuth

For an example of X.509 internal authentication, see Verify Cluster Membership with X.509 on Self-Managed MongoDB.

要从密钥文件内部身份验证升级到 X.509 内部身份验证,请参阅从密钥文件身份验证升级到 X.509 身份验证。

后退

使用 Workload Identity Federation 授权用户

在此页面上