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

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

上個月,世界上最流行的容器編排系統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”組:

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

如果您的應用需要獲取Kubernetes API的權限,需要單獨創建服務所需要的帳戶並且根據每個站點進行最小權限集配置。這比為命名空間的默認帳戶授予過於廣泛的權限要好得多。

大多數應用並不需要訪問Kubernetes API的權限,將automountServiceAccountToken設置為false即可。

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

創建單獨的命名空間是組件之間重要的第一級隔離。我們發現當不同類型的工作負載在不同的命名空間進行部署的時候,像網路策略這樣的更容易進行安全控制。

你的團隊是否更有效的使用了命名空間?現在通過檢查任何非默認命名空間來找出答案。

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

4. 隔離敏感的工作負載

為了遏制集群中的潛在影響,最好的方法就是使用一系列專門的機器來運行敏感的工作負載。這種方法可以降低通過共享容器運行時或主機的安全性較低的應用程序訪問敏感應用程序的風險。舉個例子,受到攻擊的節點的kubelet憑證通常用來獲取加密的內容,除非它們被掛載到該節點定時調度的Pods上。如果加密的內容被調度運行在集群中的多個節點上,攻擊者就會有更多的機會來竊取信息。

你可以使用節點池(在雲上或者是在本地)和Kubernetes命名空間、污點、容忍度或者其他控制來做到。

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

5. 安全雲元數據訪問

敏感的數據元,例如kubelet管理憑證,有時候會被竊取或誤用來升級集群中的特權。例如最近公布的Shopify bug bounty詳細說明了用戶是如何通過獲取雲服務商的服務元信息來混淆微服務中的內存泄露信息。GKE元數據中隱藏了集群發布特徵的機制已避免這些信息暴露,並且我們推薦使用這種方式直到找到有效的解決方案,相似的對策可能在其他方案中也是必須的。

6. 創建並定義集群網路策略

網路策略可以允許你控制容器化應用的網路進出。為了更好使用它們,你需要確保你有一個網路服務商來支持和管理這些資源,像托管Kubernetes服務商GoogleKubernetes引擎(GKE),當然你可以選擇。如果集群已經存在,那麼在GKE中啟用網路策略需要進行簡單的滾動升級。設置好之後,從基本的默認網路策略開始,比如默認情況下阻塞來自其他命名空間的流量。

如果您運行在Google Container Engine,您可以檢查您的集群是否開啟了網路支持運行:

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

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/

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!