此文已由做者溫正湖受權網易雲社區發佈。
html
歡迎訪問網易雲社區,瞭解更多網易技術產品運營經驗。程序員
近段時間來,全球範圍內數以萬計的MongoDB實例被攻擊,做爲旨在爲用戶提供最優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+款雲產品!
更多網易技術、產品、運營經驗分享請點擊。
相關文章:
【推薦】 IOS渠道追蹤方式
【推薦】 Google準實時數據倉庫Mesa(一)