大家下午好!我今天講的主題是關(guān)于從DevOps到DevSecOps,我們需要做哪些事情。
首先自我介紹一下。我之前主要是做JAVA開發(fā),時(shí)間比較久,來DaoCloud之前,我就職于EMC中國(guó)研究院,主要從事和跟云計(jì)算相關(guān)的研究工作,15年加入了互聯(lián)網(wǎng)金融公司,任首席架構(gòu)師。15年加入DaoCloud的時(shí)候,也是首席架構(gòu)師,到了今年6月份的時(shí)候,我們做了一些調(diào)整,現(xiàn)在主要是負(fù)責(zé)整個(gè)產(chǎn)品設(shè)計(jì),我們的產(chǎn)品的核心就是云原生,包括DevOps,為服務(wù)和容器。
我先放一張圖,這是我們對(duì)DevOps本質(zhì)的理解,也是相當(dāng)于把大家說到的東西梳理一下。包含技術(shù)規(guī)范、流程規(guī)范,最上面是文化建設(shè),剛才嘉賓說到從上到下推行 DevOps 是非常容易的,但是從下到上非常困難。原因是推行DevOps涉及到整體體系的改變,包括對(duì)組織架構(gòu)和整個(gè)企業(yè)文化建設(shè)都是有要求的。所以DevOps底層是工具支撐,包含開源的工具或者商業(yè)軟件,這在市場(chǎng)上都非常多。我們可以分四個(gè)維度對(duì)工具進(jìn)行分類:項(xiàng)目管理、研發(fā)管理、測(cè)試管理到部署管理,最后擴(kuò)展到運(yùn)維及運(yùn)營(yíng)。工具的涉及面比較廣。我們要做的事情就是怎么把這些工具串起來。每個(gè)工具有自己的語言體系,有自己運(yùn)作的方式,但是一旦把這些工具串起來以后,比如說我們有項(xiàng)目管理工具JIRA,里面包含了項(xiàng)目的概念,那項(xiàng)目怎么和代碼庫(kù)銜接起來,兩者是什么關(guān)系。還有制品庫(kù),還有自動(dòng)化測(cè)試等等這一系列概念之間的關(guān)系,我們需要把它們按照企業(yè)自己的流程和體協(xié)組織起來。同時(shí),我們要把數(shù)據(jù)收集在一起,比如說這個(gè)項(xiàng)目里面有多少任務(wù)、代碼提到多少次、持續(xù)提升流水線提升了多少次、單元測(cè)試結(jié)果是什么、自動(dòng)化測(cè)試的結(jié)果是什么、是不是已經(jīng)達(dá)到可以提上線申請(qǐng)等等,這個(gè)是我們今天在做的事情。上面的規(guī)范、流程,可以參考中國(guó)信通院輸出的標(biāo)準(zhǔn),這樣的話大家可以有一個(gè)更深刻的認(rèn)識(shí)。
接下來的這個(gè)流程每個(gè)企業(yè)都不一樣。這個(gè)是我們的一個(gè)客戶,他做的一款2C的軟件。這個(gè)過程中大家可以看到,整個(gè)流程還是比較復(fù)雜的,包括從最早的立項(xiàng)、需求分析,需求評(píng)審,排優(yōu)先級(jí),項(xiàng)目排期,接著進(jìn)行正開發(fā),測(cè)試,然后是預(yù)生產(chǎn)和生產(chǎn)部署等,這個(gè)過程中大家可以看到,DevOps最核心的是除了底下的工具之外,更關(guān)鍵的是怎么把這些工具串在一起,支撐我們企業(yè)的流程。而這個(gè)企業(yè)的流程,每個(gè)企業(yè)都不一樣,但大致流程可以分不同的項(xiàng)目管理、研發(fā)管理、測(cè)試、運(yùn)維部署。
這是一個(gè)典型的工具鏈。項(xiàng)目管理我們可以用JIRA,測(cè)試用例管理可以用Zephyr,這是一個(gè)JIRA 的插件。通常我們都是用Excel管理測(cè)試用力,測(cè)試過程中一邊執(zhí)行,一邊記錄,這樣效率就比較低。關(guān)于代碼管理,可以用GitHub Enterprise,這是收費(fèi)的軟件。開源可以用GitLab Community版本。構(gòu)建可以用Maven或者Gradle,單元測(cè)試可以用JUnit或者TestNG,接口測(cè)試可以用RTF,制品倉(cāng)庫(kù)可以用Nexus。要提交上線申請(qǐng)的時(shí)候,怎么告訴審核人員說我的測(cè)試是沒有問題的,這個(gè)就需要進(jìn)行代碼評(píng)審,我們可以用GitHub Enterprise,代碼質(zhì)量管理可以用SonarQube。我們可以根據(jù)企業(yè)不同要求定制SonarQube的規(guī)則,當(dāng)然這個(gè)要求還是非常高的。安全掃描,這個(gè)后面會(huì)講到,CheckMarx是一家商業(yè)公司,是做白盒審計(jì)的,你可以把代碼上傳上去,它會(huì)給你做掃描,最后分析出到底有沒有漏洞或者漏洞是什么。然后這個(gè)發(fā)布是DaoCloud的差評(píng),應(yīng)用性能管理包括系統(tǒng)、應(yīng)用到業(yè)務(wù)的監(jiān)控。壓力測(cè)試一般可以用JMeter,很關(guān)鍵的一點(diǎn),就是自動(dòng)化執(zhí)行。當(dāng)我完成部署以后,我能不能自動(dòng)觸發(fā)一個(gè)測(cè)試的流水線,去跑一下接口測(cè)試,或者跑壓力測(cè)試,跑完以后測(cè)試報(bào)告能夠自動(dòng)生成并通過郵件的方式發(fā)出來,包含這次跑了多少個(gè)壓力測(cè)試,平均時(shí)間多長(zhǎng),錯(cuò)誤率多少,這些很關(guān)鍵。還有很重要的一點(diǎn),客戶希望這些系統(tǒng)的用戶認(rèn)證是一體的,比如我們可以用OpenLdap或者Windows AD。把這些工具很好用起來,就基本涵蓋了DevOps的主要工作了。
但是今天面臨的安全問題是非常有挑戰(zhàn)的,我在2015年加入互聯(lián)網(wǎng)公司以后就遇到很多跟安全相關(guān)的問題,包括一些安全攻擊,如果你做的不好就不行。我們發(fā)現(xiàn)Struts有很多安全漏洞,滲透測(cè)試的時(shí)候,通過SQL注入,最后拿到一些不應(yīng)該拿到的信息。下面是一個(gè)比較有意思的案例,特斯拉云服務(wù)器遭遇黑客劫持,因?yàn)樗幸恍┒丝跊]有關(guān)掉,就被黑客攻擊了了,變?yōu)榧用茇泿?a href='http://m.qzkangyuan.com/news/47513.html' target='_blank'>挖礦機(jī),結(jié)果機(jī)密數(shù)據(jù)遭到泄露。整個(gè)攻擊的路徑是這樣,一般都會(huì)掃描一些公共的端口,如果你沒有設(shè)置密碼就可以訪問到,掃描里面的數(shù)據(jù)內(nèi)容,然后拿到管理員的賬號(hào)信息。黑客最終獲取了一些敏感的用戶數(shù)據(jù)。這是大概的攻擊的順序。當(dāng)時(shí)的環(huán)境是在云的環(huán)境上。