此文已由作者溫正湖授權網易雲社群釋出。
歡迎通路網易雲社群,了解更多網易技術産品營運經驗。
近段時間來,全球範圍内數以萬計的MongoDB執行個體被攻擊,作為旨在為使用者提供最優MongoDB雲服務的網易蜂巢MongoDB團隊在第一時間跟進了相關報道,雖然蜂巢MongoDB服務從設計初就将資料的安全性列為第一位,確定使用者資料安全,但本着高度負責的态度我們對MongoDB服務又進行了安全自檢,顯然,結果也沒讓大家失望。這次事件從技術層面看并沒有什麼高深之處,應對措施也非常友善,下面結合蜂巢MongoDB進行介紹。
首先,不要把MongoDB執行個體直接暴露在公網下,這是原則問題。可以說沒有任何理由将您的資料存儲服務部署在公網環境,蜂巢使用者的MongoDB執行個體都部署在私有網絡中,跟公網相隔離。通過這個措施,可以抵擋掉絕大部分傷害。進一步,MongoDB執行個體所在的私網是使用者專用的,也就是說,該私網對蜂巢中的其他使用者也是隔離的,這又消除了被同一雲平台下其他使用者攻擊的可能。
其次,為MongoDB執行個體開啟認證并設定通路賬号,這也是最基本的。啟動認證後,通路者若不指定正确的賬号和密碼就無法正常通路MongoDB執行個體。密碼應該設定成字母、數字和特殊符号的組合,可以極大降低被破解的難度。顯然,包括蜂巢MongoDB在内的主流MongoDB雲服務都開啟了認證。
可以說,做了上述幾點,基本上可以保證您的MongoDB資料是安全的。但還可以做得更好。
做好賬号權限控制。MongoDB引入了非常細粒度的基于角色的權限控制機制(RBAC),執行個體擁有者可以為不同的MongoDB使用者提供适當權限等級的賬号,比如僅能讀/寫某個集合、資料庫;為MongoDB管理者提供 dbAdmin/userAdmin等權限的賬号,可參考官方文檔https://docs.mongodb.com/manual/core/authorization/,該文檔對權限管理進行了詳細地介紹。這樣,即使某個賬号洩露或被攻破,也可以最大限度減少損失。蜂巢MongoDB服務為使用者提供readWriteAnyDatabase權限的賬号,使用者僅能通過雲控制台來修改密碼。避免賬号洩露密碼被篡改。後續,我們還将為使用者提供增強版的MongoDB資料庫和賬号管理功能,敬請期待!
将MongoDB端口設定為非預設端口。大家都知道27017端口是MongoDB的,3306是端口MySQL的,暴露在公網的MongoDB執行個體,如果使用預設端口,别有用心的他們telnet下就連上了。當然了,你選擇其他端口無法從根本上解決問題,但至少加了層防護,是以也應該考慮。在網易蜂巢雲平台,使用者在建立蜂巢MongoDB執行個體時可以指定端口。
在網易蜂巢(雲計算基礎服務),除了以上防護外,我們還提供了平台級的安全保證,網易内部有專門的安全部門負責掃描和識别安全隐患,一旦發現既會通知相應的産品負責人第一時間解決問題,排除隐患。
如果因為上述防護沒有做到位等原因,您的MongoDB執行個體還是被攻破了,資料被删或被勒索,那麼至少應該有備份可以用來恢複資料。是以平時做好資料備份是非常重要的,不僅僅在防“盜”(黑客)時有用,防“火”(軟硬體故障)時也很有用,同時也可以用來防止資料被誤删。蜂巢MongoDB提供手動備份功能,使用者可以随時為您的執行個體進行備份,比如在load完一批重要資料後;還提供了自動備份能力,周期性地将您的資料備份到網易對象存儲服務NOS上,免費的哦!在需要進行資料恢複時,使用者可選擇對應時間點的備份,将資料恢複到一個新的執行個體上。
到此,本文可以結束了。但我一直有個疑問未解:為什麼會有那麼多裸奔的MongoDB執行個體?我認真閱讀了該事件被報道後的幾乎每篇文章,但目前還沒有分析這些執行個體的具體情況,這些執行個體建立者到底是些什麼人,是不是“傻子太多,騙子不夠用了”?下面談談我的看法:
裸奔的MongoDB很多是用于學習的。MongoDB目前已經在全球資料庫排老四了,肯定有一大波App開發者、資料庫運維、在校學生和其他對MongoDB感興趣的朋友們在學習MongoDB,那麼在公有雲平台上搭建個測試執行個體用于學習這種事情很好了解。什麼,開啟認證設定密碼?一是或許還不會,二是估計也是嫌麻煩,反正裸奔也挺時尚。
裸奔的MongoDB很多是用于測試的。這麼火的MongoDB,公司要上新業務做資料庫選型時,怎麼也得納入候選清單,那就得搭個測試環境,調研試用一番,再測測功能。于是,也會産生一堆執行個體,或許資料量還挺大的。
如果上面兩種情況占了裸奔執行個體大部分,那麼不是壞事,我們應該以積極的心态來看待。當然,可能還有很多的确是跑着線上業務的。對于這部分執行個體,可能又可以分為兩種:
一是,程式開發者搭建的。因為MongoDB對移動App開發者等程式員來說比較友好,使用JSON、模式自由、故障移動處理,是以很省事、上手很快,某些項目為了趕進度,或為了控制成本,團隊中沒有專門的資料庫運維,直接讓App開發搭個用于存儲後端資料的MongoDB執行個體,于是,難免就出現在公網裸奔的MongoDB執行個體。對于這種情況,真不能怪App開發,人家本來就不是幹這塊的。MongoDB能夠大大提高項目的開發效率,确實很好用,但團隊中如果沒有MongoDB運維能人,勸項目的負責人還是将MongoDB部署在專業的MongoDB雲服務平台上或請MongoDB官方技術團隊協助吧,但相比應該前一種更實惠,尤其是網易蜂巢MongoDB雲服務。
二是,确實是團隊專職的運維人員負責搭建的。對于這類,隻能說:“把資料庫暴露在公網實在是心太大…”。暴露在公網而且不設密碼,這行為絕對是公害啊,被坑的項目負責人應該把他們一個個找出來判刑,并把名單全球公布,永久封殺。然後把MongoDB執行個體遷到蜂巢上。
最後總結下,對于資料存儲這類安全性要求極高的服務,應該把部署和運維交給專業的團隊,不能用“臨時工”。歡迎大家使用網易蜂巢(雲計算基礎服務)MongoDB服務。
網易雲免費體驗館,0成本體驗20+款雲産品!
更多網易技術、産品、營運經驗分享請點選。
相關文章:
【推薦】 分布式存儲系統Kudu與HBase的簡要分析與對比
【推薦】 從疑似華住集團4.93億開房資訊洩露 看個人如何預防資訊洩露