雲原生安全和 Kubernetes
Kubernetes 基於雲原生架構,並參考雲原生運算基金會 (CNCF) 關於雲原生資訊安全良好實務的建議。
請繼續閱讀此頁面,以概略了解 Kubernetes 如何設計來協助您部署安全的雲原生平台。
雲原生資訊安全
CNCF 關於雲原生安全的白皮書定義了適用於不同生命週期階段的安全控制和實務。
開發生命週期階段
- 確保開發環境的完整性。
- 根據資訊安全的良好實務設計應用程式,並符合您的情境。
- 將終端使用者安全納入解決方案設計的一部分。
為了達成此目標,您可以:
- 採用架構,例如零信任,以最小化攻擊面,即使是內部威脅也是如此。
- 定義考量安全疑慮的程式碼審查流程。
- 建立系統或應用程式的威脅模型,以識別信任邊界。使用該模型來識別風險,並協助找出處理這些風險的方法。
- 在有理由的情況下,納入進階安全自動化,例如模糊測試和安全混沌工程。
發佈生命週期階段
- 確保您執行的容器映像檔供應鏈的安全性。
- 確保叢集和其他執行應用程式的元件供應鏈的安全性。另一個元件的範例可能是雲原生應用程式用於持久性的外部資料庫。
為了達成此目標,您可以:
- 掃描容器映像檔和其他構件以查找已知的漏洞。
- 確保軟體發佈使用傳輸中加密,並具有軟體來源的信任鏈。
- 當有更新可用時,採用並遵循更新依賴項的流程,尤其是在響應安全公告時。
- 使用驗證機制,例如數位憑證,以確保供應鏈。
- 訂閱摘要和其他機制,以提醒您注意安全風險。
- 限制對構件的存取。將容器映像檔放置在私有登錄檔中,該登錄檔僅允許授權的用戶端提取映像檔。
部署生命週期階段
確保對可以部署的內容、可以部署它的人員以及可以部署到的位置進行適當的限制。您可以從發佈階段實施措施,例如驗證容器映像檔構件的加密身分。
當您部署 Kubernetes 時,您也為應用程式的執行期環境奠定了基礎:Kubernetes 叢集(或多個叢集)。該 IT 基礎架構必須提供較高層級期望的安全保證。
執行期生命週期階段
執行期保護:存取
Kubernetes API 是使叢集運作的關鍵。保護此 API 是提供有效叢集安全性的關鍵。
Kubernetes 文件中的其他頁面更詳細地說明了如何設定存取控制的特定方面。安全檢查表包含一組針對叢集的建議基本檢查。
除此之外,保護叢集安全意味著為 API 存取實施有效的身份驗證和授權。使用服務帳戶為工作負載和叢集元件提供和管理安全身分。
Kubernetes 使用 TLS 來保護 API 流量;請確保使用 TLS 部署叢集(包括節點和控制平面之間的流量),並保護加密金鑰。如果您將 Kubernetes 自己的 API 用於CertificateSigningRequests,請特別注意限制那裡的濫用。
執行期保護:運算
容器提供兩件事:不同應用程式之間的隔離,以及將這些隔離的應用程式組合在同一台主機電腦上執行的機制。隔離和聚合這兩個方面意味著執行期安全性涉及識別權衡並找到適當的平衡。
Kubernetes 仰賴容器執行期來實際設定和執行容器。Kubernetes 專案不建議特定的容器執行期,您應確保您選擇的執行期符合您的資訊安全需求。
為了在執行期間保護您的運算資源,您可以:
針對應用程式實施 Pod 安全性標準,以協助確保它們僅以必要的權限執行。
在您的節點上執行專門設計用於執行容器化工作負載的特殊作業系統。這通常是基於唯讀作業系統(不可變更映像檔),該系統僅提供執行容器所需的基本服務。
容器專用的作業系統有助於隔離系統組件,並在發生容器逃逸事件時減少攻擊面。
定義 ResourceQuotas 以公平分配共享資源,並使用 LimitRanges 等機制來確保 Pod 指定其資源需求。
跨不同節點劃分工作負載。使用來自 Kubernetes 本身或生態系統的 節點隔離 機制,以確保具有不同信任環境的 Pod 在不同的節點集上執行。
使用提供安全性限制的容器執行期。
執行期間保護:儲存
為了保護叢集及其上運行的應用程式的儲存,您可以:
- 將您的叢集與外部儲存外掛程式整合,該外掛程式為磁碟區提供靜態資料加密。
- 為 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)