雲原生安全和 Kubernetes
Kubernetes 基於雲原生架構,並借鑑了來自 CNCF 的雲原生資訊安全最佳實踐建議。
繼續閱讀本頁,瞭解 Kubernetes 如何設計以幫助你部署安全的雲原生平臺。
雲原生資訊安全
CNCF 關於雲原生安全的白皮書定義了適用於不同生命週期階段的安全控制和實踐。
開發生命週期階段
- 確保開發環境的完整性。
- 根據你的上下文,遵循資訊安全的最佳實踐設計應用程式。
- 將終端使用者安全作為解決方案設計的一部分進行考慮。
為此,你可以
- 採用一種架構,例如零信任,以最大限度地減少攻擊面,即使是針對內部威脅。
- 定義一個考慮安全問題的程式碼審查流程。
- 為你的系統或應用程式構建威脅模型,識別信任邊界。使用該模型來識別風險並幫助找到處理這些風險的方法。
- 在合理的情況下,整合高階安全自動化,例如模糊測試和安全混沌工程。
分發生命週期階段
- 確保你執行的容器映象的供應鏈安全。
- 確保叢集以及執行你應用程式的其他元件的供應鏈安全。其他元件的示例可能是你的雲原生應用程式用於持久化的外部資料庫。
為此,你可以
- 掃描容器映象和其他工件是否存在已知漏洞。
- 確保軟體分發使用傳輸中加密,並帶有軟體源的信任鏈。
- 在有可用更新時,特別是針對安全公告時,採納並遵循更新依賴項的流程。
- 使用數字證書等驗證機制來確保供應鏈安全。
- 訂閱訂閱源和其他機制,以提醒你安全風險。
- 限制對工件的訪問。將容器映象放置在私有倉庫中,該倉庫只允許授權客戶端拉取映象。
部署生命週期階段
確保對可以部署什麼、誰可以部署以及可以部署到何處進行適當的限制。你可以強制執行“分發”階段的措施,例如驗證容器映象工件的加密身份。
當你部署 Kubernetes 時,你還為應用程式的執行時環境奠定了基礎:一個 Kubernetes 叢集(或多個叢集)。該 IT 基礎設施必須提供更高層期望的安全保障。
執行時生命週期階段
執行時保護:訪問
Kubernetes API 是使你的叢集正常工作的關鍵。保護此 API 是提供有效叢集安全性的關鍵。
Kubernetes 文件中的其他頁面詳細介紹瞭如何設定訪問控制的特定方面。安全清單包含一套針對你的叢集的建議基本檢查。
除此之外,保護你的叢集意味著為 API 訪問實施有效的身份驗證和授權。使用ServiceAccounts為工作負載和叢集元件提供和管理安全身份。
Kubernetes 使用 TLS 保護 API 流量;確保使用 TLS 部署叢集(包括節點和控制平面之間的流量),並保護加密金鑰。如果你使用 Kubernetes 自己的 API 進行證書籤名請求(CertificateSigningRequests),請特別注意限制其濫用。
執行時保護:計算
容器提供兩件事:不同應用程式之間的隔離,以及將這些隔離的應用程式組合起來在同一主機上執行的機制。這兩個方面,隔離和聚合,意味著執行時安全涉及識別權衡並找到適當的平衡。
Kubernetes 依賴容器執行時來實際設定和執行容器。Kubernetes 專案不推薦特定的容器執行時,你應該確保你選擇的執行時(或多個執行時)滿足你的資訊安全需求。
為了在執行時保護你的計算,你可以
為應用程式強制執行Pod 安全標準,以幫助確保它們僅以必要的特權執行。
在你的節點上執行專門為執行容器化工作負載而設計的專用作業系統。這通常基於一個只讀作業系統(不可變映象),它只提供執行容器所需的基本服務。
容器專用作業系統有助於隔離系統元件,並在容器逃逸時減少攻擊面。
定義ResourceQuotas以公平分配共享資源,並使用LimitRanges等機制來確保 Pods 指定其資源需求。
跨不同節點劃分工作負載。使用來自 Kubernetes 本身或生態系統的節點隔離機制,以確保具有不同信任上下文的 Pods 在單獨的節點集上執行。
使用提供安全限制的容器執行時。
在 Linux 節點上,使用 AppArmor 或 Seccomp 等 Linux 安全模組。
執行時保護:儲存
為了保護你的叢集和執行在其上的應用程式的儲存,你可以
- 將你的叢集與提供卷靜態加密的外部儲存外掛整合。
- 為 API 物件啟用靜態加密。
- 使用備份保護資料永續性。驗證你可以在需要時恢復這些備份。
- 驗證叢集節點及其依賴的任何網路儲存之間的連線。
- 在你的應用程式中實現資料加密。
對於加密金鑰,在專用硬體中生成這些金鑰提供了防止洩露風險的最佳保護。硬體安全模組可以讓你執行加密操作,而無需將安全金鑰複製到其他地方。
網路和安全
你還應該考慮網路安全措施,例如NetworkPolicy或服務網格。一些 Kubernetes 網路外掛透過虛擬專用網路 (VPN) 覆蓋等技術為你的叢集網路提供加密。根據設計,Kubernetes 允許你為叢集使用自己的網路外掛(如果你使用託管 Kubernetes,管理你的叢集的人員或組織可能已為你選擇了網路外掛)。
你選擇的網路外掛以及你整合它的方式可能會對傳輸中資訊的安全性產生重大影響。
可觀測性和執行時安全
Kubernetes 允許你使用額外的工具擴充套件你的叢集。你可以設定第三方解決方案來幫助你監控或排除應用程式及其執行的叢集的故障。你還可以獲得 Kubernetes 本身內建的一些基本可觀測性功能。在容器中執行的程式碼可以生成日誌、釋出指標或提供其他可觀測性資料;在部署時,你需要確保你的叢集提供適當級別的保護。
如果你設定了指標儀表板或類似的東西,請檢查填充資料到該儀表板的元件鏈,以及儀表板本身。確保整個鏈都設計有足夠的彈性和完整性保護,即使在叢集可能降級的事件中,你也可以依賴它。
在適當的情況下,部署 Kubernetes 本身級別以下的安全措施,例如加密測量啟動或經過身份驗證的時間分發(這有助於確保日誌和審計記錄的準確性)。
對於高安全性環境,部署加密保護以確保日誌既防篡改又保密。
下一步
雲原生安全
- CNCF 白皮書關於雲原生安全。
- CNCF 白皮書關於保護軟體供應鏈的最佳實踐。
- 修復 Kubernetes clusterf**k:從核心瞭解安全性 (FOSDEM 2020)
- Kubernetes 安全最佳實踐 (Kubernetes Forum Seoul 2019)
- 邁向開箱即用的測量啟動 (Linux Security Summit 2016)