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

每個人都必須遵守的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)

分享創造快樂