文章目錄
在 Windows 啟用 MongoDB Replica Set 驗證
之前曾在 為 MongoDB 加上驗證機制 介紹過如何為 MongoDB 建立驗證授權機制,為資料加上基本保護,也在 MongoDB 在 Windows 上的 HA 機制 - Replica sets 介紹 MongoDB 的 HA 機制 - Replica Set 相關安裝及設定。當然想要將 MongoDB 實際使用在 production 環境上,就必需兼顧資安及 HA 機制
加上近日 MongoDB 資安問題又再次佔據新聞版面 (詳細內容可以參考 新一波MongoDB勒贖攻擊來襲,2.6萬台伺服器受害),雖然數量下降,但攻擊強度卻有過之而無不及,所以今天就來紀錄如何啟用 Windows 中 MongoDB Replica Set 的認證與授權
Internal Authentication 使用兩種驗證機制
Keyfiles
- 使用 SCRAM-SHA-1 建立密碼檔
- 密碼長度需要介於 6 - 1024 字元
- 需在各個 replica set or sharded clusters 間使用相同 keyfiles
x.509
- 使用 TLS/SSL 連線
- 不使用帳號及密碼驗證
啟用 Replica Set 驗證機制
先完成 Replica Set 相關設定
關閉 MongoDB Replica Set 各個 instance
建立
keyfile
- 可以使用任意方式產生 6 至 1024 個字元的隨機字串當做 key
官方範例中使用
openssl
來產生隨機字串(windows 環境中,安裝 git 時會附帶安裝openssl.exe
)"C:\Program Files\Git\mingw64\bin\openssl.exe" rand -base64 741 > c:\keyfile
將
keyfile
複製至各個 MongoDB server 上,並指定給各個 MongoDB instance在
yaml
設定檔中指定security: keyFile: c:\keyfile
透過指令指定
mongod --keyFile c:\keyfile
重新啟動 MongoDB Replica Set 各個 instance
設定第一個 user
- 連線至
primary
切換至
admin
databaseuse admin
建立
user
並指定角色為userAdminAnyDatabase
db.createUser({user: "yowkoAdmin",pwd: "pass.123",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
建立第一個 user 的動作需透過指令進行,無法使用 GUI 工具
第一個 user 建立後即可使用 GUI 工具,指定 authentication 登入
- 連線至
連線至 MongoDB
使用指令
語法
mongo --port {port} -u "{帳號}" -p "{密碼}" --authenticationDatabase "{database}"
範例
mongo --port 27017 -u "yowkoAdmin" -p "pass.123" --authenticationDatabase "admin"
使用 GUI
加入連線資訊
選擇連線類型 –> Replica Set 並設定目標 Server
設定連線帳號密碼
建立儲存資料的 DB 及對應帳號權限
上述建立的帳號是針對 MongoDB 的管理權限,實際針對不同 DB 需要加入不同使用者及相關權限,才能實際讀寫資料,帳號設定可以參考 為 MongoDB 加上驗證機制
未建立 db 使用者沒有權限
建立使用者
use test db.createUser( { user: "yowko", pwd: "pass.123", roles: [ { role: "readWrite", db: "test" } ] } )
使用正確使用者登入
use test db.auth("yowko","pass.123")
新增成功
db.test.insert({"aaa":123})
心得
雖說 MongoDB 的設計概念就是用於信任網路,但為什麼不能預設使用較高層級的安全性保護機制,如果真的用不到再自行移除就好,至少可以避免一些偷懶的 user 所造成的低級資安疑慮
回到 MongoDB Replica Set 的驗證設定,設定與 為 MongoDB 加上驗證機制 相去不遠,概念也相同,再搭配 MongoDB 在 Windows 上的 HA 機制 - Replica sets 設定 Replica Set ,使用上並不複雜,但在釐清設定的過程中,花了不少時間驗證正確的做法,但終於對相關設定有比較明確的認識
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-08
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。