本書(shū)通過(guò)描述一家大型互聯(lián)網(wǎng)企業(yè)和一家大型傳統(tǒng)銀行的DevSecOps轉(zhuǎn)型的過(guò)程,幫助讀者淺顯易懂并且有代入感地了解如何將DevSecOps在企業(yè)內(nèi)部落地和實(shí)踐;诟黝(lèi)行業(yè)特點(diǎn)的DevSecOps實(shí)施與落地方法,是本書(shū)的主要技術(shù)要點(diǎn)。
為什么要寫(xiě)這本書(shū)
12年前,DevOps(研發(fā)運(yùn)維一體化)作為精益和敏捷之后的另一個(gè)全新的方法論被提出,并且走進(jìn)了軟件開(kāi)發(fā)的世界。作為DevOps的核心理念,持續(xù)交付幫助企業(yè)通過(guò)自動(dòng)化和更好的團(tuán)隊(duì)協(xié)作實(shí)現(xiàn)了快速交付。之后出現(xiàn)的微服務(wù)讓DevOps擺脫了單一架構(gòu)模式下各個(gè)模塊的依賴(lài)關(guān)系,從而使得交付速度更上一層樓。而云原生的出現(xiàn)不僅降低了基礎(chǔ)設(shè)施的成本,也使得系統(tǒng)的運(yùn)維和運(yùn)營(yíng)更加穩(wěn)定。經(jīng)過(guò)過(guò)去10多年的發(fā)展,企業(yè)的DevOps已經(jīng)逐漸成熟。大家突然發(fā)現(xiàn),除了速度和質(zhì)量外,安全對(duì)于企業(yè)來(lái)說(shuō)也同等重要。而且傳統(tǒng)應(yīng)用安全保護(hù)模式已經(jīng)不適應(yīng)DevOps模式下的快速交付了,甚至逐漸成為快速交付繼續(xù)進(jìn)階的瓶頸。為了解決這個(gè)問(wèn)題,2012年就被提出來(lái)的DevSecOps于2017年開(kāi)始在世界范圍內(nèi)逐漸流行起來(lái)。
然而,DevSecOps橫跨研發(fā)效能和安全兩個(gè)領(lǐng)域,過(guò)去這種復(fù)合型人才幾乎不存在。從事研發(fā)效能的專(zhuān)家將安全引入開(kāi)發(fā)流程的各個(gè)階段,以及從事應(yīng)用安全的專(zhuān)家將安全在開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行落地,都需要額外的技能和大膽的嘗試。由于實(shí)踐DevSecOps的挑戰(zhàn)巨大和難度極高,雖然經(jīng)歷了三四年的發(fā)展,不僅國(guó)外DevSecOps相關(guān)的書(shū)籍甚少,國(guó)內(nèi)至今仍無(wú)一本全面并且系統(tǒng)地介紹DevSecOps落地實(shí)踐的書(shū)籍。
自從2018年在匯豐銀行內(nèi)部開(kāi)始實(shí)踐DevSecOps,并于2019年年初作為演講嘉賓參加日內(nèi)瓦DevOpsDays以來(lái),截至2020年,我已經(jīng)在國(guó)內(nèi)外20多場(chǎng)技術(shù)峰會(huì)、論壇以及社區(qū)分享過(guò)自己在國(guó)際大型銀行和國(guó)內(nèi)大型互聯(lián)網(wǎng)公司實(shí)踐DevSecOps的經(jīng)驗(yàn)。在有了一定的積累之后,為了讓更多正迷茫于如何落地DevSecOps的企業(yè)和對(duì)DevSecOps感興趣的個(gè)人有相關(guān)的經(jīng)驗(yàn)可以參考,從2020年年末開(kāi)始,我聯(lián)合騰訊、百度等多家互聯(lián)網(wǎng)公司和匯豐銀行等金融行業(yè)的研發(fā)效能和應(yīng)用安全領(lǐng)域的DevSecOps實(shí)踐者,一起計(jì)劃編寫(xiě)國(guó)內(nèi)本DevSecOps相關(guān)書(shū)籍,希望讓更多人受益,尤其是對(duì)DevSecOps這種全新的理念和方法論還處于迷茫狀態(tài)的人們。
本書(shū)特色
本書(shū)采取了與大部分技術(shù)書(shū)不同的編寫(xiě)方式。書(shū)中杜撰了一個(gè)簡(jiǎn)單的故事,講述了兩位發(fā)小,作為研發(fā)效能和安全專(zhuān)家在比較有代表性的互聯(lián)網(wǎng)公司(灰石網(wǎng)絡(luò))和金融企業(yè)(德富銀行)落地DevSecOps的經(jīng)歷。通過(guò)故事里實(shí)踐DevSecOps過(guò)程中拋出的問(wèn)題和痛點(diǎn),引出各章的相關(guān)內(nèi)容和解決方案,讓讀者更有實(shí)際工作場(chǎng)景的代入感。
本書(shū)的作者都是擁有DevSecOps相關(guān)工具開(kāi)發(fā)或者落地實(shí)踐經(jīng)驗(yàn)的資深專(zhuān)家和高級(jí)管理者,卻又來(lái)自不同的領(lǐng)域(DevOps和應(yīng)用安全)和不同的行業(yè)(互聯(lián)網(wǎng)和金融)。由于DevSecOps本身是跨越軟件開(kāi)發(fā)、研發(fā)效能和應(yīng)用安全等不同領(lǐng)域的全新方法論,并且在不同行業(yè)的落地目標(biāo)和方式也有所不同,因此本書(shū)的作者群體正好可以從不同角度對(duì)DevSecOps的實(shí)踐和落地進(jìn)行全方位覆蓋。其目標(biāo)是不僅使來(lái)自不同行業(yè)的開(kāi)發(fā)和DevOps背景的讀者了解DevSecOps相關(guān)安全理念和實(shí)踐,也使來(lái)自不同行業(yè)信息安全背景的讀者了解如何進(jìn)行安全前置,終將安全意識(shí)和能力落地開(kāi)發(fā)團(tuán)隊(duì)。
讀者對(duì)象
研發(fā)效能工程師
研發(fā)效能架構(gòu)師
研發(fā)效能管理人員
敏捷和研發(fā)效能教練
應(yīng)用安全工程師
應(yīng)用安全架構(gòu)師
應(yīng)用安全管理人員
開(kāi)發(fā)、測(cè)試和運(yùn)維人員
對(duì)研發(fā)效能和應(yīng)用安全感興趣的其他人員
如何閱讀本書(shū)
本書(shū)共分為9章。其中,第3~7章為本書(shū)的重點(diǎn),如果你沒(méi)有充足的時(shí)間完成全書(shū)的閱讀,則可以選擇性地進(jìn)行重點(diǎn)章節(jié)的閱讀。
第1章由馬松松、周紀(jì)海和楊偉強(qiáng)編寫(xiě),簡(jiǎn)單介紹了DevOps的理念和發(fā)展史,以及DevOps到DevSecOps的演進(jìn),接著詳細(xì)介紹了實(shí)踐DevSecOps的理論基礎(chǔ)和指導(dǎo)原則,后分析了互聯(lián)網(wǎng)和金融行業(yè)推動(dòng)DevSecOps的動(dòng)機(jī)和目標(biāo)。
第2章由周紀(jì)海和周一帆編寫(xiě),對(duì)DevSecOps行業(yè)和企業(yè)現(xiàn)狀進(jìn)行了調(diào)研和分析。關(guān)于DevSecOps解決方案,本章從流程和方法論、技術(shù)、文化和組織,以及DevSecOps體系建設(shè)層面進(jìn)行了詳細(xì)的介紹和討論。
第3章由馬松松和周紀(jì)海編寫(xiě),詳細(xì)介紹了在軟件開(kāi)發(fā)階段DevSecOps通過(guò)安全左移帶來(lái)的開(kāi)發(fā)人員安全意識(shí)和能力提升、安全編碼、代碼質(zhì)量,以及如何通過(guò)持續(xù)集成流水線(xiàn)實(shí)現(xiàn)安全掃描自動(dòng)化等內(nèi)容。
第4章由程勝聰和周紀(jì)海編寫(xiě),詳細(xì)介紹和討論了持續(xù)測(cè)試對(duì)于提高測(cè)試效能、實(shí)現(xiàn)自動(dòng)化測(cè)試的重要性,以及安全左移和右移后對(duì)測(cè)試階段的影響。另外,本章對(duì)融入測(cè)試階段的動(dòng)態(tài)安全測(cè)試和交互式安全測(cè)試也進(jìn)行了詳細(xì)的介紹。
第5章由周紀(jì)海和周一帆編寫(xiě),詳細(xì)介紹了一個(gè)完整的業(yè)務(wù)需求管理涵蓋的各個(gè)方面:需求收集和過(guò)濾、需求分析、需求排期、需求描述、需求拆分和需求評(píng)審等。另外,本章也詳細(xì)介紹了如何基于變更分類(lèi)進(jìn)行需求安全管理和評(píng)審的融入。
第6章由周一帆和陳亞平編寫(xiě),詳細(xì)介紹了DevOps快速交付模式下微服務(wù)架構(gòu)的拆分和設(shè)計(jì)原則、微服務(wù)改造和開(kāi)發(fā)框架。接著詳細(xì)介紹了架構(gòu)安全評(píng)估體系下的不同實(shí)現(xiàn)模式(快速檢查表、威脅建模以及合規(guī)檢查等),其中尤其重點(diǎn)介紹了完整風(fēng)險(xiǎn)評(píng)估——威脅建模。
第7章由周一帆、周紀(jì)海和楊偉強(qiáng)編寫(xiě),詳細(xì)介紹了運(yùn)維和線(xiàn)上運(yùn)營(yíng)階段DevSecOps包含的各方面內(nèi)容:
序
前言
第1章 DevSecOps的演進(jìn)與落地思考1
1.1 DevOps簡(jiǎn)介4
1.1.1 DevOps發(fā)展簡(jiǎn)史5
1.1.2 DevOps理念6
1.2 DevSecOps簡(jiǎn)介7
1.2.1 從DevOps到DevSecOps7
1.2.2 從SDL到DevSecOps11
1.2.3 DevSecOps的指導(dǎo)原則14
1.2.4 DevSecOps實(shí)踐17
1.3 互聯(lián)網(wǎng)行業(yè)推動(dòng)DevSecOps的動(dòng)機(jī)與目標(biāo) 21
1.4 金融行業(yè)推動(dòng)DevSecOps的動(dòng)機(jī)與目標(biāo) 22
1.5 總結(jié)23
第2章 DevSecOps的實(shí)施解決方案和體系建設(shè)24
2.1 DevSecOps現(xiàn)狀調(diào)研26
2.1.1 DevSecOps的行業(yè)調(diào)研26
2.1.2 企業(yè)現(xiàn)狀調(diào)研29
2.2 流程和方法論:敏捷開(kāi)發(fā)與CI/CD34
2.2.1 敏捷開(kāi)發(fā)34
2.2.2 持續(xù)集成、持續(xù)交付和持續(xù)部署40
2.3 技術(shù):工具與自動(dòng)化41
2.3.1 項(xiàng)目管理工具41
2.3.2 源代碼管理工具42
2.3.3 靜態(tài)代碼掃描工具42
2.3.4 靜態(tài)應(yīng)用安全測(cè)試工具43
2.3.5 持續(xù)集成工具44
2.3.6 構(gòu)建工具44
2.3.7 制品管理工具45
2.3.8 第三方安全掃描工具45
2.3.9 自動(dòng)化測(cè)試工具45
2.3.10 動(dòng)態(tài)安全測(cè)試工具46
2.3.11 交互式安全測(cè)試工具46
2.3.12 自動(dòng)化配置/發(fā)布工具46
2.3.13 日志分析工具47
2.3.14 監(jiān)控工具47
2.3.15 DevSecOps工具鏈48
2.4 文化與組織結(jié)構(gòu)50
2.4.1 DevSecOps的文化和挑戰(zhàn)50
2.4.2 DevSecOps的組織結(jié)構(gòu)和角色50
2.5 DevSecOps框架與模型的建立52
2.5.1 DevSecOps的運(yùn)營(yíng)模型 52
2.5.2 DevSecOps的實(shí)現(xiàn)模型54
2.5.3 DevSecOps的成熟度模型54
2.6 總結(jié)56
第3章 DevSecOps轉(zhuǎn)型—從研發(fā)入手57
3.1 安全意識(shí)和能力提升60
3.1.1 安全意識(shí)61
3.1.2 安全能力61
3.1.3 隱私合規(guī)63
3.2 安全編碼64
3.2.1 默認(rèn)安全64
3.2.2 安全編碼規(guī)范64
3.2.3 安全函數(shù)庫(kù)和安全組件65
3.2.4 框架安全65
3.3 源代碼管理和安全66
3.3.1 源代碼安全管理67
3.3.2 分支策略67
3.3.3 代碼評(píng)審74
3.4 持續(xù)集成75
3.4.1 編譯構(gòu)建和開(kāi)發(fā)環(huán)境安全76
3.4.2 持續(xù)集成流水線(xiàn)76
3.4.3 安全能力在流水線(xiàn)上的融入78
3.5 代碼質(zhì)量和安全分析79
3.5.1 靜態(tài)代碼質(zhì)量分析79
3.5.2 靜態(tài)應(yīng)用安全測(cè)試81
3.5.3 軟件成分分析83
3.6 制品管理及安全85
3.7 總結(jié)87
第4章 持續(xù)測(cè)試和安全88
4.1 持續(xù)測(cè)試—DevOps時(shí)代的高效測(cè)試之鑰90
4.1.1 測(cè)試效率面臨著巨大挑戰(zhàn)91
4.1.2 什么是持續(xù)測(cè)試92
4.1.3 如何實(shí)現(xiàn)持續(xù)測(cè)試92
4.2 測(cè)試執(zhí)行提效之自動(dòng)化測(cè)試93
4.2.1 分層的自動(dòng)化測(cè)試策略93
4.2.2 單元測(cè)試95
4.2.3 接口測(cè)試98
4.2.4 UI測(cè)試100
4.2.5 其他自動(dòng)化測(cè)試101
4.3 測(cè)試執(zhí)行提效之精準(zhǔn)測(cè)試101
4.4 測(cè)試流程提效:迭代內(nèi)測(cè)試102
4.4.1 持續(xù)測(cè)試帶來(lái)流程上的變革要求102
4.4.2 如何實(shí)踐迭代內(nèi)測(cè)試103
4.5 持續(xù)測(cè)試下的“左移”和“右移”104
4.5.1 測(cè)試左移104
4.5.2 測(cè)試右移106
4.5.3 “左移”“右移”不等于“去測(cè)試化”107
4.6 應(yīng)用安全測(cè)試左移108
4.6.1 動(dòng)態(tài)應(yīng)用安全測(cè)試108
4.6.2 交互式應(yīng)用安全測(cè)試112
4.7 DevSecOps影響著測(cè)試的方方面面116
4.7.1 測(cè)試分類(lèi)116
4.7.2 質(zhì)量度量118
4.7.3 組織架構(gòu)120
4.7.4 團(tuán)隊(duì)文化121
4.8 總結(jié)122
第5章 業(yè)務(wù)與安全需求管理123
5.1 業(yè)務(wù)功能需求管理125
5.1.1 需求的收集與篩選126
5.1.2 需求的分析127
5.1.3 需求排期130
5.1.4 需求描述和文檔130
5.1.5 需求拆分132
5.1.6 需求評(píng)審132
5.1.7 需求狀態(tài)管理133
5.1.8 需求管理工具134
5.1.9 臨時(shí)/緊急需求134
5.2 安全需求管理135
5.2.1 需求的安全分類(lèi)136
5.2.2 需求的安全評(píng)審138
5.3 總結(jié)143
第6章 進(jìn)一步左移—設(shè)計(jì)與架構(gòu)144
6.1 為什么需要微服務(wù)架構(gòu)147
6.1.1 單體架構(gòu)的局限性148
6.1.2 微服務(wù)架構(gòu)的優(yōu)勢(shì)149
6.1.3 微服務(wù)與DevOps的關(guān)系149
6.1.4 微服務(wù)化的實(shí)施路線(xiàn)151
6.2 微服務(wù)拆分與設(shè)計(jì)151
6.2.1 微服務(wù)拆分原則151
6.2.2 微服務(wù)設(shè)計(jì)原則152
6.2.3 微服務(wù)拆分方法152
6.3 微服務(wù)開(kāi)發(fā)與組合:微服務(wù)開(kāi)發(fā)框架154
6.3.1 Spring Cloud微服務(wù)架構(gòu)154
6.3.2 Service Mesh微服務(wù)架構(gòu)157
6.4 微服務(wù)改造:?jiǎn)误w系統(tǒng)重構(gòu)160
6.4.1 改造策略160
6.4.2 微服務(wù)改造的關(guān)鍵要素161
6.4.3 微服務(wù)改造的實(shí)施步驟161
6.5 安全設(shè)計(jì)與架構(gòu)安全162
6.5.1 安全風(fēng)險(xiǎn)評(píng)估體系的建立162
6.5.2 項(xiàng)目的分類(lèi)定義164
6.6 快速檢查表的使用166
6.7 完整風(fēng)險(xiǎn)評(píng)估—威脅建模169
6.7.1 識(shí)別資產(chǎn)170
6.7.2 創(chuàng)建架構(gòu)設(shè)計(jì)概覽171
6.7.3 分析應(yīng)用系統(tǒng)171
6.7.4 識(shí)別威脅172
6.7.5 記錄威脅175
6.7.6