用容器與微服務(wù)安全來加持DevSecOps
譯文【51CTO.com快譯】
隨著微服務(wù)流程和系統(tǒng)部署在DevOps實(shí)踐中的廣泛使用,DevOps工程師在軟件開發(fā)項(xiàng)目中的安全責(zé)任日益增大。我們需要通過良好的DevSecOps流程,在保證應(yīng)用部署、運(yùn)營和服務(wù)監(jiān)視的同時(shí),通過容器與微服務(wù)來加持安全性。
身份標(biāo)識(shí)
在設(shè)計(jì)新的分布式系統(tǒng),或?qū)误w應(yīng)用(monolithic application)重構(gòu)與增強(qiáng)為微服務(wù)時(shí),人們往往會(huì)考慮每個(gè)微服務(wù)與其他微服務(wù)進(jìn)行通信的業(yè)務(wù)應(yīng)用和流程。那么與客戶、以及其他開發(fā)伙伴的合作過程中,我們需要采用微服務(wù)級(jí)別的身份標(biāo)識(shí)。此類標(biāo)識(shí)可以為我們帶來如下優(yōu)勢(shì):
- 由于身份標(biāo)識(shí)通常不會(huì)被經(jīng)常更改,因此它有助于我們理解分布式應(yīng)用的處理過程。
- 由于不需要通過限制某些微服務(wù)來提供各類節(jié)點(diǎn),因此我們可以充分利用容器編排的敏捷性。
- 無論是容器還是虛擬機(jī),由于它們的主機(jī)身份可以被抽象地用身份標(biāo)識(shí)來表示,因此我們可以據(jù)此實(shí)現(xiàn)平臺(tái)化。
跨云、域、主機(jī)和應(yīng)用的負(fù)載
在微服務(wù)實(shí)際應(yīng)用中,一個(gè)最大問題是:橫跨多個(gè)域環(huán)境、計(jì)算類型、以及混合云的身份標(biāo)識(shí)傳遞問題。通常說來,由于分布式系統(tǒng)橫跨了不同的安全與身份域,我們很難實(shí)現(xiàn)對(duì)不同復(fù)雜環(huán)境的可用性管理,以及動(dòng)態(tài)擴(kuò)展。
有研究表明:各類企業(yè)的大多數(shù)數(shù)據(jù)泄露事件都是由誤解所導(dǎo)致。這些誤解體現(xiàn)在:各種云服務(wù)和系統(tǒng)的安全配置策略,到底是云服務(wù)提供商的責(zé)任、還是應(yīng)用所有者的職能。DevOps團(tuán)隊(duì)?wèi)?yīng)當(dāng)確保在部署微服務(wù)之前,將合適的安全策略配置到云端環(huán)境中。
針對(duì)上述需求,我們可以采取的方法是:在所有環(huán)境中使用單一的證書頒發(fā)機(jī)構(gòu),來作為CA(certificate authority)。例如,作為開源工具的服務(wù)網(wǎng)格(service mesh),就可以在越來越多的項(xiàng)目中被用作CA中心。雖然,各種服務(wù)網(wǎng)格系統(tǒng)的配置過程可能相當(dāng)繁瑣,但是它們可以充當(dāng)非常實(shí)用的安全和運(yùn)營的控制點(diǎn)。在具體實(shí)現(xiàn)上,我們可以在Kubernetes的多個(gè)集群中配置Istio(譯者注:一種微服務(wù)系統(tǒng)管理工具)。通過向Istio添加非Kubernetes服務(wù),進(jìn)一步擴(kuò)展其信任范圍。當(dāng)然,這也會(huì)增加配置的復(fù)雜性,最終還是取決于每個(gè)項(xiàng)目所有者將如何限制其控制權(quán)限??偟恼f來,鑒于可操作微服務(wù)的復(fù)雜性,隨著應(yīng)用程序的迭代和操作管控的加強(qiáng),此舉會(huì)帶來如下方面的好處:
- 更快地完成代碼的編寫與部署。
- 可重復(fù)的dev-sec-ops流程。
- 使用質(zhì)量檢查與安全掃描工具,來獲取更高的安全性。
- 增加對(duì)于用戶使用的可用性。
- 實(shí)現(xiàn)軟件級(jí)的故障轉(zhuǎn)移(魯棒性)。
- 快速或動(dòng)態(tài)地實(shí)現(xiàn)可擴(kuò)展性。
當(dāng)然,有些用戶也可以選擇僅使用內(nèi)部身份表示,以及只使用一個(gè)簡(jiǎn)單的在線證書,然后將兩者在分布式微服務(wù)的不同CA處實(shí)現(xiàn)同步。由于此類設(shè)置具有一定的復(fù)雜性,因此僅被那些在微服務(wù)開發(fā)、安全性和運(yùn)營管理方面,有著豐富經(jīng)驗(yàn)的DecSecOps流程和團(tuán)隊(duì)所采用。此外,我建議您在圍繞著自身的業(yè)務(wù)流程和計(jì)算架構(gòu)的成熟度,進(jìn)行充分評(píng)估的基礎(chǔ)上,酌情采用。
有了前面的基礎(chǔ),用戶在對(duì)多個(gè)不同的實(shí)體實(shí)施身份管理(包括:識(shí)別,控制,構(gòu)建,保護(hù),配置,監(jiān)控,以及信任傳遞)時(shí),就容易得多了。通常,微服務(wù)的信任建立過程是一組DevSecOps的流程和架構(gòu)。它們定義了如何在新的分布式系統(tǒng)環(huán)境中(無論是否使用Kubernetes),如何對(duì)微服務(wù)進(jìn)行身份驗(yàn)證。同時(shí),我們需要通過成功落地DevOps,來實(shí)現(xiàn)基于身份的云服務(wù)負(fù)載。也就是說,為了保護(hù)微服務(wù),我們需要自動(dòng)化定義,創(chuàng)建,管理和保護(hù)各種負(fù)載的身份,以及微服務(wù)實(shí)體,并促進(jìn)無摩擦的零流程安全(frictionless zero process security)。
DevSecOps中的安全細(xì)節(jié)
在此,我們給出的一種解決方案是:建立一個(gè)平臺(tái),通過CI/CD管道,為每一種微服務(wù)創(chuàng)建一個(gè)身份標(biāo)識(shí),以確保這種嵌入式身份能夠通過密碼綁定到內(nèi)存中。那么,當(dāng)微服務(wù)被發(fā)布到生產(chǎn)環(huán)境中時(shí),該標(biāo)識(shí)便可利用相關(guān)策略,自動(dòng)化地創(chuàng)建并加固其安全性。據(jù)此,我們不但可以保護(hù)生產(chǎn)環(huán)境免受攻擊的侵害和泄露的危險(xiǎn),而且能夠確保微服務(wù)僅與那些已完成標(biāo)識(shí)和認(rèn)證的微服務(wù)間進(jìn)行通信。
此類方案實(shí)際上充當(dāng)了一個(gè)自動(dòng)化的安全層。它將CI/CD無縫地添加到了DevSecOps的實(shí)現(xiàn)中。此外,為了保護(hù)CI/CD之外的負(fù)載,我們還可以借用Cyber Armor(請(qǐng)參見--http://www.cyberarmor.io/)平臺(tái),自動(dòng)將身份標(biāo)識(shí)作為CI/CD的一部分,予以創(chuàng)建,并在部署的過程中持續(xù)實(shí)施保護(hù)。
在Kubernetes里,由于認(rèn)證服務(wù)適用于整個(gè)集群的各種默認(rèn)帳戶,因此在實(shí)踐中,除非我們需要為某個(gè)帳戶的身份識(shí)別,采取特殊的配置,否則通常不會(huì)將其用于微服務(wù)的身份認(rèn)證之中。在此,Istio的服務(wù)度量控制(service measurement control)正好能夠發(fā)揮作用。它可以用作微服務(wù)的身份標(biāo)識(shí),融入DevOps的流程和處理之中。
用戶身份與服務(wù)身份
從單體發(fā)展到基于微服務(wù),應(yīng)用所處的環(huán)境越來越復(fù)雜,并行運(yùn)行的軟件也越來越多。就安全問題而言,每一個(gè)組件都會(huì)給服務(wù)架構(gòu)帶來攻擊面。因此,無論是用戶,還是微服務(wù),都應(yīng)當(dāng)在服務(wù)架構(gòu)中得到充分的驗(yàn)證,以保障合理的安全態(tài)勢(shì)。
在過去的單體應(yīng)用中,應(yīng)用只需在內(nèi)部完成了對(duì)于某個(gè)用戶的身份識(shí)別與驗(yàn)證,便可決定該用戶的使用權(quán)限。如今,用戶需要在前端(front-end)的微服務(wù)處提供自己的身份標(biāo)識(shí),而各個(gè)微服務(wù)則利用JSON Web令牌,并結(jié)合AUTH0等框架,根據(jù)用戶在整個(gè)信任鏈條中傳遞的身份信息,來認(rèn)證該用戶權(quán)限,進(jìn)而決定其是否可以獲取某些敏感數(shù)據(jù)。
運(yùn)維管理中的微服務(wù)安全性:工具和流程
有時(shí)候,針對(duì)微服務(wù)的攻擊并非來自某個(gè)用戶,而是針對(duì)應(yīng)用運(yùn)行環(huán)境中的某些程序邏輯漏洞。因此,我們需要持續(xù)進(jìn)行掃描,并與既定的構(gòu)建和配置狀態(tài)相比較,通過自動(dòng)發(fā)現(xiàn)和應(yīng)用映射,做出相應(yīng)的安全性調(diào)整,以防止各種潛在的攻擊。而且,在檢測(cè)到攻擊時(shí),我們可以使用Grafana(譯者注:開源的分析與監(jiān)控平臺(tái)),來通過查看圖表的方式,深入獲悉攻擊的類型和其他具體信息。
此外,我們可以使用Radware這種應(yīng)用配置管理工具,來保護(hù)基于微服務(wù)的應(yīng)用。例如,在應(yīng)用發(fā)生更改時(shí),Radware會(huì)根據(jù)配置策略,將變更信息反饋送到Sec Ops處進(jìn)行評(píng)估和處理。也就是說,一旦發(fā)現(xiàn)更改,此類工具會(huì)進(jìn)一步檢查容器的注冊(cè)表,Kubernetes也會(huì)將其與上一個(gè)狀態(tài)的配置鏡像作比較,通過記錄已發(fā)現(xiàn)的更改,進(jìn)而在所有不同的DevOps團(tuán)隊(duì)之間共享這些更改信息,以便實(shí)施補(bǔ)救。
【原標(biāo)題】DevSecOps Using Container and Microservices Security,作者: Larry Gordon
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】