1. 程式人生 > 其它 >MongoDB部署使用金鑰檔案進行身份驗證的副本集

MongoDB部署使用金鑰檔案進行身份驗證的副本集

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.建立普通使用者