安全是軟體開發生命週期(SDLC)中的關鍵部分,同時也需要成為 SDLC 中每個環節的一部分,尤其是部署。因此,保障應用部署安全並不是開始於部署階段,而是從寫下第一行程式碼開始就需要將安全納入考慮的因素,即安全左移。
本文將會介紹6個保障應用部署安全的最佳實踐,幫助您避免安全問題。這些最佳實踐還可以保證部署過程的速度不受影響。
1、控制部署的觸發方式
開發團隊應該慎重管理觸發自動部署到生產環境的程式碼,生產部署不應該從不受信任的程式碼庫、fork或者分支中進行。
2、瞭解開發環境的安全問題
在啟動一個新的軟體專案之前,讓開發團隊熟悉相關係統環境的安全最佳實踐是至關重要的。例如,Kubernetes 的安全上下文設定可以幫助開發團隊理解 Kubernetes 安全的基本內容。當開發團隊瞭解這些基礎知識之後就可以極大程度減少人為錯誤。
這之所以重要是由於 Kubernetes 是歷史上發展最迅速的開源專案之一,它被廣泛應用於雲原生開發和部署,對 Kubernetes 的安全最佳實踐有深刻理解可以幫助團隊避免安全失誤,其他的容器編排系統也同理。
3、實施金鑰策略
當使用動態服務來處理配置變化時,它們(或類似服務)也應該會處理相關的金鑰。它們在執行時將金鑰傳遞給容器,同時使用統一的策略來處理金鑰,確保不同型別的金鑰(即執行時與構建金鑰)不被混淆,並保持測試和開發順利。
應用程式僅需要在打包時構建金鑰(比如,專案repo或檔案儲存憑證)。執行時金鑰只有在部署之後才是必要的(比如,私鑰、資料庫密碼以及 SSL 證照),因此開發者僅需傳遞必要的金鑰到應用程式即可。
具體的策略並不重要,重要的時候堅持採用統一的策略。每個團隊都必須在所有環境中使用相同的金鑰處理策略,使其更容易跟蹤金鑰。這個策略應該是靈活的,以便於測試和部署。重點應該是金鑰的使用,而不是其來源。
4、採用 GitOps 實踐
GitOps 正逐漸成為安全的雲原生和以Kubernetes為中心的CI/CD的首選方法。它同時提供了安全和快速部署,這是當前任何軟體開發專案中最重要的兩個方面。
根據許多優秀的開發人員和工程師的說法,GitOps 是一系列針對 Kubernetes 環境的實踐,尤其是當單個叢集資源被多個使用者或團隊共享時。
GitOps可以與 Kubernetes 的功能(如名稱空間)協同工作,確保多個租戶以安全的方式使用資源。這些做法透過保持租戶之間的隔離、減少安全和可讀性的風險來實現。當所有使用者都在進行修改時,這一點尤其有幫助。
使用像 GitOps 這樣的模式,可以確保任何使用者所做的任何改變在進入最終構建之前都會被跟蹤和批准。這不僅可以管理應用程式的更新,而且如果某個更新並沒有像預期那樣工作時,你可以輕鬆回滾到以前的版本。
5、永遠別用預設配置
如果你正在使用開源專案,那麼千萬別用它們的預設配置,這點尤為重要。預設配置不一定與你的安全策略一致,因為它們關注的是商業、運營和功能上的成功,而不是安全。此外,它們是常識,任何人都可以利用它們。在這種情況下,你可以尋求商業平臺和供應商的幫助。
這方面的一個典型例子是,在使用 Kubernetes 時,部署及其 pod 沒有網路分段策略。這讓所有的資產在它們之間進行通訊。如果開發者想快速建立一個應用程式,這種預設設定是很方便的,但保留預設設定意味著,如果一個容器被攻擊,威脅就會迅速蔓延。
6、作為部署的一部分執行自動測試
經過深思熟慮的測試可以幫助你對程式碼的安全性獲得信心,反之糟糕的測試會妨礙你。如果條件允許的話,將測試自動化,使其支援部署流水線。簡單的“測試”可以在每次程式碼修改時執行,資源密集型的測試可以儲存到重要的版本。不要忽視失敗的測試,你需要重新評估和重構不起作用的測試。