开启MongoDB Cluster分片集群身份认证

默认情况下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()
    
  • 关闭config服务节点,由于是副本集,必须从从节点开始关闭,避免主节点切换
  • ./mongo mongodb://127.0.0.1:20000 #config副本集运行在20000端口上
    db.getSiblingDB("admin").shutdownServer()
    
  • 关闭shard分片服务节点,由于是副本集,必须从从节点开始关闭,避免主节点切换
  • ./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
    
  • 为shard节点创建本地userAdminAnyDatabase用户和其他用户,添加用户可以参考《关于MongoDB的查询语句记录

配置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
Captain QR Code

扫码联系船长

发表回复

您的电子邮箱地址不会被公开。