MongoDB:使用keyfile访问控制的方式部署副本集
2017-11-29 21:23
267 查看
简介
副本集强制访问控制需要配置:使用内部认证机制保证副本集成员之间的安全
使用基于角色的访问控制保证连接客户端和副本集的安全
本教程中,副本集的每个成员使用了相同的内部认证机制和设置。
强制内部认证即强制用户访问控制。为了连接到副本集,像mongo shell的客户端需要使用用户账号。
注意事项
Keyfile安全
Keyfiles是安全的最小格式,非常适合测试和开发环境。对于生产环境,推荐使用x.509 certificates。
访问控制
本文介绍了只在admin数据库创建最少的管理用户。关于用户认证,本文使用了默认的SCRAM-SHA-1认证机制。SCRAM-SHA-1安全机制是最适合测试和开发环境的。对于生产环境,推荐使用
x.509 certificates或
LDAP Proxy Authentication或
Kerberos Authentication。
使用Keyfile访问控制部署新副本集
1. 创建keyfile
使用keyfile认证,副本集中的每个mongod实例使用keyfile内容作为认证其他成员的共享密码。只有有正确的keyfile的mongod实例可以加入副本集。keyfile的内容必须是6到1024个字符的长度,且副本集所有成员的内容必须相同。
注意:
UNIX系统中,keyfile必须没有组权限或完全权限。Windows系统中,keyfile权限没有被检查。
你可以使用任意方法生成keyfile。例如,如下操作使用
openssl生成复杂的随机的1024个字符串。然后使用
chmod修改文件权限,只给文件拥有者提供读权限。
2. 把keyfile拷贝到每个副本集成员
把keyfile拷贝到副本集成员的服务器主机上。保证运行mongod实例的用户是keyfile的拥有者且能访问该文件。避免存储keyfile的存储介质很容易从运行mongod实例的主机上失去连接,比如USB驱动或网络存储设备。
3. 强制启用副本集每个成员的访问控制
使用keyFile参数运行mongod,强制执行内部认证和基于角色的访问控制。
对于副本集的每个mongod实例,使用配置文件或命令行启动mongod。
注意:
初始化之后就不能修改副本集名字了。所以这一步要选取一个合适的名字。
配置文件
如果使用配置文件,使用security.keyFile选项设置keyfile的路径,使用
replication.replSetName设置副本集名字。
security: keyFile: <path-to-keyfile> replication: replSetName: <replicaSetName>
使用配置文件启动mongod:
mongod --config <path-to-config-file>
命令行
如果使用命令行,通过--keyFile和
--replSet参数启动mongod。
mongod --keyFile <path-to-keyfile> --replSet <replicaSetName>
4. 通过localhost接口连接到副本集成员
使用mongo shell通过localhost接口连接到mongod实例。必须在同一物理机上运行mongo shell作为mongod实例。localhost接口只有在没有创建用户的情况下可用。一旦创建了用户localhost接口就关闭了。
5. 初始化副本集
rs.initiate()方法初始化副本集,并且可以有可选的副本集配置文档。
副本集配置文档包括:
_id。_id必须和传给mongod的
--replSet参数匹配。
members。members是个数组,需要副本集的每个成员有个文档。
以下是包含三个成员的副本集例子:
rs.initiate( { _id : <replicaSetName>, members: [ { _id : 0, host : "mongo1.example.net:27017" }, { _id : 1, host : "mongo2.example.net:27017" }, { _id : 2, host : "mongo3.example.net:27017" } ] } )
rs.initiate()触发选举,并选举出一个成员作为
primary。
进行下一步操作之前要先连接到
primary。使用
rs.status()可以查看
primary成员。
6. 创建管理员用户
重要:创建一个用户后,localhost异常就不可用了。
第一个用户必须有创建其他用户的权限,比如
userAdminAnyDatabase角色的用户。这保证了你以后可以创建其他用户。
如果没有一个用户有创建用户的权限,一旦localhost异常关闭你就不能创建或修改用户了,也不能进行必须的操作。
使用
db.createUser()方法添加用户。admin数据库的用户至少应该有
userAdminAnyDatabase角色。
必须连接到
primary创建用户。
下面例子是在admin数据库创建了一个有
userAdminAnyDatabase角色的用户
fred。
重要:
密码应该是随机的,足够长的,复杂的,以保证系统安全,避免恶意访问。
admin = db.getSiblingDB("admin") admin.createUser( { user: "fred", pwd: "changeme1", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
7. 使用管理员用户认证
在admin数据库认证。在mongo shell中,使用
db.auth()认证。例如,下面认证了管理员用户
fred:
db.getSiblingDB("admin").auth("fred", "changeme1")
另外,通过mongo shell,使用
-u <username>,
-p <password>和
--authenticationDatabase参数连接到副本集主库。
mongo -u "fred" -p "changeme1" --authenticationDatabase "admin"
8. 创建群管理员
clusterAdmin角色授予副本集操作访问权限,例如配置副本集。
创建群管理员用户,并分配
clusterAdmin角色。
db.getSiblingDB("admin").createUser( { "user" : "ravi", "pwd" : "changeme2", roles: [ { "role" : "clusterAdmin", "db" : "admin" } ] } )
9. 创建其他用户(可选)
创建用户,允许客户端与副本集连接和交互。相关文章推荐
- 使用eclipse进行java web开发的三中tomcat部署方式
- 使用Docker部署Spring Boot 应用 Dockerfile方式
- MongoDB菜鸟入门(二):使用分片和主从副本实行高性能髙可靠数据库
- java中使用mongodb的几种方式
- 使用nisebosh方式部署cloudfoundry多节点一
- FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码
- MongoDB的部署方式
- Mongodb的副本集部署
- MongoDB(二)主从复制以及副本集的配置和使用
- 使用Helm charts在Kubernetes 1.4 MongoDB上部署
- 转载:FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码
- k8s环境部署及使用方式
- mongodb副本集和认证部署注意点
- FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码
- mongodb2.6部署副本集+分区
- 使用Myeclipse进行java web开发的三种Tomcat部署方式
- 搭建及使用K8s集群 <k8s dashboard pod方式部署>
- 使用WebService的方式调用部署在服务器的Wcf服务
- MongoDB集群部署(副本集模式)
- spring-boot dubbo项目使用docker方式部署