MongoDB部署使用金鑰檔案進行身份驗證的副本集
阿新 • • 發佈:2022-05-16
1.副本集架構
成員 | IP |
1 | 192.168.137.110 |
2 | 192.168.137.111 |
3 | 192.168.137.112 |
·副本整合員之間,使用內部身份驗證的方式保證安全性
·客戶端和副本之間使用基於角色的訪問控制
2.建立keyfile
使用keyfile身份驗證,副本集中的每個mongod例項都使用keyfile的內容作為共享密碼,用於對部署中的其他成員進行身份驗證。只有具有正確金鑰檔案的mongod例項才能加入副本集。
在其中一個節點生成,拷貝到其它節點即可。
$ openssl rand -base64 756 -out /usr/local/mongodb/mongo.keyfile $ chmod 400 /usr/local/mongodb/mongo.keyfile
3.將步驟1中生成的keyfile拷貝到其它成員
注意,要將keyfile檔案的屬主改成mongodb的安裝使用者,通常是mongod。
4.開啟訪問控制後啟動所有成員節點
啟動前,修改配置,開啟訪問控制:
# vi /etc/mongod.conf security: authorization: enabled keyFile: /usr/local/mongodb/mongo.keyfile replication: replSetName: <replicaSetName> net: bindIp: localhost,<hostname(s)|ip address(es)>
然後啟動mongodb例項
比如:
mongod --config <path-to-config-file>
systemctl restart mongod.servicesystemctl status mongod.service
5.通過本地介面登入到其中一個節點
使用mongo本地登入。
因為還沒有建立使用者,只能通過本地介面登入;在建立第一個使用者之後,本地介面就會被關閉。
6.初始化副本集
> config = { _id : "rs0", members : [ {_id:0, host:"192.168.137.110:27017"}, {_id:1, host:"192.168.137.111:27017"}, {_id:2, host:"192.168.137.112:27017"}, ] } > rs.initiate(config) //初始化副本集 { "ok" : 1, //返回ok:1成功,返回ok:0失敗 "operationTime" : Timestamp(1611042829, 1), "$clusterTime" : { "clusterTime" : Timestamp(1611042829, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
rs.initiate()會觸發選舉,並選舉出一個成員為primary。
7.建立管理使用者
建立第一個使用者後,本地介面就會被關閉。
第一個使用者必須具有create其它使用者的許可權,授予userAdminAnyDatabase角色。
admin = db.getSiblingDB("admin") admin.createUser( { user: "fred", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
8.管理員登入驗證
mongo -u "fred" -p --authenticationDatabase "admin"
或者先執行mongo,在mongoshell中執行:
db.getSiblingDB("admin").auth("fred", passwordPrompt()) // or cleartext password9.建立叢集管理員
9.建立叢集管理員
db.getSiblingDB("admin").createUser( { "user" : "ravi", "pwd" : passwordPrompt(), // or cleartext password roles: [ { "role" : "clusterAdmin", "db" : "admin" } ] } )
10.建立普通使用者