我今天遇到了這個超級煩人的問題。
基本上,我已經使用 GCP Marketplace 產品設定了 MongoDB 資料庫。它設定一個主節點、輔助節點和一個仲裁器。這太酷了。它不做的是安全。就像,完全一樣。所以我很自然地必須自己設定它。好吧,現在 20 個小時過去了,我自己的臉上也挨了幾拳,但我仍然在努力讓它運作。
基本上,這是我的部分配置:
security:
authorization: enabled
keyFile: '/etc/mongodKey'
如果我註解掉keyFile
實例運行。但由於啟用了安全性,它無法連接到任何其他節點。不,我無法禁用它,你生氣了嗎?
但關於 keyFile 的事情......據我了解,mongod
無法打開它,所以它不會啟動。我想/etc
這不是一個放置它的好地方嗎?我嘗試了其他資料夾,但沒有成功。什麼都不起作用。
我需要採取這種安全措施,因為我的同事需要使用 Robo 3T 連接到資料庫。所以刪除外部IP位址是不可能的。
我做錯了什麼?請幫忙,因為我正在拔自己的頭髮。
這是以下的輸出sudo service mongod status
:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2019-08-21 15:28:08 UTC; 4min 29s ago
Docs: https://docs.mongodb.org/manual
Process: 1024 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=1/FAILURE)
Main PID: 1024 (code=exited, status=1/FAILURE)
Aug 21 15:28:08 m-vm-0 systemd[1]: Started MongoDB Database Server.
Aug 21 15:28:08 m-vm-0 systemd[1]: mongod.service: Main process exited, code=exited, status=1/F
Aug 21 15:28:08 m-vm-0 systemd[1]: mongod.service: Unit entered failed state.
Aug 21 15:28:08 m-0 systemd[1]: mongod.service: Failed with result 'exit-code'.
編輯:
我檢查了mongod.log
.是的,這是權限問題。我無法解決它。
我嘗試做sudo chmod 400 /etc/mongodKey
但它沒有做任何事情。請問,我應該把密鑰檔案放在哪裡,以便 mongodb 可以讀取它?這個非常重要!
答案1
如果您使用名為「MongoDB」的 GCP MongoDB 市集部署(讓您設定複製),請了解以下資訊:
他們在初始配置中沒有設定安全性,因此有 2 個選項:
- 關閉外部IP
- 啟用授權
mongod.conf
如果您選擇第一個解決方案,您將無法輕鬆地從任何其他外部來源連接到資料庫。
如果您選擇第二種解決方案,則需要執行下列操作:
產生密鑰,整個過程可以在這裡找到:https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/
複製文件內容
- 透過 SSH 連接到所有 Compute Engine 實例
- 選擇一個目錄
sudo touch <path to key>
sudo nano <path to key>
- 將您產生的金鑰貼到電腦上並儲存
sudo chmod 600 <path to key>
sudo chown mongodb: <path to key>
- 更新您的
mongod.conf
以下內容/etc/mongod.conf
- 取消註釋
security
,,authorization
keyFile
keyFile
提供密鑰下的密鑰檔案路徑- 停止所有實例並重新啟動它們
現在 MongoDB 可以存取金鑰檔案了。
惡夢什麼的。並且chmod 400 <path to key>
按照文檔中的指定對我不起作用。我必須將其設為chmod 600 <path to key>
.