無服務器架構安全面面觀
隨著云生態(tài)系統(tǒng)的發(fā)展和擴展,可以滿足用戶對系統(tǒng)的靈活性和動態(tài)按需可塑性方面的需求,用戶可以根據(jù)業(yè)務情況在高峰期短時間內部署大量服務器上線,然后再過了高峰后又撤下來,整個過程自動調控,自動收縮。一個典型例子是新浪微博服務,在突然出現(xiàn)爆發(fā)事件時候(比如明星出軌新聞),其流量可能是平時幾百甚至上千倍,對這樣的爆發(fā)流量用傳統(tǒng)的擴容方式根本滿足不了需求,也沒有那么多資源,新浪的解決方法是私有云+租賃公有云方式,花錢利用阿里云實現(xiàn)峰值時服務擴容。對于一般企業(yè)則可以完全利用租賃第三方云服務方式構建自己服務模式,自己無需維護任何硬件設備和基礎后端軟件服務,這樣的架構叫Serverless ,即"無服務器"架構。
無服務器架構可以讓企業(yè)實現(xiàn)更靈活和更具成本效益的業(yè)務架構模式。但是,隨著企業(yè)開始使用無服務器架構時候,需要考慮無服務器架構的安全,本文蟲蟲就給大家聊聊這個話題。
什么是無服務器?
無服務器是虛擬化和云計算發(fā)展的結果,是指其企業(yè)完全通過租賃云供應商的資源來實現(xiàn)業(yè)務的模式,無服務器的核心是在架構中完全摒除硬件和后端基礎軟件服務(比如數(shù)據(jù)庫,賬號體系等),而依賴第三方的云資源(BaaS或者FaaS)。
當考慮無服務器架構時候主要基于一個想法:如果并不是所有應用程序的功能都是一直要用,那么為什么要為不經(jīng)常使用的服務器支付租金呢?一般來說系統(tǒng)都需要一些功能,如業(yè)務邏輯,用戶認證系統(tǒng),數(shù)據(jù)庫,以及其他一些用戶簡短的和特定活動需要的功能。使用服務器架構,會執(zhí)行和打包這一系列的功能,所以一般也將無服務器稱為功能即服務(FaaS);這些服務也為后端服務,所以也叫為BaaS "Backend as a Service"。
FaaS服務最典型的例子是知名云廠商亞馬遜AWS的AWS Lambda。

國內的阿里云最近也搞了一個叫函數(shù)計算類似的東西:

無服務器安全
雖然云廠商會提供了很多安全服務和一些基本的安全策略,但是需要你花費購買相關服務,而且一些策略也需要自己配置。關于無服務器架構的安全我們需要注意以下事項。
保持最新版本
為了確保應用程序的安全,最有效方法之一是確保所有組件都是新的。使用的第三方模塊是否需要打安全補丁?
軟件更新時候經(jīng)常被忽略的問題是忘記更新組件依賴項,尤其是在應用程序中使用開源組件時。據(jù)統(tǒng)計有超過92%的應用程序使用的開源組件會占到其代碼庫的60-80%,基礎開源組件的安全是不容忽視的部分。如何安全地使用開源模塊與商業(yè)軟件存在一些明顯差異,例如在開源組件在發(fā)布新漏洞或修復程序時無法很好的跟蹤其影響面,做到有效的升級通知。另一個方面是要考慮構建組件的依賴關系。如果其中一個依賴存在漏洞,則會影響整個應用程序的安全。現(xiàn)在的基本的Git服務器端,比如Github和Gitlab都提供了對依賴的基本類庫安全自動化掃描工具。我們可以借助這些工具來確保我們的組件都更新到安全的版本。
最小權限原則
進行權限和訪問控制是維護無服務器安全性的重要規(guī)則,通過安全策略設置為每個功能授予最小權限,并使用基于角色的身份驗證(IAM角色),以很大限度地減少潛在安全風險。
這個原則很重要,因為可訪問的用戶越多,對系統(tǒng)安全的潛在的風險就越大。比如一個例子,黑客成功竊取了你的一個用戶的電子郵件帳戶,竊取了其登陸憑據(jù)。為了最大限度地降低風險,我們應該分角色限制可訪問的功能,并對訪問IP進行限制,比如通過防火墻和VPN等設置限制登錄,這樣就算登錄憑據(jù)被竊取了也無法登陸。當然除了外部黑客的攻擊以外我們也要防止內部人員竊取其不應該知道的信息,所以基于角色限制每個用戶的權限至關重要。
保持Em分離
與限制用戶權限原理類似,將每個功能的網(wǎng)絡和資源訪問隔離也很重要。這條原則也被稱為微分段(Micro-Segmentation),就是通過設置訪問屏障的,保證我們的某功能被攻克后,不影響其他功能和節(jié)點。安全界常遵守一個常理就是"雞蛋不能放在同一個籃子里"。
如果正如我們將數(shù)據(jù)庫與另一個數(shù)據(jù)庫分開一樣,通過隔離不同的功能,不同的人容器,可以保證整體的安全不受部分節(jié)點的影響。
緊盯日志
一旦開始使用無服務器基礎架構,就會發(fā)現(xiàn)架構都會變點很亂不著頭腦,快速迭代的功能和業(yè)務,可能會讓我們忽略一些安全問題跡象。比如發(fā)送到無服務器架構的大量請求,可能意味著功能存在漏洞功能,而你卻將其忽略,沒注意到。
這時候就需要注重安全和日志了。
熟悉無服務器架構(其他一些架構也類似)很好的工具是瀏覽和系統(tǒng)日志。解決無服務器安全挑戰(zhàn)的第一步就是維護和分析日志,識別執(zhí)行日志中的異常情況。

安全掃描
其次,我們應該使用全自動工具掃描功能,包括檢查和監(jiān)控系統(tǒng)所有使用的開源組件。比如你使用AWS Lambda你可以使用WhiteSource的無服務器集成來掃描和監(jiān)控已部署,WhiteSource會自動識別所有開源組件和依賴項,然后針對其開源存儲庫的綜合數(shù)據(jù)庫檢查它們,以獲取安全漏洞和許可證。檢測到后,您可以應用自動策略,定義工作流程以及在團隊中協(xié)作信息。

合規(guī)事宜
當涉及金融,電信,健康等受監(jiān)管行業(yè)時,數(shù)據(jù)隱私問題變得更加敏感。由于我們運行應用程序并在云上存儲數(shù)據(jù),因此總是存在與這些資產(chǎn)面向公眾相關的風險。對云上數(shù)據(jù)做合格性可以需要通過法律及專業(yè)人士進行協(xié)助進行。
總結
總之,使用無服務器架構具有很多優(yōu)勢,可以幫助我們節(jié)省成本,提高靈活性和可塑性。但是無服務器架構安全的問題也不容忽視。本文我們列舉了一些常用的安全原則和技巧也幫大家避免常見的無服務器安全隱患,并確保應用程序的安全可靠。