MongoDB 4.2副本集安全配置疑问:keyFile与clusterAuthMode的区别
MongoDB副本集配置疑问解答
一、为啥没开authorization却要用户名密码?
只要你在security段配置了keyFile,MongoDB 4.2就会自动启用用户认证(即authorization: enabled)。因为keyFile原本是用于副本集节点间的身份验证,但MongoDB的逻辑是:只要开启了集群内部认证,用户端的认证也会被强制启用,无需手动配置authorization参数。这就是你连接shell时需要输入用户名密码的原因。
二、keyFile配置与clusterAuthMode中keyFile/sendKeyFile的区别
1. security.keyFile的作用
这个配置仅用于指定集群节点间认证所用的密钥文件路径,是基础配置,告诉MongoDB去哪里读取节点共享的认证密钥。当你只配置keyFile时,MongoDB会自动将clusterAuthMode设为keyFile。
2. clusterAuthMode的作用
这个参数用于控制集群节点间身份验证的具体模式,决定节点之间如何交换密钥、验证身份。其中keyFile和sendKeyFile都是基于共享密钥的认证模式,具体区别如下:
设置clusterAuthMode: keyFile(默认模式)
- 节点间双向验证:发起连接的节点会发送自身密钥文件内容,接收方对比本地密钥;同时接收方也会将自身密钥发送给发起方,发起方再做一次对比。
- 要求集群所有节点使用内容完全一致的密钥文件,任何内容差异都会导致认证失败。
设置clusterAuthMode: sendKeyFile
- 节点间单向验证:仅发起连接的节点发送自身密钥文件内容,接收方对比本地密钥即可,无需回发自身密钥。
- 同样要求所有节点的密钥文件内容完全一致。
- 相比
keyFile模式,减少了一次密钥传输,有轻微的性能优化,但安全性与keyFile模式一致,因为依赖的是同一个对称共享密钥。
三、关于你计划的配置调整
你计划的配置中clusterAuthMode: keyFile or sendKeyFile是错误的,该参数只能设置单一值(keyFile或sendKeyFile)。如果你的副本集所有节点使用的是同一个密钥文件,选择默认的keyFile即可;若想优化节点间通信的微小性能,可设置为sendKeyFile。
另外,显式配置authorization: enabled是安全的,它和keyFile自动启用的效果一致,不会产生冲突。
内容的提问来源于stack exchange,提问作者Sandip Divekar
相关产品推荐
相关产品推荐

