“安全即代碼”:整合安全團(tuán)隊(duì)和DevOps團(tuán)隊(duì)
隨著云計(jì)算開發(fā)和部署變得越來越快且越來越靈活,安全團(tuán)隊(duì)意識(shí)到,保護(hù)云應(yīng)用和系統(tǒng)部署的唯一有效方法是開發(fā)可整合到部署管道的安全控制,以及盡可能自動(dòng)化。安全社區(qū)很多人將這種方法稱為安全即代碼,這是采用基礎(chǔ)設(shè)施即代碼的概念,即將所有虛擬和基于云的堆棧組件定義為可配置元素,這些元素只是被視為一種軟件定義,并在在配置文件和模板中進(jìn)行管理。
然而,很多安全團(tuán)隊(duì)在采用這種方法時(shí)并不順利。大多數(shù)安全專業(yè)人士并沒有軟件開發(fā)背景,并且,他們通常與DevOps團(tuán)隊(duì)脫節(jié),DevOps團(tuán)隊(duì)使用高度自動(dòng)化和靈活的工具及流程來集成、測試和部署代碼到云端。
重要的是要記住,大多數(shù)DevOps工程師和開發(fā)人員希望他們的部署盡可能安全,但他們需要安全性整合其環(huán)境,而不是部署障礙以及使用緩慢而笨重的工具和流程削弱可擴(kuò)展性和速度。
為此,安全團(tuán)隊(duì)?wèi)?yīng)該開始學(xué)習(xí)DevOps環(huán)境中使用的DevOps工具,這通常包括Jenkins、Chef、Puppet、Salt、Ansible、GitHub等。安全團(tuán)隊(duì)不需要精通所有這些DevOps工具,但需要注意以下幾點(diǎn):
- 用于存儲(chǔ)和管理代碼的DevOps工具。例如,如果Jenkins用于整合GitHub。安全團(tuán)隊(duì)將需要知道如何管理權(quán)限、當(dāng)代碼簽入和推出時(shí)Jenkins中可使用哪些日志。此外,源代碼掃描和審查應(yīng)在這個(gè)級(jí)別進(jìn)行集成,以確保代碼中不包含密碼或加密密鑰。
- 用于創(chuàng)建和管理服務(wù)器配置及部署編排的工具。Chef、Puppet和Ansible是很多環(huán)境中的常見選擇,它們都有自己的定義語音和不同的配置文件。安全團(tuán)隊(duì)需要整合配置設(shè)置和安全策略到這些平臺(tái)內(nèi)的定義文件。幸運(yùn)的是,所有這些主要配置和自動(dòng)化工具都有可用的配置模板和策略評(píng)估模板,并符合互聯(lián)網(wǎng)安全中心基準(zhǔn)、美國國防信息系統(tǒng)局技術(shù)部署指南和其他行業(yè)最佳做法和要求。
- 用于存儲(chǔ)和訪問登錄憑證和密鑰的DevOps工具。全面的DevOps做法會(huì)規(guī)定使用單獨(dú)的平臺(tái)用于控制登錄憑證和密鑰,例如HashiCorp Vault或Ansible Tower。監(jiān)控和控制對(duì)這些平臺(tái)的控制至關(guān)重要,安全團(tuán)隊(duì)?wèi)?yīng)該能夠獨(dú)立審查訪問并發(fā)送日志到遠(yuǎn)程日志記錄庫。
在構(gòu)建系統(tǒng)進(jìn)行部署時(shí),安全團(tuán)隊(duì)需要定義配置設(shè)置和策略,并將其集成到正在使用的工具中。通常情況下,這些定義將使用JavaScript Object Notation或者YAML格式進(jìn)行編碼,這兩者都易于學(xué)習(xí)。
當(dāng)服務(wù)器和應(yīng)用堆棧元素版本得到批準(zhǔn)后,安全團(tuán)隊(duì)?wèi)?yīng)該部署無法變更的基礎(chǔ)設(shè)施,在下一個(gè)批準(zhǔn)的修訂版本確定之前,任何更改嘗試都將被忽略。上述很多DevOps工具支持這種設(shè)置。例如,如果Ansible手冊(cè)用于生成服務(wù)器配置,再次運(yùn)行該手冊(cè)將不會(huì)導(dǎo)致任何其他更改或問題。
為了成功整合到開發(fā)和部署過程,安全團(tuán)隊(duì)需要確保團(tuán)隊(duì)成員大部分時(shí)間都在與DevOps團(tuán)隊(duì)協(xié)同工具。這種方法(又是被稱為DevSecOps)可確保在代碼推送到生產(chǎn)或者任何系統(tǒng)在云環(huán)境構(gòu)建之前,所有變更和更新都將得到妥善保護(hù)。
然而,這個(gè)部署管道整合只是整個(gè)流程的一半。安全團(tuán)隊(duì)還需要為云端運(yùn)行的系統(tǒng)和應(yīng)用提供自動(dòng)反饋,這將在之后的文章中進(jìn)行討論。