文章目錄
MongoDB Exporter 需要的權限
之前筆記 安裝 MongoDB Exporter 紀錄到透過 MongoDB Exporter 蒐集 MongoDB metrics 資訊,不過就安全性來看有些不妥:原因是用了 root
這個在環境設定(詳細資訊可以參考之前筆記 使用 Docker Compose 建立有 Auth 的 MongoDB Replica Set)中是個 superuser
雖然我們透過 Helm 將 MongoDB Exporter 安裝在 Kubernetes 上,如果不幸 MongoDB Exporter 所使用的帳密外洩,可以想見其他帳密皆外洩的機會很高,但我們不能比爛的,基於最小知識原則還是應該限縮 MongoDB Exporter 存取 MongoDB 的帳號權限
基本環境說明
- macOS Catalina 10.15.7
docker desktop 3.1.0(51484)
- docker engine 20.10.2
- Kubernetes v1.19.3
Helm v3.2.4
docker images
- percona/percona-server-mongodb:4.4.3
- ssheehy/mongodb-exporter 0.10.0
Helm charts
- prometheus-mongodb-exporter-2.8.1
mongodb replicaset
透過 docker compose 來啟動與示範,詳細資訊可以參考之前筆記 使用 Docker Compose 建立有 Auth 的 MongoDB Replica Set
權限設定與說明
建立 MongoDB Exporter 專用帳號
db.getSiblingDB("admin").createUser({ user: "mongodb_exporter", pwd: "pass.123", roles: [ { role: "clusterMonitor", db: "admin" }, { role: "read", db: "local" } ] })
權限說明
clusterMonitor (官方文件在此 clusterMonitor)
read-only 的存取權限
role: "read", db: "local"
因為個別 MongoDB node 的 replicaset sync 狀態會紀錄在 local db 的
oplog
,MongoDB Exporter 的 replicaset 資訊就會由此取得
心得
為什麼需要 role: "read", db: "local"
,Percona MongoDB Exporter 並沒有提到,不知道是不是太基本XD 剛開始看到時還以為是打算,感覺像是需要 readAnyDatabase
,查了一些資料才發現原來是 oplog 的關係,筆記一下加深印象
參考資訊
文章作者 Yowko Tsai
上次更新 2021-02-08
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。