歡迎光臨
每天分享高質量文章

每個人都必須遵守的9大Kubernetes最佳安全實踐

 

上個月,世界上最流行的容器編排系統Kubernetes生態圈被Kubernetes第一個主要安全CVE-2018-1002105(使用者許可權提升漏洞)漏洞的發現震驚。它允許攻擊者透過Kubernetes API伺服器來危害叢集,允許攻擊者執行程式碼、安裝惡意軟體等進行惡意活動。
今年早些時候,Tesla由於錯誤在Kubernetes控制檯配置輸出內容而遭受複雜加密貨幣挖礦程式的感染。攻擊者利用Kubernetes控制檯未進行密碼保護的漏洞,進而提升許可權對其中的Pods進行訪問,最終獲取Tesla更大的AWS叢集環境的許可權。
隨著公司組織加速採用容器和容器編排技術,我們有必要採取措施去保護基礎計算設施。為了達到這個目的,基於使用者建議,您應該好好參考下麵的九大最佳安全實踐去保護自己的基礎設施。

 

1. 將環境升級到最新版本

 

每個進度的更新都會新增新的安全特徵,而不僅僅是進行bug修複,為了利用這些特徵,我們建議您執行最新的穩定版本。最好的方法是使用最新釋出穩定版本的補丁來進行修複,特別是考慮到CVE-2018-1002105的發現。使用的版本越久意味著升級和支援將會變得更加困難,因此計劃每個季度至少進行一次更新是比較不錯的選擇。使用託管的Kubernetes產品使得更新更為方便。
2. 開啟基於角色的許可權控制(RBAC)

 

控制誰可以訪問Kubernates API,以及他們具有基於角色的訪問控制(RBAC)的哪些許可權。RBAC在Kubernetes 1.6以及後面版本(有些服務商可能稍有延遲)是預設開啟的,但如果你自從更新以後就沒有更改過配置了,那你就需要進行再次確認你的配置。因為Kubernetes的授權控制是組合的,你必須同時開啟RBAC和禁止過時的基於屬性的許可權控制(ABAC)。
一旦RBAC開啟,你依然需要有效的使用它。為了支援特定於名稱空間的許可權,應該避免叢集範圍內的許可權。避免分配給任何人叢集管理源的許可權,就算用於debugging,僅在需要的時候根據具體情況授予訪問許可權要安全得多。
您可以透過使用kubectl get clusterrolebinding或者是kubectl get rolebinding -all-namespaces來探索叢集的角色和許可權。快速檢視誰被賦予特定“叢集管理員”角色,在下麵案例中,它僅僅屬於”Masters”組:
如果您的應用需要獲取Kubernetes API的許可權,需要單獨建立服務所需要的賬戶並且根據每個站點進行最小許可權集配置。這比為名稱空間的預設賬戶授予過於廣泛的許可權要好得多。
大多數應用並不需要訪問Kubernetes API的許可權,將automountServiceAccountToken設定為false即可。

 

3. 使用名稱空間來建立安全的邊界

建立單獨的名稱空間是元件之間重要的第一級隔離。我們發現當不同型別的工作負載在不同的名稱空間進行部署的時候,像網路策略這樣的更容易進行安全控制。
你的團隊是否更有效的使用了名稱空間?現在透過檢查任何非預設名稱空間來找出答案。

 

4. 隔離敏感的工作負載

 

為了遏制叢集中的潛在影響,最好的方法就是使用一系列專門的機器來執行敏感的工作負載。這種方法可以降低透過共享容器執行時或主機的安全性較低的應用程式訪問敏感應用程式的風險。舉個例子,受到攻擊的節點的kubelet憑證通常用來獲取加密的內容,除非它們被掛載到該節點定時排程的Pods上。如果加密的內容被排程執行在叢集中的多個節點上,攻擊者就會有更多的機會來竊取資訊。
你可以使用節點池(在雲上或者是在本地)和Kubernetes名稱空間、汙點、容忍度或者其他控制來實現。

 

5. 安全雲元資料訪問

 

敏感的資料元,例如kubelet管理憑證,有時候會被竊取或誤用來升級叢集中的特權。例如最近公佈的Shopify bug bounty詳細說明瞭使用者是如何透過獲取雲服務商的服務元資訊來混淆微服務中的記憶體洩露資訊。GKE元資料中隱藏了叢集釋出特徵的機制已避免這些資訊暴露,並且我們推薦使用這種方式直到找到有效的解決方案,相似的對策可能在其他方案中也是必須的。
6. 建立並定義叢集網路策略

 

網路策略可以允許你控制容器化應用的網路進出。為了更好使用它們,你需要確保你有一個網路服務商來支援和管理這些資源,像託管Kubernetes服務商谷歌Kubernetes引擎(GKE),當然你可以選擇。如果叢集已經存在,那麼在GKE中啟用網路策略需要進行簡單的滾動升級。設定好之後,從基本的預設網路策略開始,比如預設情況下阻塞來自其他名稱空間的流量。
如果您執行在Google Container Engine,您可以檢查您的叢集是否開啟了網路支援執行:

 

7. 執行叢集範圍內的Pod安全策略

 

Pod安全策略設定叢集中工作負載的預設執行方式,三思而後行並定義一個策略去保證Pod安全策略控制許可權,指令根據不同的雲服務商的不同而不同。你可以要求放棄部署NEW_RAW功能而挫敗網路欺詐攻擊者。
8. 強化節點安全

 

您可以按照如下的三個步驟來提升您節點的安全:
  • 確保宿主機是安全並且被正確配置。其中一個方法就是透過CIS基準測試去檢查你的配置檔案,許多產品都有自動化檢查器,可以自動評估是否符合標準。

  • 控制敏感ports網路的許可權。 確保您的網路阻止了kubelet使用埠訪問,包括10250和10255。考慮限制除了信任的網路以外的網路對Kubernates API的訪問許可權。惡意使用者濫用這些埠在叢集中來執行加密貨幣挖礦程式,這些叢集沒有配置為需要kubelet API服務上的身份認證和授權。

  • 最小化Kubernetes節點的管理員許可權。訪問叢集中的節點許可權應該嚴格被控制,debugging和其他任務通常不需要獲取節點的許可權就可以執行。

 

9. 開啟審核日誌

 

確保你已經開啟審核日誌並且監控異常和非法API呼叫,特別是要註意任何的授權失敗日誌。這些日誌記錄將會有一個“禁止狀態“,授權失敗意味著可能有攻擊者想要竊取憑證資訊。包括GKE在內的託管Kubernetes服務商,都在雲控制檯輸出了這些資料,你可以配置在授權失敗時進行報警。
展望未來

 

遵循上述的幾條推薦可以使得你的Kubernetes叢集更為安全。記住,儘管遵循了上述的幾條建議可以使得你的Kubernetes叢集更安全,但你仍然需要在其他方面構建安全,例如容器配置、執行時操作等。在改進技術棧的安全性時,尋找能夠為容器部署提供中心治理點的工具,併為容器和雲原生應用程式提供持續監控和保護。
原文連結:https://www.cncf.io/blog/2019/01/14/9-kubernetes-security-best-practices-everyone-must-follow/
贊(0)

分享創造快樂