隨著 Kubernetes 的發展和改進,新的安全威脅和風險也逐漸向 K8s 轉移,因此 K8s 安全性變得越來越重要,而保護 K8s 叢集已成為 DevOps 團隊不容忽視的重要任務。K8s 有多種實現型別(本地、雲管理、混合等)、眾多開源支援工具和各種設定設定,且保護執行容器工作負載的任何安全敏感架構的需求也在增長。
根據 CNCF 的 K8s 安全審計調查,攻擊者可以通過利用各種 K8s 漏洞和幾種標準設定進行非法行為。今天,我們將探討一些實施保障 K8s 安全的最佳實踐。
K8s 是一個用於管理容器(容器化應用程式)的系統,容器則可以理解為是一個輕量級的虛擬機器器。要建立應用程式,就需要先建立一些容器並使用 K8s 來管理這些容器。這確實是一個龐大且快速擴充套件的生態系統,並且 K8s 的設施、支援和工具相對比較容易獲得。K8s 可以立即生成和擴充套件容器,並跨所有容器管理儲存。
K8s 叢集是包含所有 K8s 元件的K8s 系統。叢集可以在物理機(如 PC 或筆記型電腦)或虛擬機器器上執行。如果你有一臺機器執行完整的 K8s 系統,則該機器託管您的 K8s 叢集;假設你有兩臺機器執行 K8s,這兩臺機器都會組織你的 K8s 叢集。叢集可以在物理機和虛擬機器器的任意組合上執行。
接下來我們一起看看企業應該實施哪些安全最佳實踐來確保其 K8s 叢集的安全性。
最基本且經常被忽視的安全最佳實踐是將 K8s 生態系統保持最新狀態。企業將受益於新的安全功能和錯誤跟蹤更新以及變體版本。此外,在啟動到生產叢集之前,請在測試環境中使用最新的完整版本。
Kubernetes API 伺服器,也被稱為 Kube-API 伺服器,是 K8s 叢集的核心。K8s API 是 K8s 叢集的主要存取點。管理員或服務帳戶可以通過命令列實用程式 kubectl、REST API 呼叫或其他使用者端 SDK 存取 API。伺服器提供存取並保證叢集是可操作的。所有在叢集內部呼叫的 API 嘗試都應該使用加密的傳輸層安全性。建議採用完全符合存取控制規則的 API 伺服器的 API 身份驗證方法。
RBAC 即基於角色的存取控制機制,允許多個應用程式基於最小許可權執行具體操作,並且僅授予執行必要的許可權。管理員應遵循以下 K8s RBAC 最佳實踐:
–authorization-mode=RBAC
引數在 API 伺服器中啟用 RBAC,強制 RBAC 作為叢集安全的標準設定。[「*」]
或一攬子存取。首先加強執行 pod 節點安全性:
向節點物件新增標籤以允許 pod 專門針對節點,從而控制 pod 可以存取哪些節點。應用節點標籤後,將節點選擇器新增到 pod 部署中,以便 pod 對所選節點進行顯著更改。
kubelet 發揮著在每個叢集節點上持續執行的操作員的作用。它通過 API 與使用者通訊,這些 API 管理試圖在節點上執行並執行特定任務的 pod。未經授權向 kubelet 披露為攻擊者提供了 API 存取許可權,並可能危及節點或叢集的安全。
要減少攻擊面並防止通過 kubelet 對 API 進行未經授權的存取,請執行以下步驟:
-anonymous-auth
標誌設定為false
以禁用匿名存取:-anonymous-auth=false
。-kubelet-client-certificate
和-kubelet-client-key
標誌開始 Kube-Episerver 命令。這可確保 API 伺服器對 kubelet 進行身份驗證並防止匿名請求。—read-only-port=0
。名稱空間將敏感工作負載與非敏感工作負載區分開來。處理多個名稱空間可能會有些困難,但這使得實現安全控制變得更簡單,例如管理效能的網路策略以調節進出 pod 的流量。
啟用 K8s 審計紀錄檔並監督它們是否存在非法行為和可疑的 API 呼叫。K8s 可以儲存叢集活動的詳細記錄,所以我們可以立即在稽核紀錄檔中檢測到可能的安全問題。例如,攻擊者試圖暴力破解密碼可能會建立身份驗證和授權紀錄檔。如果這些行為反覆出現,則可能存在安全問題。
要啟用審計紀錄檔,需使用 K8s 審計策略,允許管理員根據情況設定審計級別:
None
– 與此規則匹配的事件將不會被記錄。Metadata
– 記錄請求的後設資料,例如請求使用者、時間戳、資源和動詞。Request
– 記錄事件的後設資料以及請求正文,但不記錄響應正文。這不適用於對非資源的請求。RequestResponse
– 跟蹤事件後設資料、請求和響應正文。這不適用於對非資源的請求。這些資訊的大部分由 K8s 審計紀錄檔記錄,並且與叢集 API 的簡單結合允許您將這些紀錄檔傳送到外部紀錄檔記錄和儲存解決方案。同時還可以生成儀表板、可疑行為警報和事件調查報告。
依賴 K8s 作為後端的 DevOps 團隊必須意識到叢集和可以在其中執行的 Docker 容器可能面臨的所有風險和攻擊。由於可用的攻擊向量種類繁多、技術的不斷進步以及該工具的一致、廣泛採用,惡意攻擊者發現滲透叢集能夠有效發起攻擊並獲得利益。保護 K8s 叢集是一項艱鉅的任務,密切關注並儘可能檢測系統漏洞或惡意攻擊行為至關重要。