KubeSphere v3.3.1 權限控制詳解

作者:周文浩,青雲科技研發工程師,KubeSphere Maintainer。熱愛雲原生,熱愛開源,目前負責 KubeSphere 權限控制的開發與維護。

KubeSphere 3.3.1 已經發佈一個多月了。 3.3.1 版本對於 KubeSphere 來說只是一個小的 Patch 版本,但是權限控制模塊改動較大。這篇文章將從開發者的視角爲你分享權限控制模塊的改動內容。

這次的改動的主要目的是提升 KubeSphere 權限控制的安全性和易用性。使用過 KubeSphere 的小夥伴應該對 KubeSphere 的租戶體系有一些印象,這對於用戶來說是非常重要的一部分。

權限控制及租戶解析

在介紹這次的改動前,我將先簡單爲你介紹 KubeSphere 的權限控制和租戶體系,這 對於理解本次 3.3.1 版本對於權限控制的改動有非常大的幫助。或者你可以參考創建企業空間、項目、用戶和平臺角色自己動手實驗一下。

我們借鑑了 Kubernetes 的 RBAC 權限控制機制,使用角色給租戶授予對 KubeSphere 的操作權限,而角色是由授權項組成的一個權限實體。角色分爲內置角色和自定義角色,在通常的使用場景下,我們希望內置角色就能夠覆蓋用戶的使用需求。如果你有特殊的權限要求則可以自定義一個角色。自定義角色使得你可以用 KubeSphere 提供的授權項隨意組合,創建一個特定的角色。

角色由分爲不同的層級,從租戶體系來看,我們將整個 KubeSphere 分爲四個層級,即:

  • 平臺 (Platform)
  • 企業空間(Workspace)
  • 命名空間 (Namespace) - 集羣 (Cluster)

與之對應的角色則是:

  • 平臺角色 (Platform Role)
  • 企業空間角色 (Workspace Role)
  • 命名空間角色 (Namespace Role)
  • 集羣角色 (Cluster Role)。

下面這張圖可以幫助你理解不同層級和角色之間的關係。

從資源層級來看,命名空間屬於企業空間,企業空間屬於平臺。在這裏我們只將集羣作爲一個部署命名空間的資源池。

租戶可以被邀請進多個企業空間,並授予企業空間角色。在企業空間中,又可以被邀請到多個命名空間,並授權命名空間角色。

角色

刪除角色

  • 平臺級: Users Manager (用戶管理員),Workspaces Manager (企業空間管理 員)

基於安全性考慮,我們刪除了兩個內置平臺角色:Users Manager (用戶管理員) 和 Workspaces Manager (企業空間管理員)。

用戶管理員可以創建任意層級、任意權限的自定義用戶,如果你需要,甚至可以使用用戶管理員來創建一個平臺管理員 (Platform Administrator) 。對於一個安全的權限控制體系來說應是不被允許的,這會帶來極強的越權風險,所以我們刪除了這個角色。刪除這個角色之後,我們只能使用平臺管理員來創建角色。

企業空間管理員可以用來管理平臺中所有的企業空間及企業空間中資源。企業空間對於 KubeSphere 來說是一個及其重要的資源,在平臺中企業空間是集羣中所有資源的載體。所以我們刪除了這個角色,以保證除平臺管理員之外的角色的權利過於集中。

新增角色

  • 平臺級:platform-self-provisioner 爲了使得企業空間的管理更加方便易用,我們又新增平臺角色 Platform Self Provisioner

Platform Self Provisioner 設計

基本原型

可以創建企業空間(無法修改和刪除),管理自己創建的企業空間內的所有資源。

同時由於企業空間屬於平臺層級,企業空間內的所有資源在多集羣環境下應該可以部 署在多個集羣中。所以對於多集羣環境,Platform Self Provisioner 在以下情況下可以 在集羣中部署企業空間內的資源。

多集羣環境下企業空間部署

  • 開啓了集羣可見性的集羣,self-provisioner 創建的企業空間,可以使用這個集 羣部署項目
  • 末開啓集羣可見性的集羣,self-provisioner 創建的企業空間,需要向(platform-admin)平臺管理員,集羣管理員(cluster-admin)申請這個集羣 的部署授權

單集羣環境下企業空間部署

self-provisioner 創建的企業空間,可以在當前集羣下部署項目。

對自定義角色的限制

對於自定義角色來說,我們則是屏蔽了某些授權項,以限制自定義角色的權限。內置角色的對應權限任然可用,我們從三個層級對自定義角色屏蔽了相關授權項。自定義角色也是基於同樣的考慮,屏蔽的都是與角色、成員、企業空間相關的權限。

  • 平臺級:用戶管理,角色管理,企業空間管理;
  • 企業空間級:成員管理,角色管理,組管理;
  • 命名空間級:成員管理,角色管理。

升級策略

如果已有舊版本的 KubeSphere 集羣,在升級到 KubeSphere 3.3.1 版本時,我們也有自動的升級 Job,對已有的角色進行遷移。具體的升級方式可見使用 KubeKey 升級。

自定義角色的升級

對於已有上述已禁用權限的自定義角色,仍然保留其角色,但是刪除其包含的已禁用的權限。

具體策略:

  • 重新創建一個同名的角色,但是不包含舊的權限項。

內置角色升級

對於已綁定上述廢棄的內置角色的租戶,將之前的租戶的角色降級爲 platform-regular。

本文由博客一文多發平臺 OpenWrite 發佈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章