默认情况下MongoDB集群的身份认证是关闭的,因此存在非常大的安全风险。在正常情况下不同用户有不同的访问权限,即使是MongoDB分片集群也不例外。相对于单节点MongoDB服务来说,开启MongoDB Cluster分片集群身份认证要负责的多。MongoDB官方手册给出了非常详细的操作步骤,本文的重点主要覆盖在如何开启一个已经上线的MongoDB Shard分片集群身份认证。由于MongoDB Cluster分片集群由3大部分组成(Shard副本集、Config副本集、Mongos路由),因此需要分别配置内部身份认证。
方案选择
开启MongoDB Cluster分片集群身份认证目前提供两种方案,一种是需要关闭整个MongoDB集群;另一种不需要关闭整个集群,但是重启每一个MongoDB集群中节点的次数会翻倍。具体步骤可以参考:
Update Sharded Cluster to Keyfile Authentication
Update Sharded Cluster to Keyfile Authentication (No Downtime)
本文中将采用第一种方案,即停止整个MongoDB Cluster分片集群服务后,升级所有节点服务的配置文件后再启动所有集群服务。选该方案的原因有二:
- #1. 当前集群服务没有完全上线
- #2. 步骤相对较少
MongoDB集群节点分布下线
下线所有的MongoDB集群节点也非常有讲究,具体步骤可以在上节的官方文档中找到。这里就总结一下几个要点步骤:
- 连接mongos关闭均衡器,避免下线节点正在进行数据迁移
- 关闭mongos服务节点
./mongo mongodb://127.0.0.1:27016 #mongos运行在27016端口上 db.getSiblingDB("admin").shutdownServer()
./mongo mongodb://127.0.0.1:20000 #config副本集运行在20000端口上 db.getSiblingDB("admin").shutdownServer()
./mongo mongodb://127.0.0.1:27017 #shard副本集运行在27017、27018、27019端口上 db.getSiblingDB("admin").shutdownServer()
配置Config服务启用密钥认证
- 修改配置文件,在config服务节点中启动访问控制
- 启动config服务节点
./mongod --config ../conf/config-secure.conf
配置Shard服务启用密钥认证
- 修改配置文件,在shard服务节点中启动访问控制
- 启动shard服务节点
./mongod --config ../conf/shard1.conf ./mongod --config ../conf/shard2.conf ./mongod --config ../conf/shard3.conf
配置Mongos服务启用密钥认证
- 修改配置文件,在mongos服务节点中启动访问控制
- 为mongodb集群创建userAdminAnyDatabase用户、clusterAdmin用户
- 连接mongos打开均衡器
sh.startBalancer()
错误信息
启动mongoDB时可能会遇到以下错误:
I ACCESS [main] permissions on /root/mongodb/conf/mongo-key are too open
由于是因为mongo-key密钥文件权限太大(而不是说没有权限),因此改为管理员只读即可:
chmod 400 mongo-key
扫码联系船长