軟件開(kāi)發(fā)中的密碼與密鑰管理
讓我們深入探討 DevOps 和 DevSecOps 管道中密碼密鑰管理的各個(gè)方面。
當(dāng)今的數(shù)字業(yè)務(wù)有望以閃電般的速度創(chuàng)新、執(zhí)行和發(fā)布產(chǎn)品。自動(dòng)化工具的廣泛采用,加上 DevOps 和DevSecOps 工具,有助于這些企業(yè)實(shí)現(xiàn)更高的開(kāi)發(fā)速度和更快的反饋循環(huán)。這最終有助于縮短發(fā)布周期并以迭代方式提高產(chǎn)品質(zhì)量。
盡管向微服務(wù)和容器化應(yīng)用程序的轉(zhuǎn)變以及開(kāi)源的采用正在幫助開(kāi)發(fā)人員更快地交付產(chǎn)品,但它們也帶來(lái)了與合規(guī)性和安全性相關(guān)的挑戰(zhàn)。根據(jù) 1Password 的Hidden In Plain Sight 報(bào)告,企業(yè)中的 DevOps 和 IT 團(tuán)隊(duì)不斷面臨由機(jī)密泄露、機(jī)密共享不安全和手動(dòng)機(jī)密管理等帶來(lái)的挑戰(zhàn)。
管理大型項(xiàng)目的 API 密鑰、密碼、加密密鑰等機(jī)密信息非常復(fù)雜。讓我們?cè)诒疚闹猩钊胩接憴C(jī)密管理的各個(gè)方面。
什么是密碼密鑰管理?
簡(jiǎn)而言之,密碼是非人類(lèi)特權(quán)憑證,為開(kāi)發(fā)人員提供訪問(wèn)應(yīng)用程序、容器等資源的權(quán)限。類(lèi)似于密碼管理,秘密管理是一種將秘密(例如,訪問(wèn)令牌、密碼、API 密鑰等)存儲(chǔ)在具有更嚴(yán)格訪問(wèn)控制的安全環(huán)境中的做法。
隨著應(yīng)用程序的復(fù)雜性和規(guī)模隨著時(shí)間的推移而增長(zhǎng),管理密碼可能會(huì)變得混亂。此外,可能會(huì)出現(xiàn)跨技術(shù)堆棧的不同塊共享秘密的情況。這可能會(huì)造成嚴(yán)重的安全威脅,因?yàn)樗鼤?huì)為惡意行為者打開(kāi)后門(mén)來(lái)訪問(wèn)您的應(yīng)用程序。
密碼管理確保敏感信息永遠(yuǎn)不會(huì)被硬編碼,并且只能以加密格式提供。與 RBAC(基于角色的訪問(wèn)控制)一起安全訪問(wèn)敏感數(shù)據(jù)是密碼管理的秘訣。
密碼密鑰管理的挑戰(zhàn)
在許多情況下,開(kāi)發(fā)人員可能不小心在他們的代碼或配置文件中使用了硬編碼的純文本格式憑證。如果將包含機(jī)密的相應(yīng)文件推送到 GitHub(或任何其他流行的代碼托管平臺(tái))上指定的公共存儲(chǔ)庫(kù),對(duì)業(yè)務(wù)的影響可能會(huì)很大。
多云基礎(chǔ)設(shè)施、容器化應(yīng)用程序、IoT/IIoT、CI/CD 和類(lèi)似進(jìn)步所提供的好處可以通過(guò)同時(shí)關(guān)注秘密的有效管理來(lái)最大限度地利用。對(duì)開(kāi)發(fā)和 DevOps 團(tuán)隊(duì)進(jìn)行應(yīng)用程序安全教育是在團(tuán)隊(duì)中建立安全第一文化的最重要步驟。
以下是 DevOps 和 DevSecOps 團(tuán)隊(duì)在管理機(jī)密時(shí)面臨的主要挑戰(zhàn):
密碼密鑰蔓延
這種情況通常發(fā)生在團(tuán)隊(duì)(和/或組織)的密碼分布在整個(gè)組織中時(shí)。數(shù)字優(yōu)先的組織越來(lái)越多地使用容器和基于云的工具來(lái)提高開(kāi)發(fā)人員的速度、節(jié)省成本并加快發(fā)布速度。同樣的原則也適用于基于物聯(lián)網(wǎng)應(yīng)用程序的開(kāi)發(fā)和測(cè)試。
根據(jù)應(yīng)用程序的規(guī)模和復(fù)雜性,機(jī)密很可能分布在:
- 基于容器化微服務(wù)的應(yīng)用程序(例如,Kubernetes、OpenShift、Nomad)
- 自動(dòng)化 E2E 測(cè)試/跟蹤平臺(tái)(例如,Prometheus、Graphite)
- 內(nèi)部開(kāi)發(fā)的工具/流程
- 應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)
- DevOps 工具鏈
以上列表中的項(xiàng)目因應(yīng)用程序的規(guī)模、大小和復(fù)雜性而異。提供 RBAC、使用強(qiáng)旋轉(zhuǎn)密碼和避免密碼共享是團(tuán)隊(duì)/組織內(nèi)每個(gè)級(jí)別都必須遵循的一些簡(jiǎn)單實(shí)踐。
云開(kāi)發(fā)人員和測(cè)試工具的激增
無(wú)論項(xiàng)目的大小和規(guī)模如何,開(kāi)發(fā)團(tuán)隊(duì)都希望最大限度地利用 GCP(谷歌云平臺(tái))、Microsoft Azure、AWS(亞馬遜網(wǎng)絡(luò)服務(wù))、Kubernetes 等云開(kāi)發(fā)工具。
云工具肯定會(huì)加快與開(kāi)發(fā)和測(cè)試相關(guān)的流程,但必須在使用它們的同時(shí)將安全實(shí)踐放在首位。用于訪問(wèn)相應(yīng)云平臺(tái)的密鑰(例如 AWS 密鑰)的任何泄露都可能導(dǎo)致經(jīng)濟(jì)損失。
在存儲(chǔ)庫(kù)中公開(kāi)公開(kāi)的 AWS 憑證
鑒于如此多的風(fēng)險(xiǎn),DevOps 和開(kāi)發(fā)團(tuán)隊(duì)必須確保任何類(lèi)型的密鑰在公共領(lǐng)域(例如 GitHub 存儲(chǔ)庫(kù))中都不會(huì)以人類(lèi)可讀的格式提供。專(zhuān)注于社區(qū)主導(dǎo)增長(zhǎng) (CLG) 以宣傳其產(chǎn)品或開(kāi)發(fā)人員工具的組織需要確保其用戶(hù)不會(huì)將任何密鑰公開(kāi)遺漏!如果密鑰可公開(kāi)訪問(wèn),黑客可能出于惡意原因利用您的平臺(tái)。
用于管理機(jī)密的手動(dòng)流程、使用第三方資源(例如 API)時(shí)的數(shù)據(jù)安全以及安全鏡頭的端到端可見(jiàn)性是組織在機(jī)密管理方面面臨的其他挑戰(zhàn)。
密碼密鑰管理最佳實(shí)踐
在安全管理機(jī)密方面沒(méi)有一種放之四海而皆準(zhǔn)的方法,因?yàn)檫@在很大程度上取決于基礎(chǔ)設(shè)施、產(chǎn)品要求和其他此類(lèi)變化因素。
撇開(kāi)變量不談,這里有一些關(guān)于高效和可擴(kuò)展的秘密管理的最佳實(shí)踐:
使用 RBAC(基于角色的訪問(wèn)控制)
每個(gè)項(xiàng)目和組織都有敏感數(shù)據(jù)和資源,必須只能由受信任的用戶(hù)和應(yīng)用程序訪問(wèn)。系統(tǒng)中的任何新用戶(hù)都必須分配默認(rèn)權(quán)限(即最小訪問(wèn)控制)。提升的權(quán)限必須僅對(duì)項(xiàng)目或組織中的少數(shù)成員可用。
管理員(或超級(jí)管理員)必須有權(quán)根據(jù)需要添加或撤銷(xiāo)其他成員的權(quán)限。權(quán)限升級(jí)也必須根據(jù)需要進(jìn)行,并且只能在有限的時(shí)間內(nèi)進(jìn)行。在授予/撤銷(xiāo)權(quán)限時(shí)必須添加適當(dāng)?shù)淖⑨專(zhuān)员闼邢嚓P(guān)的項(xiàng)目涉眾都具有完整的可見(jiàn)性。
使用安全保險(xiǎn)庫(kù)
簡(jiǎn)單來(lái)說(shuō),保險(xiǎn)庫(kù)是一種主要用于保護(hù)任何敏感信息(例如,密碼、API 密鑰、證書(shū)等)的工具。以人類(lèi)可讀的形式在本地存儲(chǔ)機(jī)密信息是管理機(jī)密信息最糟糕的方法之一。
這就是安全保險(xiǎn)庫(kù)非常有用的地方,因?yàn)樗鼈優(yōu)槿魏蚊孛芴峁┝私y(tǒng)一的接口,并提供了詳細(xì)的審計(jì)日志。通過(guò)指定訪問(wèn)權(quán)限(授權(quán)),安全保險(xiǎn)庫(kù)還可用于檢測(cè)基于角色的訪問(wèn)控制 (RBAC)。Hashicorp Vault Helm chart和Vault for Docker是兩個(gè)流行的保險(xiǎn)庫(kù)管理器,可用于運(yùn)行保險(xiǎn)庫(kù)服務(wù)、訪問(wèn)和存儲(chǔ)機(jī)密等。
由于大多數(shù)應(yīng)用程序都利用了云的潛力,因此在數(shù)據(jù)傳輸或靜止時(shí)關(guān)注數(shù)據(jù)安全性非常重要。這就是 EaaS(加密即服務(wù))可用于在靜態(tài)存儲(chǔ)數(shù)據(jù)之前將應(yīng)用程序的加密需求卸載到保管庫(kù)的地方。
定期輪換密鑰
幾周或幾個(gè)月后重置密鑰是一種很好的安全做法。一種做法是手動(dòng)重新生成密鑰,因?yàn)槭褂眠@些秘密的應(yīng)用程序可能會(huì)在日志文件或集中式日志記錄系統(tǒng)中留下痕跡。攻擊者可以獲得對(duì)日志的后門(mén)訪問(wèn)并使用它來(lái)泄露秘密。
此外,同事可能會(huì)無(wú)意中向組織外部泄露機(jī)密。為避免此類(lèi)情況,建議在相應(yīng)的機(jī)密管理工具中啟用機(jī)密輪換。例如,AWS Secrets Manager 中的 Secrets Manager 輪換使用 AWS Lambda 函數(shù)來(lái)更新密鑰和數(shù)據(jù)庫(kù)。
最重要的是,團(tuán)隊(duì)?wèi)?yīng)該有適當(dāng)?shù)膶?shí)踐來(lái)檢測(cè)對(duì)系統(tǒng)的未授權(quán)訪問(wèn)。這將有助于在對(duì)業(yè)務(wù)造成重大損害之前采取適當(dāng)?shù)拇胧?/p>
為什么要在 DevSecOps 管道中實(shí)施機(jī)密管理?
只有在 CI/CD 管道中對(duì)代碼進(jìn)行自動(dòng)化測(cè)試,才能實(shí)現(xiàn)加速發(fā)布周期和更快的開(kāi)發(fā)人員反饋。在 CI 管道中運(yùn)行的測(cè)試可能需要訪問(wèn)關(guān)鍵的受保護(hù)資源,如數(shù)據(jù)庫(kù)、HTTP 服務(wù)器等。
甚至在 Docker 容器內(nèi)運(yùn)行單元測(cè)試也是一種常見(jiàn)做法,但開(kāi)發(fā)人員和 QA 需要確保秘密不存儲(chǔ)在 Dockerfile 中。秘密管理工具可以與流行的 CI/CD 工具(例如 Jenkins)結(jié)合使用,從而在集中位置管理密鑰和其他秘密。秘密也通過(guò)加密和令牌化存儲(chǔ)。