原文地址:https://docs.mongodb.com/manual/tutorial/deploy-replica-set-with-keyfile-access-control/#deploy-repl-set-with-auth
概述
强制对Replica Set进行访问控制,需要如下配置:
- 使用Internal Authentication对Replica Set节点间进行安全设置
- 使用Role-Based Access Control对客户端访问Replica Set进行安全设置
在本教程中,每一个Replica Set节点都使用相同的内部认证机制(
internal authentication mechanism
)以及配置。
强制的内部认证同样强制用户访问控制(
user access control
)。
思考
操作系统:
本教程主要使用mongod进程,如果是windows用户,那么可以使用mongod.exe。
Keyfile安全保障
访问控制
本教程包含了在且仅在admin数据库创建最少数量的管理员账户的方法。对于用户认证,本教程采用默认的
SCRAM-SHA-1
身份认证机制。
Challenge-response安全机制最适合于测试与开发环境。对
于生产环境,我们建议使用
x.509 certificates
或者
LDAP Proxy Authentication
(仅在MongoDB Enterprise版本里面支持)或者
Kerberos Authentication
(仅在MongoDB Enterprise版本里面支持)。
想了解更多的关于使用指定认证方式创建用户的方式,请参考mongodb官网。
使用Keyfile访问控制部署新的Replica Set
1. 创建Keyfile
Keyfile的内容就像是一个共享的密码一样在全部Replica Set节点上使用。全部节点的Keyfile内容必须完全一致。
你可以使用任何方式生成你的Keyfile,Keyfile的内容必须在6-1024个字节之间。
在unix系统上,Keyfile一定不能有group或者world的权限。在Windows系统上, keyfile的权限一定不能被勾选。
下面是使用openssl生成一个复杂的伪随机的1024个字符的字符串,用来填充keyfile。然后使用chmod设置文件的所有者只有读权限。
openssl rand -base64
756
> <path-to-keyfile>chmod
400
<path-to-keyfile>
关于keyfile的更多信息,请点击:
Keyfiles
(其实自己就可以写一个keyfile,我就是在一个txt文件里面写了一下随机的字母数字就可以了,注意这里只能写字母数字,不能用其它字符)
复制keyfile到每一个Replica Set节点
各节点的存储路径要一致,不能使用共享路径,也不能使用可移动存储设备,例如U盘等。
在Replica Set的每一个节点上强制应用访问控制
1. 使用命令行,代码如下:
mongod --keyFile <path-to-keyfile> --replSet <replicaSetName>
2. 使用config文件:
config文件内容如下:
执行mongod:
mongod --config <path-to-config-file>
使用localhost interface连接到一个Replica Set节点
登录到mongo的物理机,然后执行mongod,因为在这个时候没有创建任何用户,所以只能在本机上执行mongo控制台。
如:
"C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe" --dbpath "C:\Program Files\MongoDB\data\db" --directoryperdb --logpath "C:\Program Files\MongoDB\log\mongod.log" --logappend --install --serviceName MongoDB --serviceDisplayName "MongoDB" --replSet "rs0" --keyFile "C:\Program Files\MongoDB\keyfile.txt"
初始化Replica Set
和初始化其它Replica Set一样 (但是要先切换到admin数据库:use admin):
创建管理员账户
这个账号作为第一个数据库用户,需要有最高的权限,比如有权限创建其它用户, 因此一般给它userAdminAnyDatabase的角色。
同样登录到Primary服务器,链接到mondo控制台,切换到admin数据库,
给新账户管理员认证
为复制集创建管理员
clusterAdmin 角色拥有复制集操作的权限,比如配置复制集。
添加其他用户
目前支持的用户角色:
Database User Roles