應用程式安全清單
關於確保 Kubernetes 應用程式安全性的基線指南,面向應用程式開發者
此清單旨在從開發者的角度,提供在 Kubernetes 中保護執行應用程式的基本指南。此清單並非詳盡無遺,旨在隨著時間推移不斷演進。
如何閱讀和使用本文件
- 主題的順序不代表優先順序的順序。
- 某些清單項在每個部分的列表下方段落中進行了詳細說明。
- 此清單假設 `developer` 是與名稱空間範圍物件互動的 Kubernetes 叢集使用者。
注意
僅憑清單 **不足以** 獲得良好的安全狀況。良好的安全狀況需要持續的關注和改進,但清單可以是邁向安全準備這一永無止境的旅程的第一步。本清單中的某些建議對於您的特定安全需求可能過於嚴格或過於寬鬆。由於 Kubernetes 安全性並非“一刀切”,因此應根據其優點評估每個類別的清單項。基本安全強化
以下清單提供了適用於大多數部署到 Kubernetes 的應用程式的基本安全強化建議。
應用程式設計
服務賬號
- 避免使用 `default` ServiceAccount。相反,為每個工作負載或微服務建立 ServiceAccount。
- 除非 Pod 明確需要訪問 Kubernetes API 才能執行,否則 `automountServiceAccountToken` 應設定為 `false`。
Pod 級別 `securityContext` 建議
- 設定 `runAsNonRoot: true`。
- 配置容器以非特權使用者身份執行(例如,使用 `runAsUser` 和 `runAsGroup`),並配置容器映象內檔案或目錄的適當許可權。
- 可選地,使用 `fsGroup` 新增一個補充組以訪問持久卷。
- 應用程式部署到強制執行適當Pod 安全標準的名稱空間。如果無法控制應用程式部署的叢集的此強制執行,則應透過文件或額外的深度防禦來考慮這一點。
容器級別 `securityContext` 建議
- 使用 `allowPrivilegeEscalation: false` 停用特權升級。
- 使用 `readOnlyRootFilesystem: true` 將根檔案系統配置為只讀。
- 避免執行特權容器(設定 `privileged: false`)。
- 從容器中刪除所有能力,只新增容器操作所需的特定能力。
基於角色的訪問控制 (RBAC)
- 只有在必要時才授予**建立**、**修補**、**更新**和**刪除**等許可權。
- 避免建立可導致特權升級的建立或更新角色的 RBAC 許可權。
- 審查 `system:unauthenticated` 組的繫結,並在可能的情況下將其刪除,因為這會允許任何能夠在網路層面聯絡 API 伺服器的人進行訪問。
**建立**、**更新**和**刪除**動詞應謹慎允許。如果允許在名稱空間上使用 **修補** 動詞,可能會允許使用者更新名稱空間或部署上的標籤,這會增加攻擊面。
對於敏感工作負載,考慮提供一個推薦的 ValidatingAdmissionPolicy,以進一步限制允許的寫入操作。
映象安全
- 在 Kubernetes 叢集中部署容器之前,使用映象掃描工具掃描映象。
- 在部署到 Kubernetes 叢集之前,使用容器簽名來驗證容器映象簽名。
網路策略
- 配置NetworkPolicies以僅允許來自 Pod 的預期入站和出站流量。
確保你的叢集提供並強制執行 NetworkPolicy。如果你正在編寫一個使用者將部署到不同叢集的應用程式,請考慮是否可以假定 NetworkPolicy 可用並被強制執行。
高階安全強化
本指南的這一部分涵蓋了一些高階安全強化點,這些點可能根據不同的 Kubernetes 環境設定而有價值。
Linux 容器安全
為 Pod 容器配置安全上下文。
執行時類
- 為容器配置適當的執行時類。
某些容器可能需要與叢集預設執行時提供的隔離級別不同的隔離級別。`runtimeClassName` 可用於 Pod 規約中,以定義不同的執行時類。
對於敏感工作負載,考慮使用核心模擬工具,如 gVisor,或使用 kata-containers 等機制進行虛擬化隔離。
在高信任環境中,考慮使用機密虛擬機器以進一步提高叢集安全性。
此頁面上的專案涉及提供 Kubernetes 所需功能的第三方產品或專案。Kubernetes 專案作者不對這些第三方產品或專案負責。有關詳細資訊,請參閱 CNCF 網站指南。
在提議新增額外第三方連結的更改之前,你應該閱讀內容指南。
最後修改時間:2024 年 11 月 6 日太平洋標準時間上午 9:09:修復 app-security-checklist 中關於請求/限制的條款 (27c53cc54c)