Kubernetes 預設配置強調靈活性而非安全性。每個開放的通訊埠、寬鬆的 RBAC 角色和不受限制的 Pod 都是一個邀請。強化叢集意味著有系統地關閉這些漏洞,同時不破壞依賴它們的工作負載。這不是檢查清單練習——這是一個持續的規範,涉及身份識別、網路、工作負載和供應鏈層。
首先鎖定控制平面
API 伺服器是任何叢集中最有價值的單一目標。首先停用匿名驗證並實施強驗證方法——將 OIDC 整合與身份提供者配合使用比使用永不過期的靜態代符或用戶端憑證更可取。限制對 etcd 資料存放區的存取,因為除非啟用待用加密,否則它以純文字形式保存每個祕密和設定物件。使用 KMS 提供者為祕密啟用加密,而不是依賴 Base64 編碼,該編碼不提供任何真正的保護。應從第一天開始開啟稽核記錄;沒有它,當出現問題時,你就沒有鑑識軌跡。
RBAC:最小權限,而非便利性
生產環境叢集中最常見的錯誤設定是過度寬鬆的 RBAC 繫結——cluster-admin 授予只需要在一個命名空間中讀取 Pod 的服務帳戶。圍繞實際職能建立角色,並盡可能將它們限制在命名空間內。避免在 Role 和 ClusterRole 定義中使用萬用字元動詞和資源。定期使用 kubectl auth can-i --list 或 rbac-lookup 等工具稽核繫結,以捕捉權限蔓延。服務帳戶應受到與人類使用者相同的審視——對於不需要 API 存取的 Pod,停用服務帳戶代符的自動掛載。
Pod 安全:假設被入侵
Pod 安全許可(取代已棄用的 PodSecurityPolicy)允許你在命名空間層級強制實施基準或受限制的設定檔。至少要禁止特權容器、主機命名空間共享和權限提升。設定 runAsNonRoot: true 並預設刪除所有 Linux 功能,只新增明確需要的功能。唯讀根檔案系統可防止攻擊者將惡意二進位檔寫入執行中的容器。這些控制很重要,因為容器逃逸或被利用的應用程式漏洞不應轉化為完整的節點洩露。
網路政策不是可選項
根據預設,Kubernetes 叢集中的每個 Pod 都可以與其他每個 Pod 通訊。該平坦網路模型是攻擊者橫向移動的夢想。實施 NetworkPolicy 資源以強制實施預設拒絕的輸入和輸出,然後明確允許應用程式僅需的流量流。這需要實際支援 NetworkPolicy 強制實施的 CNI 外掛——Calico、Cilium 和其他外掛填補了這個角色,因為基本 Kubernetes 網路模型本身不強制任何內容。按信任邊界分割命名空間並在頂部分層政策,可提供真正的深度防禦。
映像和供應鏈完整性
強化不會在執行時設定處停止——它從你部署的內容開始。在已知漏洞到達你的登錄機制之前掃描容器映像,並使用 Kyverno 或 OPA Gatekeeper 等許可控制器強制實施只有簽署、驗證的映像才能在叢集中執行。將映像標籤固定到摘要,而不是可變標籤(如 latest),可能會在你不知情的情況下變更。限制允許 Pod 從哪些登錄機制提取,關閉供應鏈攻擊的常見路徑,其中受損或拼寫錯誤的映像會悄悄進入生產環境。
超越 Kubernetes 預設的祕密管理
原生 Kubernetes 祕密優於無,但它們不是真正的祕密管理解決方案。考慮整合外部祕密管理器——Vault、AWS Secrets Manager 或類似物——並在執行時注入祕密,而不是將其儲存為叢集物件。如果必須使用原生祕密,請確保啟用 etcd 加密,RBAC 嚴格限制讀取存取,因為任何具有命名空間中祕密 get 權限的 Pod 或使用者都可以洩露認證。
持續驗證,而非一次性設定
隨著新工作負載的部署和優先事項從安全轉向速度,強化設定會隨著時間漂移。kube-bench 等工具針對 CIS Kubernetes 基準檢查合規性,而 kube-hunter 可以模擬攻擊者對叢集的偵察。將這些檢查烘焙到 CI/CD 管線中,以便在錯誤設定到達生產環境之前被捕捉,而不是在事件回應通話期間。
Kubernetes 強化不是關於單一銀彈控制,而是更多關於在身份識別、網路、工作負載和供應鏈上分層防禦——以便一層中的故障不會級聯成完整洩露。如需深入瞭解雲端基礎結構安全模式和防禦工具,請探索 Korra Studio 的 DEFENSE_GRID 平台上的相關部分。