隨著雲端計算被普遍運用,微服務等基礎架構的成熟,同時企業對開發運維提出更高效的要求,敏捷開發運維(DevOps)這種提高研發效能,節省成本,最終更快捷實現產品交付並提示產品質量的模式被得到推廣和應用。敏捷開發運維的應用,其天生的敏捷性與傳統較為緩慢的安全體系的衝突給安全也帶來了挑戰,如何有效解決這個問題,Gartner在2012年也提出了“DevSecOps”的概念,人人為安全負責,讓業務、技術和安全協同工作以生產更安全的產品。
“高速交付”與“安全編碼”合二為一,DevSecOps引領新時代
DevOps主張在軟體開發生命週期(SDLC)的所有步驟實現自動化和監控,縮短開發週期,增加部署頻率。但由於傳統的安全流程無法跟上DevOps環境的步伐,安全考量與高速開發互相掣肘,安全性成為了DevOps的瓶頸。對於大部分開發團隊而言,安全是比較孤立的,大部分開發和運維人員沒有接受過安全編碼和安全實踐的培訓,使得安全與開發是分割的,甚至通常會繞過它。因此SDLC中的安全缺陷可能導致嚴重漏洞,這個時候就需要DevSecOps。
區別於沒有強調安全地遷移到雲端的DevOps,DevSecOps是在SDLC的早期引入安全性,目標是讓參與SDLC的每個人都對安全負責,從而來開發更安全的應用程式。而騰訊雲作為一個複雜的安全場景,快速的產品迭代犧牲的可能是產品安全,如何在騰訊雲快速發展的情況下保障騰訊雲的產品安全,又如何靈活的去落實DevSecOps就是我們今天所面臨的問題。
騰訊安全雲鼎實驗室產品安全負責人張祖優參與了《研發運營一體化(DevOps)能力成熟度模型》中安全及風險管理、安全工具的制定,並出席由標準核心發起者之一的DevOps 時代社群和高效運維社群聯合主辦的“2020 DevOps 線上峰會”最佳實踐專場做交流分享。本次分享張祖優從目前Devops環境下複雜的產品體系及人員組織、多維度的安全挑戰兩個層面,針對騰訊雲的龐大產品體系以及它對應帶來的安全挑戰,從騰訊雲安全建設的幾個階段介紹騰訊雲產品安全體系以及DevSecOps是如何在騰訊雲落地實踐。
DevOps轉型與落地,致力平衡安全問題
在分享中,張祖優提出在DevOps轉型與落地過程中,前期應如何基於騰訊的安全積累快速建立起安全防線,保障騰訊雲的產品安全;下一步又如何基於SDL等安全流程從風險引入控制、風險發現與防護、響應處置、閉環改進等幾個維度完善騰訊雲的產品安全體系,有效收斂相關安全風險;最終在DevOps高速發展的時候,如何在騰訊雲嘗試落地DevSecOps,如何解決DevOps高效要求和傳統安全中安全緩慢的衝突。
要實現這個轉型落地的過程,平衡安全問題便是我們的第一要務。DevOps敏捷高效的要求看起來好像跟緩慢滯後的安全存在天然的衝突,但實際上DevSecOps對安全的要求有個很關鍵的點就是自動化,並且柔和地融入流程。所以只要構建好相關DevSecOps的工具鏈,低侵入自動化的融入DevOps的流程中,我們不難發現, “交付速度”“安全編碼”這兩個看似相反的目標,是沒有明顯衝突的,同時還可以有效的減少安全的人力投入,提高安全效率。
而安全團隊在整個轉型落地的過程中就扮演了參與者、建設者和引導者的角色,需要在DevSecOps中負責提供好用自動化的安全工具,向開發者提供工具支援、提供培訓支援、提供安全諮詢等。並根據安全DevSecOps的理論,把握安全介入時機,將安全嵌入到DevOps的各個環節,從需求和設計階段就開始介入,使安全問題的修復成本達到最低。
DevOps團隊目前面臨極大安全問題,隨著市場需求的快速變化,高頻率部署和軟體交付將造成安全威脅的上升。如果能夠比較好的實現DevSecOps可以帶來三個好處:首先是更快更高效,透過自動化手段,同時將安全左移,使得安全更早嵌入開發流程,從而解決由於安全性考慮耽誤的產品上線問題,實現產品快速上線;再者是風險控制,提供基本安全標準,自動化的保障,將安全風險有效識別並處置;最後一點是能節省成本,安全左移降低漏洞修復的成本,也減少對安全團隊的依賴,使得安全更加高效。如此一來就能解決以上提的問題。
企業內部執行落地,尋找關鍵率先出擊
三個維度分析如何落地
DevSecOps的落地有三個比較關鍵的維度,分別是人文、流程和技術。首先是人文的改變,持續進行安全意識培訓,鼓勵團隊自治,每個人為參與到安全,為安全負責,達成共識和認知;其次在流程方面進行最佳化,整合流程,定期做程式碼檢查、紅藍對抗,建立安全情報機制,有可度量衡的安全指標,加強與業務部門的協作等;最後技術方面要構建對應的安全工具,實現更自動化的安全檢測,相關工具可以嵌入到CI/CD流程。
另外還有一些關鍵點,在RSAC2019大會上就有專家提出實踐DevSecOps的九大關鍵因素。例如,文化意識維度的安全意識、安全編碼;架構和設計維度的威脅建模;工具方面的第三方匯入程式碼分析、程式碼編寫分析;全漏洞管理要建立漏洞管理共識和處理流程,對安全問題優先進行高危漏洞清理;最後就是其他監督方式,如安全同行的審閱以及一些安全評估手段。
針對DevOps的一些特色我們需要快速建立安全自動化覆蓋能力。現有軟體架構逐步趨向於微服務,而相關Web互動也更趨向於API方式,那麼對應的安全動作也可以重點關注容器安全、API安全等,如容器映象掃描,API自動化安全檢查與防護等。再者,安全的左移需要關注軟體供應鏈安全問題,對於軟體第三方依賴的安全檢查,使用開源元件的檢查就顯得尤為重要,需要我們在開發流程中建立相對應的自動化檢查能力,針對性、優先的推動自動化的安全檢查和相關建設。
三個步驟優先落地實踐
首先是工具鏈的建設。在工具鏈建設中有一些可能是傳統安全就具備常用的能力,如動態黑盒測試、靜態程式碼審計等,就是要考慮更加自動化更加最佳化;另外,因為安全左移或者軟體開發架構變化帶來的一些需求,如第三方依賴安全檢查工具、容器安全相關工具等也是同步要去構建的。
其次是在CI/CD流程中嵌入安全檢查,DevOps的實踐其中比較關鍵和對安全直觀的點就是CI/CD的流程,也是安全一個比較好的機會,在CI/CD的不同環節中嵌入友好的自動化安全檢查,既實現安全在DevOps的嵌入,又不影響DevOps的敏捷和效率要求。
最後就是文化和組織流程的最佳化了,如果想讓DevSecOps很好的踐行,相關的安全培訓,不只是對開發團隊安全文化的傳達,也是提升開發團隊安全編碼能力。同時在相關流程上也要針對性的進行最佳化,比如說產品上線安全檢查流程,不應該是過去卡點稽核的方式,而應該直接在CI/CD流程建立安全門限,不需要業務團隊來回的整改再與安全團隊溝通等,而應該安全團隊建立安全度量指標,開發團隊在開發過程中就在各個階段進行處理,實現最終完成CI/CD流程即可滿足上線安全要求。
DevSecOps這個概念的提出,再次定義了安全在軟體工程中的重要性以及結合方式。在DevOps的程式中,安全的整合和演化成為這個時代的焦點這並非偶然,跨職能團隊的協作和責任共擔的理念需要團隊不斷成熟才能更好地理解和執行,安全的融入也是這樣,需要同樣的方式和原則來打破開發和運維之間的隔閡,雖然看似是反覆的曲折過程,但是達到成熟階段的整體方向和趨勢是不會改變的。並且在敏捷思想和DevOps已經足夠成熟的今天,相信未來會有更多思想被提煉出來、也會有更多的最佳實踐來提高安全工作的效率。