本文已發布超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
適用於叢集的雲原生安全
在過去幾年中,一個小型、專注於安全的社群一直努力深化我們對安全性的理解,考量到不斷演進的雲原生基礎架構和相應的迭代部署實務。為了讓社群其他成員也能分享這些知識,CNCF SIG Security (一個向 CNCF TOC 報告的小組,並與 Kubernetes SIG Security 友好合作) 的成員在 Emily Fox 的領導下,合作撰寫了一份白皮書,概述了全面的雲原生安全考量和最佳實務。經過來自世界各地 35 位成員超過 1200 條評論、變更和討論後,我們很榮幸分享 雲原生安全白皮書 v1.0,這份白皮書是企業、金融和醫療保健產業、學術界、政府和非營利組織的安全領導階層必讀的文件。
該白皮書試圖不著重於任何特定的 雲原生專案。相反地,其目的是將安全性建模並注入到雲原生應用程式生命週期的四個邏輯階段:開發、發布、部署和執行階段。
Kubernetes 原生安全控制
當使用 Kubernetes 作為工作負載協調器時,此版本的白皮書建議的一些安全控制措施包括:
- Pod 安全策略:為整個叢集中的「最小權限」工作負載實作單一事實來源
- 資源請求和限制:針對記憶體和 CPU 等共用資源套用請求 (軟性限制) 和限制 (硬性限制)
- 稽核日誌分析:啟用 Kubernetes API 稽核和篩選以取得與安全性相關的事件
- 控制平面驗證和憑證信任根:啟用具有受信任 CA 的相互 TLS 驗證,以進行叢集內通訊
- 密鑰管理:與內建或外部密鑰儲存庫整合
雲原生互補安全控制
Kubernetes 直接參與部署階段,並在較小程度上參與執行階段階段。確保安全地開發和發布成品對於讓 Kubernetes 中的工作負載能夠「預設安全」地執行至關重要。在雲原生應用程式生命週期的所有階段中,Kubernetes 協調的工作負載都有一些互補的安全控制措施,包括但不限於:
- 開發
- 映像簽署和驗證
- 映像漏洞掃描器
- 發布
- 用於偵測過度權限的預部署檢查
- 啟用可觀察性和記錄
- 部署
- 使用服務網格進行工作負載驗證和授權
- 透過 網路外掛程式 為工作負載間的通訊強制執行「預設拒絕」網路原則
- 執行階段
- 部署用於工作負載的安全監控代理程式
- 使用 SELinux、AppArmor 等隔離在同一節點上執行的應用程式
- 針對節點、工作負載和協調器的公認安全基準掃描組態
先理解,再求安全
雲原生方式,包括容器,為使用者帶來了極大的安全優勢:不可變性、模組化、更快的升級以及跨環境的一致狀態。意識到「做事方式」的這種根本性改變,促使我們以雲原生的視角來看待安全性。對於白皮書的所有作者來說,顯而易見的一件事是,如果您不了解手邊的工具、模式和框架 (除了了解您自己的關鍵資產之外),就很難就如何在雲原生生態系統中保護什麼以及如何保護做出更明智的決策。因此,對於所有希望成為營運、產品開發和合規部門朋友的合作夥伴,而不是看門人的安全從業人員來說,讓我們嘗試學習更多,以便我們能更好地保護。
我們建議遵循這個 7 步驟的 R.U.N.T.I.M.E. 路徑 來開始雲原生安全性
- R 閱讀白皮書以及其中的任何連結資料
- U 理解您環境的挑戰和限制
- N 記錄適用於您環境的內容和控制措施
- T 與您的同儕討論您的觀察
- I 讓您的領導階層參與並尋求協助
- M 根據現有和缺失的安全控制措施建立風險概況
- E 花費時間、金錢和資源來改善安全態勢,並在適當情況下降低風險。
致謝
非常感謝 Emily Fox、Tim Bannister (The Scale Factory)、Chase Pettet (Mirantis) 和 Wayne Haber (GitLab) 為此部落格文章貢獻了他們精彩的建議。