本書通過描述一家大型互聯(lián)網(wǎng)企業(yè)和一家大型傳統(tǒng)銀行的DevSecOps轉(zhuǎn)型的過程,幫助讀者淺顯易懂并且有代入感地了解如何將DevSecOps在企業(yè)內(nèi)部落地和實(shí)踐;诟黝愋袠I(yè)特點(diǎn)的DevSecOps實(shí)施與落地方法,是本書的主要技術(shù)要點(diǎn)。
為什么要寫這本書
12年前,DevOps(研發(fā)運(yùn)維一體化)作為精益和敏捷之后的另一個(gè)全新的方法論被提出,并且走進(jìn)了軟件開發(fā)的世界。作為DevOps的核心理念,持續(xù)交付幫助企業(yè)通過自動(dòng)化和更好的團(tuán)隊(duì)協(xié)作實(shí)現(xiàn)了快速交付。之后出現(xiàn)的微服務(wù)讓DevOps擺脫了單一架構(gòu)模式下各個(gè)模塊的依賴關(guān)系,從而使得交付速度更上一層樓。而云原生的出現(xiàn)不僅降低了基礎(chǔ)設(shè)施的成本,也使得系統(tǒng)的運(yùn)維和運(yùn)營更加穩(wěn)定。經(jīng)過過去10多年的發(fā)展,企業(yè)的DevOps已經(jīng)逐漸成熟。大家突然發(fā)現(xiàn),除了速度和質(zhì)量外,安全對(duì)于企業(yè)來說也同等重要。而且傳統(tǒng)應(yīng)用安全保護(hù)模式已經(jīng)不適應(yīng)DevOps模式下的快速交付了,甚至逐漸成為快速交付繼續(xù)進(jìn)階的瓶頸。為了解決這個(gè)問題,2012年就被提出來的DevSecOps于2017年開始在世界范圍內(nèi)逐漸流行起來。
然而,DevSecOps橫跨研發(fā)效能和安全兩個(gè)領(lǐng)域,過去這種復(fù)合型人才幾乎不存在。從事研發(fā)效能的專家將安全引入開發(fā)流程的各個(gè)階段,以及從事應(yīng)用安全的專家將安全在開發(fā)團(tuán)隊(duì)進(jìn)行落地,都需要額外的技能和大膽的嘗試。由于實(shí)踐DevSecOps的挑戰(zhàn)巨大和難度極高,雖然經(jīng)歷了三四年的發(fā)展,不僅國外DevSecOps相關(guān)的書籍甚少,國內(nèi)至今仍無一本全面并且系統(tǒng)地介紹DevSecOps落地實(shí)踐的書籍。
自從2018年在匯豐銀行內(nèi)部開始實(shí)踐DevSecOps,并于2019年年初作為演講嘉賓參加日內(nèi)瓦DevOpsDays以來,截至2020年,我已經(jīng)在國內(nèi)外20多場技術(shù)峰會(huì)、論壇以及社區(qū)分享過自己在國際大型銀行和國內(nèi)大型互聯(lián)網(wǎng)公司實(shí)踐DevSecOps的經(jīng)驗(yàn)。在有了一定的積累之后,為了讓更多正迷茫于如何落地DevSecOps的企業(yè)和對(duì)DevSecOps感興趣的個(gè)人有相關(guān)的經(jīng)驗(yàn)可以參考,從2020年年末開始,我聯(lián)合騰訊、百度等多家互聯(lián)網(wǎng)公司和匯豐銀行等金融行業(yè)的研發(fā)效能和應(yīng)用安全領(lǐng)域的DevSecOps實(shí)踐者,一起計(jì)劃編寫國內(nèi)本DevSecOps相關(guān)書籍,希望讓更多人受益,尤其是對(duì)DevSecOps這種全新的理念和方法論還處于迷茫狀態(tài)的人們。
本書特色
本書采取了與大部分技術(shù)書不同的編寫方式。書中杜撰了一個(gè)簡單的故事,講述了兩位發(fā)小,作為研發(fā)效能和安全專家在比較有代表性的互聯(lián)網(wǎng)公司(灰石網(wǎng)絡(luò))和金融企業(yè)(德富銀行)落地DevSecOps的經(jīng)歷。通過故事里實(shí)踐DevSecOps過程中拋出的問題和痛點(diǎn),引出各章的相關(guān)內(nèi)容和解決方案,讓讀者更有實(shí)際工作場景的代入感。
本書的作者都是擁有DevSecOps相關(guān)工具開發(fā)或者落地實(shí)踐經(jīng)驗(yàn)的資深專家和高級(jí)管理者,卻又來自不同的領(lǐng)域(DevOps和應(yīng)用安全)和不同的行業(yè)(互聯(lián)網(wǎng)和金融)。由于DevSecOps本身是跨越軟件開發(fā)、研發(fā)效能和應(yīng)用安全等不同領(lǐng)域的全新方法論,并且在不同行業(yè)的落地目標(biāo)和方式也有所不同,因此本書的作者群體正好可以從不同角度對(duì)DevSecOps的實(shí)踐和落地進(jìn)行全方位覆蓋。其目標(biāo)是不僅使來自不同行業(yè)的開發(fā)和DevOps背景的讀者了解DevSecOps相關(guān)安全理念和實(shí)踐,也使來自不同行業(yè)信息安全背景的讀者了解如何進(jìn)行安全前置,終將安全意識(shí)和能力落地開發(fā)團(tuán)隊(duì)。
讀者對(duì)象
研發(fā)效能工程師
研發(fā)效能架構(gòu)師
研發(fā)效能管理人員
敏捷和研發(fā)效能教練
應(yīng)用安全工程師
應(yīng)用安全架構(gòu)師
應(yīng)用安全管理人員
開發(fā)、測試和運(yùn)維人員
對(duì)研發(fā)效能和應(yīng)用安全感興趣的其他人員
如何閱讀本書
本書共分為9章。其中,第3~7章為本書的重點(diǎn),如果你沒有充足的時(shí)間完成全書的閱讀,則可以選擇性地進(jìn)行重點(diǎn)章節(jié)的閱讀。
第1章由馬松松、周紀(jì)海和楊偉強(qiáng)編寫,簡單介紹了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ì)海和周一帆編寫,對(duì)DevSecOps行業(yè)和企業(yè)現(xiàn)狀進(jìn)行了調(diào)研和分析。關(guān)于DevSecOps解決方案,本章從流程和方法論、技術(shù)、文化和組織,以及DevSecOps體系建設(shè)層面進(jìn)行了詳細(xì)的介紹和討論。
第3章由馬松松和周紀(jì)海編寫,詳細(xì)介紹了在軟件開發(fā)階段DevSecOps通過安全左移帶來的開發(fā)人員安全意識(shí)和能力提升、安全編碼、代碼質(zhì)量,以及如何通過持續(xù)集成流水線實(shí)現(xiàn)安全掃描自動(dòng)化等內(nèi)容。
第4章由程勝聰和周紀(jì)海編寫,詳細(xì)介紹和討論了持續(xù)測試對(duì)于提高測試效能、實(shí)現(xiàn)自動(dòng)化測試的重要性,以及安全左移和右移后對(duì)測試階段的影響。另外,本章對(duì)融入測試階段的動(dòng)態(tài)安全測試和交互式安全測試也進(jìn)行了詳細(xì)的介紹。
第5章由周紀(jì)海和周一帆編寫,詳細(xì)介紹了一個(gè)完整的業(yè)務(wù)需求管理涵蓋的各個(gè)方面:需求收集和過濾、需求分析、需求排期、需求描述、需求拆分和需求評(píng)審等。另外,本章也詳細(xì)介紹了如何基于變更分類進(jìn)行需求安全管理和評(píng)審的融入。
第6章由周一帆和陳亞平編寫,詳細(xì)介紹了DevOps快速交付模式下微服務(wù)架構(gòu)的拆分和設(shè)計(jì)原則、微服務(wù)改造和開發(fā)框架。接著詳細(xì)介紹了架構(gòu)安全評(píng)估體系下的不同實(shí)現(xiàn)模式(快速檢查表、威脅建模以及合規(guī)檢查等),其中尤其重點(diǎn)介紹了完整風(fēng)險(xiǎn)評(píng)估——威脅建模。
第7章由周一帆、周紀(jì)海和楊偉強(qiáng)編寫,詳細(xì)介紹了運(yùn)維和線上運(yùn)營階段DevSecOps包含的各方面內(nèi)容:
序
前言
第1章 DevSecOps的演進(jìn)與落地思考1
1.1 DevOps簡介4
1.1.1 DevOps發(fā)展簡史5
1.1.2 DevOps理念6
1.2 DevSecOps簡介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 流程和方法論:敏捷開發(fā)與CI/CD34
2.2.1 敏捷開發(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)用安全測試工具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)化測試工具45
2.3.10 動(dòng)態(tài)安全測試工具46
2.3.11 交互式安全測試工具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)營模型 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ù)庫和安全組件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)建和開發(fā)環(huán)境安全76
3.4.2 持續(xù)集成流水線76
3.4.3 安全能力在流水線上的融入78
3.5 代碼質(zhì)量和安全分析79
3.5.1 靜態(tài)代碼質(zhì)量分析79
3.5.2 靜態(tài)應(yīng)用安全測試81
3.5.3 軟件成分分析83
3.6 制品管理及安全85
3.7 總結(jié)87
第4章 持續(xù)測試和安全88
4.1 持續(xù)測試—DevOps時(shí)代的高效測試之鑰90
4.1.1 測試效率面臨著巨大挑戰(zhàn)91
4.1.2 什么是持續(xù)測試92
4.1.3 如何實(shí)現(xiàn)持續(xù)測試92
4.2 測試執(zhí)行提效之自動(dòng)化測試93
4.2.1 分層的自動(dòng)化測試策略93
4.2.2 單元測試95
4.2.3 接口測試98
4.2.4 UI測試100
4.2.5 其他自動(dòng)化測試101
4.3 測試執(zhí)行提效之精準(zhǔn)測試101
4.4 測試流程提效:迭代內(nèi)測試102
4.4.1 持續(xù)測試帶來流程上的變革要求102
4.4.2 如何實(shí)踐迭代內(nèi)測試103
4.5 持續(xù)測試下的“左移”和“右移”104
4.5.1 測試左移104
4.5.2 測試右移106
4.5.3 “左移”“右移”不等于“去測試化”107
4.6 應(yīng)用安全測試左移108
4.6.1 動(dòng)態(tài)應(yīng)用安全測試108
4.6.2 交互式應(yīng)用安全測試112
4.7 DevSecOps影響著測試的方方面面116
4.7.1 測試分類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 需求的安全分類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)勢149
6.1.3 微服務(wù)與DevOps的關(guān)系149
6.1.4 微服務(wù)化的實(shí)施路線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ù)開發(fā)與組合:微服務(wù)開發(fā)框架154
6.3.1 Spring Cloud微服務(wù)架構(gòu)154
6.3.2 Service Mesh微服務(wù)架構(gòu)157
6.4 微服務(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)目的分類定義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