?譯者 | 陳峻
審校 | 孫淑娟
創(chuàng)新式的開發(fā)對(duì)于碼農(nóng)來說往往是一項(xiàng)艱巨的“修行”任務(wù)。每個(gè)GitLab用戶都或多或少地認(rèn)識(shí)到,源代碼對(duì)于保障DevOps團(tuán)隊(duì)能夠不間斷地開展工作流程的重要性。
有人也許會(huì)問:GitLab可謂最可靠的源代碼管理(SCM)工具提供平臺(tái)之一。它會(huì)發(fā)生什么狀況呢?作為一個(gè)開源的開放性平臺(tái),GitLab不可避免地會(huì)受到諸如:服務(wù)中斷、勒索軟件、以及系統(tǒng)宕機(jī)等各種潛在威脅。這些有的源自GitLab服務(wù)器受到攻擊,有的來自GitLab數(shù)據(jù)庫的自身故障。為此,您和您的團(tuán)隊(duì)?wèi)?yīng)始終為各種災(zāi)難情況提前做好準(zhǔn)備,即:為自己的GitLab數(shù)據(jù)建立一個(gè)強(qiáng)大的備份機(jī)制。同時(shí),您也應(yīng)當(dāng)保證能夠?qū)⒛J(rèn)的備份策略,集成到自己的DevSecOps流程、以及CI/CD管道中。
一、GitLab備份應(yīng)該包含什么?
一旦決定了待備份的GitLab環(huán)境,我們就應(yīng)該確保GitLab的備份內(nèi)容包含了各種GitLab存儲(chǔ)庫和元數(shù)據(jù)。我們可以將此處的“元數(shù)據(jù)”,理解為針對(duì)各類Wiki、問題、問題注釋、部署密鑰、合并請(qǐng)求、LFS(譯者注:Linux from Scratch,一種從網(wǎng)上直接下載源碼,從頭編譯Linux的安裝方式)、標(biāo)簽、Webhook、標(biāo)簽、里程碑、發(fā)布、操作等組件和環(huán)節(jié)的備份。只有備份好了這些,開發(fā)團(tuán)隊(duì)和整個(gè)公司在項(xiàng)目中用到的所有Git存儲(chǔ)庫數(shù)據(jù),才能得到充分的保護(hù)。
二、備份策略的關(guān)鍵特性
如果您已梳理清楚了手頭的工作流程,那么便可以開始制定備份策略了。為了確保工作流程的不間斷,我們應(yīng)該按需進(jìn)行多重備份,從而不僅可以及時(shí)恢復(fù)GitLab數(shù)據(jù),而且能夠滿足審計(jì)、合規(guī)、以及安全性等需求。下面便是一些值得注意的安全性要素:
- AES加密、以及自用的各種動(dòng)態(tài)與靜態(tài)加密密鑰;
- 區(qū)分靈活的、長期的、以及無限期的保存需求;
- 對(duì)舊的、未使用的存儲(chǔ)庫進(jìn)行歸檔的可行性;
- 通過報(bào)告和郵件通知等監(jiān)控方式,來檢查GitLab備份的執(zhí)行情況;
- 對(duì)勒索軟件予以防護(hù);
- 檢查災(zāi)難恢復(fù)技術(shù)是否滿足恢復(fù)目標(biāo)。
上面只是與完善備份策略相關(guān)的基本安全方面。如果您想制定GitLab環(huán)境的完整備份計(jì)劃,則需要考慮并構(gòu)建包含各種高級(jí)備份功能的替代性備份策略。
1.3-2-1備份規(guī)則
如果DevOps團(tuán)隊(duì)已經(jīng)為某些源代碼日夜奮戰(zhàn)了許久,那么一旦出現(xiàn)GitLab的中斷或備份失敗,則會(huì)導(dǎo)致他們的成果覆水難收,同時(shí)也會(huì)讓企業(yè)蒙受財(cái)務(wù)上的損失。對(duì)此,我向您介紹一個(gè)3-2-1的“黃金”備用規(guī)則。即:一家公司應(yīng)當(dāng)將3個(gè)備份副本保存在2個(gè)不同的存儲(chǔ)實(shí)例中,并且至少有1個(gè)處于離線。因此,您需要注意備份復(fù)制的相關(guān)問題,以便它能夠協(xié)助您將本機(jī)備份的副本保存到多個(gè)位置,進(jìn)而實(shí)現(xiàn)服務(wù)的冗余和業(yè)務(wù)的連續(xù)性。
當(dāng)然,如果您的DevOps備份軟件具有多存儲(chǔ)兼容性的話,則可以大幅節(jié)省花費(fèi)在軟件上的開銷。目前,AWS S3、Backblaze B2、谷歌云存儲(chǔ)(Google Cloud Storage)、Azure Blob Storage、GitProtect Cloud、以及其他任何與S3、本地或混合兼容的公有云,都可以提供此類兼容性。如果您不清楚的話,請(qǐng)?jiān)儐柲膫浞莘?wù)提供商,以確認(rèn)是否可以充分利用已有的基礎(chǔ)設(shè)施,將代碼數(shù)據(jù)、連同自己的存儲(chǔ)空間,一并備份到不同的目的地處。
2.需無限保留的數(shù)據(jù)
保留期限也是我們?cè)谥贫▊浞葸^程中,需要重點(diǎn)考慮的方面。對(duì)于一些非常重要的GitLab數(shù)據(jù),您可以將其保留期限設(shè)置為5年、10年、甚至是無限期保留。如果您的代碼中包含了個(gè)人隱私數(shù)據(jù),那么其保存期限就需要滿足本地的法律、法規(guī)、以及共同責(zé)任的要求。
3.對(duì)勒索軟件的防護(hù)
備份GitLab數(shù)據(jù)可謂抵御勒索軟件攻擊的最后一道防線。因此,如果您的GitLab備份方案是針對(duì)防范勒索軟件的話,它會(huì)在備份的過程中,對(duì)GitLab數(shù)據(jù)執(zhí)行壓縮和加密,進(jìn)而保證數(shù)據(jù)在其存儲(chǔ)狀態(tài)是不可執(zhí)行的。據(jù)此,即使您的備份數(shù)據(jù)被某些勒索軟件所截獲,也不會(huì)被輕易執(zhí)行或無限量地傳播。此外,在最壞的情況下,就算某些勒索軟件可以加密、修改或刪除已截獲到的數(shù)據(jù),您手頭仍有一個(gè)備份,可方便您根據(jù)確切的時(shí)間點(diǎn),恢復(fù)所需的GitLab副本,進(jìn)而保證您的團(tuán)隊(duì)將在毫無拖延地情況下,繼續(xù)開展項(xiàng)目。
4.給審計(jì)與合規(guī)提供監(jiān)測(cè)報(bào)告
常言道:擁有信息的人正統(tǒng)治著世界。及時(shí)掌握任何有關(guān)GitLab備份本身、備份失敗、以及備份狀態(tài)的信息,可以協(xié)助DevOps團(tuán)隊(duì)厘清他們所碰到的問題,并能夠?qū)浞輸?shù)據(jù)的可用性進(jìn)行實(shí)時(shí)把控。軟件項(xiàng)目團(tuán)隊(duì)往往需要通過Slack通知、數(shù)據(jù)驅(qū)動(dòng)的儀表板、電子郵件通知、以及高級(jí)審計(jì)日志,來跟蹤備份系統(tǒng)的每一項(xiàng)執(zhí)行操作。此類信息不但能夠讓您的團(tuán)隊(duì)受益,而且可以為審計(jì)和安全認(rèn)證等方面,提供詳細(xì)的備份完成情況的報(bào)告。
三、恢復(fù)過程應(yīng)包含哪些?
根據(jù)備份策略,對(duì)GitLab執(zhí)行有效的備份,只是整個(gè)災(zāi)備計(jì)劃的一部分。我們還需要規(guī)劃好能夠盡快恢復(fù)GitLab備份數(shù)據(jù)的策略。也就是說,災(zāi)難恢復(fù)計(jì)劃應(yīng)確保您的業(yè)務(wù)在服務(wù)中斷/宕機(jī)、(非)故意的人為錯(cuò)誤、以及因勒索軟件攻擊而造成數(shù)據(jù)丟失等可能的情況下,仍能保持業(yè)務(wù)的連續(xù)性。
下面是我們?cè)谥贫ɑ謴?fù)策略時(shí),需要仔細(xì)考慮的方面:
- 需要還原的數(shù)據(jù)所處時(shí)間點(diǎn)。
- 存儲(chǔ)庫和選定元數(shù)據(jù)的恢復(fù)程度與數(shù)據(jù)量。
- 用于從存儲(chǔ)庫備份數(shù)據(jù)進(jìn)行恢復(fù)的GitLab帳戶。
- 是否以交叉恢復(fù)的方式,從GitLab恢復(fù)到另一個(gè)Git托管平臺(tái)(如:GitHub或Bitbucket),這在工具之間進(jìn)行遷移時(shí),非常實(shí)用。
- 恢復(fù)到本地設(shè)備的可能性。
在實(shí)踐中,如果您可以將備份和恢復(fù)兩項(xiàng)操作歸并到一個(gè)應(yīng)用之中的話,則可以大幅節(jié)省團(tuán)隊(duì)的時(shí)間。
有了恢復(fù)策略,我們?cè)谟懻撁鎸?duì)GitLab、基礎(chǔ)設(shè)施、以及備份方案出現(xiàn)故障等場(chǎng)景時(shí),咱們的團(tuán)隊(duì)能夠如何準(zhǔn)備:
1、GitLab出現(xiàn)中斷
雖然GitLab是一個(gè)可靠的托管服務(wù)提供平臺(tái),但是發(fā)生中斷的可能性還是存在的。對(duì)此,您既可以將GitLab實(shí)例以.git文件的方式,恢復(fù)到自己的計(jì)算機(jī)上;也可以基于交叉恢復(fù)的方式,直接將GitLab的副本,恢復(fù)到另一個(gè)Git托管平臺(tái)。
2、您的基礎(chǔ)架構(gòu)出現(xiàn)中斷
基于前文提到的3-2-1備份規(guī)則,哪怕您的基礎(chǔ)架構(gòu)出現(xiàn)中斷,您總會(huì)在2處目的地?fù)碛兄?個(gè)備份副本,而且其中1個(gè)處于離線狀態(tài)。因此,您可以從任何一個(gè)時(shí)間點(diǎn)獲得備份副本,并輕松地恢復(fù)GitLab存儲(chǔ)庫及其元數(shù)據(jù)。
3、備份方案本身出現(xiàn)故障
在決定使用第三方的備份方案之前,您有必要確認(rèn)其已為潛在的中斷做好了準(zhǔn)備,并且可以在真正發(fā)生時(shí),為您提供適當(dāng)、可靠的數(shù)據(jù)恢復(fù)支持。例如:如果它們能夠與您共享在本地應(yīng)用中安裝的權(quán)限,那么一旦其SaaS環(huán)境出現(xiàn)故障,您便可以輕松地從本地應(yīng)用中,直接訪問到自己的數(shù)據(jù)。
四、小結(jié)
綜上所述,為了應(yīng)對(duì)GitLab可能出現(xiàn)的中斷,您既可以自行管理備份過程,也可以編寫專門的GitLab備份腳本并制作快照的命令,還可以選擇第三方備份軟件的自動(dòng)備份服務(wù)。同時(shí),您需要實(shí)現(xiàn)設(shè)定好在災(zāi)難發(fā)生時(shí),執(zhí)行哪些恢復(fù)流程,讓整個(gè)GitLab環(huán)境盡快可供訪問,以確保團(tuán)隊(duì)工作的連續(xù)性。
原文鏈接:https://dzone.com/articles/devops-security-which-gitlab-backup-best-practices
譯者介紹:
陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn)。?