設定 RBAC

本主題說明如何在 Tanzu Kubernetes Grid 中設定角色型存取控制 (RBAC)。

關於設定 RBAC

如果要使用標準的非管理員 kubeconfig 檔案來存取叢集,您必須在啟用及設定身分識別管理後,設定 RBAC 授權。如需 kubeconfig 檔案的詳細資訊,請參閱下面的管理員和非管理員 kubeconfig 檔案

若要設定 RBAC 授權,請為要使用標準非管理員 kubeconfig 檔案的每個管理叢集和工作負載叢集,建立一或多個角色繫結:

  1. 在您依照〈設定身分識別管理〉中所述,啟用及設定身分識別管理後,請為管理叢集建立一或多個角色繫結。如需相關指示,請參閱下面的為管理叢集設定 RBAC
  2. 為每個工作負載叢集建立一或多個角色繫結。如需相關指示,請參閱下面的為工作負載叢集設定 RBAC

如需角色繫結的詳細資訊,請參閱下面的角色和角色繫結

管理員和非管理員 kubeconfig 檔案

若要授與使用者對管理叢集或工作負載叢集的存取權,您需要產生 kubeconfig 檔案,然後將此檔案提供給這些使用者共用。如果您將叢集的管理員 kubeconfig 提供給他們,他們就具備叢集的完整存取權,而無需進行驗證。但是,如果您提供給使用者的是標準的非管理員 kubeconfig,則他們在您的 OIDC 或 LDAP 身分識別提供者中必須具有使用者帳戶,且您必須在叢集上設定 RBAC,以便將存取權限授與指定的使用者。

若要為管理叢集或工作負載叢集產生 kubeconfig 檔案,請針對管理叢集執行 tanzu mc kubeconfig get,或針對工作負載叢集執行 tanzu cluster kubeconfig get。執行這些命令時,命令的運作方式如下,其中有使用或不使用 --admin 選項:

  • 若有使用 --admin,則該命令會產生包含內嵌式認證的管理員 kubeconfig。當具有此 admin 版本的 kubeconfig 時,您與之共用該檔案的任何使用者都將具備叢集的完整存取權,且會略過身分識別提供者 (IdP) 的驗證。
  • 如果沒有使用 --admin,則該命令會產生一個標準的非管理員 kubeconfig,以提示使用者透過外部身分識別提供者進行驗證。之後,身分識別提供者會先驗證使用者的身分識別,然後使用者才能存取叢集的資源。

如需有關這些命令的詳細資訊,請參閱:

角色和角色繫結

角色會定義一組權限。您可以建立 Role,以便在特定命名空間內定義角色,或者建立 ClusterRole,以定義叢集範圍的角色。若要將該角色中所定義的權限授與使用者或使用者群組,您必須建立角色繫結。

資源 範圍 說明
Role 命名空間 定義可在命名空間特定的 RoleBinding 中使用的權限。
ClusterRole 叢集 定義可在 ClusterRoleBinding 或命名空間特定的 RoleBinding 中使用的權限。
RoleBinding 命名空間 授與特定命名空間內的權限。可以參考 RoleClusterRole
ClusterRoleBinding 叢集 授與叢集中所有命名空間之間的權限。只能參考 ClusterRole

預設使用者角色包括:

  • cluster-admin:對叢集具備完整存取權。當用於 RoleBinding 中時,此角色會授與對繫結中指定命名空間內之任何資源的完整存取權。
  • admin:對命名空間中大多數資源具備管理員存取權。可以在命名空間內建立及修改角色和角色繫結。
  • edit:對命名空間中大多數物件 (例如:部署、服務和網繭) 具備讀寫存取權。無法檢視、建立或修改角色和角色繫結。
  • view:對命名空間中大多數物件具備唯讀存取權。無法檢視、建立或修改角色和角色繫結。

如需這些角色的詳細資訊,請參閱 Kubernetes 說明文件中的使用 RBAC 授權

為管理叢集設定 RBAC

本節說明如何:

  1. 為管理叢集產生和測試非管理員 kubeconfig 檔案
  2. 在管理叢集上建立角色繫結

為管理叢集產生和測試非管理員 kubeconfig 檔案

在您執行 tanzukubectl 命令的所在機器上,如果存在瀏覽器,則此程序可讓您測試驗證程序的登入步驟。如果機器沒有瀏覽器,請參閱在沒有瀏覽器的機器上驗證使用者

  1. 將管理叢集的標準 kubeconfig 匯出至本機檔案,例如 /tmp/id_mgmt_test_kubeconfig。請注意,此命令不包含 --admin 選項,因此所匯出的 kubeconfig 是標準 kubeconfig,而不是 admin 版本。

    tanzu mc kubeconfig get --export-file /tmp/id_mgmt_test_kubeconfig
    

    您會看到以下的確認:You can now access the cluster by specifying '--kubeconfig /tmp/id_mgmt_test_kubeconfig' flag when using 'kubectl' command

  2. 使用新建立的 kubeconfig 檔案來連線至管理叢集:

    kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
    

    驗證程序會要求使用者用來連接至叢集的機器上存在瀏覽器,因為執行 kubectl 命令時,會自動開啟 IdP 登入頁面,以便使用者可以登入叢集。您的瀏覽器應會開啟,並顯示 OIDC 提供者的登入頁面或 LDAPS 登入頁面。

    LDAPS:

    LDAPS 登入頁面

    OIDC:

    OIDC 登入頁面

    輸入存在於 OIDC 或 LDAP 伺服器中的使用者帳戶的認證。成功登入後,瀏覽器應會顯示:

    登入成功

  3. 回到您執行 tanzukubectl 命令所在的終端機:

    • 如果您已為經過驗證的使用者,在叢集上設定了角色繫結,則會顯示 kubectl get pods -A 的輸出,其中顯示網繭資訊。

    • 如果您未在叢集上設定角色繫結,您會看到一則訊息,指出拒絕使用者帳戶存取網繭:Error from server (Forbidden): pods is forbidden: User "user@example.com" cannot list resource "pods" in API group "" at the cluster scope。發生這種情況的原因是,使用者已成功通過驗證,但他們尚未獲授權存取叢集上的任何資源。若要授權使用者存取叢集資源,您必須在管理叢集上建立角色繫結,如下所述。

在管理叢集上建立角色繫結

若要授與非管理員使用者對管理叢集的存取權,請產生並散佈 kubeconfig 檔案,如上面的為管理叢集產生和測試非管理員 kubeconfig 檔案所述。若要使此 kubeconfig 正常運作,您必須先在管理叢集上建立角色繫結,以設定 RBAC。此角色繫結會將角色型權限指派給經過驗證的個別使用者或使用者群組。

若要建立角色繫結,請執行下列動作:

  1. 請確定您使用的是管理叢集的 admin 內容:

    kubectl config current-context
    

    如果內容不是管理叢集 admin 內容,請將 kubectl 設定為使用該內容。例如:

    kubectl config use-context id-mgmt-test-admin@id-mgmt-test
    
  2. 列出現有角色:

    • 若要查看命名空間範圍的完整角色清單,請執行:

      kubectl get roles --all-namespaces
      
    • 若要查看叢集範圍的完整角色清單,請執行:

      kubectl get clusterroles
      
  3. 若要讓給定使用者與角色產生關聯,請建立角色繫結。

    • RoleBinding 可以參考 RoleClusterRole
    • ClusterRoleBinding 只能參考 ClusterRole

    以下範例是建立一個名為 id-mgmt-test-rb 叢集角色繫結,其會將叢集角色 cluster-admin 繫結至使用者 user@example.com

    kubectl create clusterrolebinding id-mgmt-test-rb --clusterrole cluster-admin --user user@example.com
    

    對於 --user,請指定使用者的 OIDC 或 LDAP 使用者名稱。您已在 Tanzu Kubernetes Grid 安裝程式介面的 [身分識別管理 (Identity Management)] 區段中,或藉由設定 LDAP_*OIDC_* 變數,設定了使用者名稱屬性和其他身分識別提供者詳細資料:

    • OIDC:使用者名稱屬性設定於安裝程式介面 OIDC 身分識別管理來源 (OIDC Identity Management Source) 下的使用者名稱宣告 (Username Claim) 欄位中,或設定於 OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM 組態變數中。
    • LDAPS:使用者名稱屬性設定於安裝程式介面 LDAPS 身分識別管理來源 (LDAPS Identity Management Source) –> 使用者搜尋屬性 (User Search Attributes) 下的使用者名稱 (Username) 欄位中,或設定於 LDAP_USER_SEARCH_NAME_ATTRIBUTE 組態變數中。

    例如,對於 OIDC,使用者名稱通常是使用者的電子郵件地址。對於 LDAPS,則是 LDAP 使用者名稱,而不是電子郵件地址。

  4. 嘗試使用您在先前程序中建立的 kubeconfig 檔案,再次連線至管理叢集:

    kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
    

    此時,由於使用者已繫結至此管理叢集上的 cluster-admin 角色,因此應會顯示網繭清單。您可以與在管理叢集上為其設定角色繫結的所有使用者共用產生的 kubeconfig 檔案。

為工作負載叢集設定 RBAC

本節說明如何:

為工作負載叢集產生和測試非管理員 kubeconfig 檔案

在您執行 tanzukubectl 命令的所在機器上,如果存在瀏覽器,則此程序可讓您測試驗證程序的登入步驟。如果機器沒有瀏覽器,請參閱在沒有瀏覽器的機器上驗證使用者

若要驗證工作負載叢集上的使用者,請執行以下步驟:

  1. 取得工作負載叢集的標準非管理員 kubeconfig,並匯出至檔案。以下範例會將叢集 my-clusterkubeconfig 匯出至 my-cluster-kubeconfig 檔案。

    tanzu cluster kubeconfig get my-cluster --export-file /tmp/my-cluster-kubeconfig
    
  2. 使用產生的檔案嘗試在叢集上執行作業。例如,執行:

    kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
    

    應會將您重新導向至身分識別提供者的登入頁面。使用身分識別提供者所提供的使用者帳戶成功登入後,如果您已為經過驗證的使用者,在叢集上設定了角色繫結,則輸出會顯示網繭資訊。

    如果您尚未在叢集上設定角色繫結,則會看到以下訊息:Error from server (Forbidden): pods is forbidden: User "<user>" cannot list resource "pods" in API group "" at the cluster scope。發生這種情況的原因是,該使用者在叢集上還沒有任何權限。若要授權使用者存取叢集資源,您必須在工作負載叢集上建立角色繫結

在工作負載叢集上建立角色繫結

若要完成工作負載叢集的身分識別管理組態,您必須為使用您在上一個步驟中產生的 kubeconfig 的使用者,建立角色繫結。

  1. kubectl 內容設定為工作負載叢集的 admin kubeconfig。您需要切換至工作負載叢集的 admin 內容,才能建立角色繫結。例如,執行以下兩個命令,以變更為 admin 內容:

    1. 取得 kubeconfig

      tanzu cluster kubeconfig get my-cluster --admin
      
    2. 切換內容:

      kubectl config use-context my-cluster-admin@my-cluster
      
  2. 若要檢視現有角色,請執行:

    • 若要查看命名空間範圍的完整角色清單,請執行:

      kubectl get roles --all-namespaces
      
    • 若要查看叢集範圍的完整角色清單,請執行:

      kubectl get clusterroles
      
  3. 若要讓給定使用者與角色產生關聯,請建立角色繫結。

    • RoleBinding 可以參考 RoleClusterRole
    • ClusterRoleBinding 只能參考 ClusterRole

    以下範例是建立一個名為 workload-test-rb 叢集角色繫結,其會將叢集角色 cluster-admin 繫結至使用者 user@example.com

    kubectl create clusterrolebinding workload-test-rb --clusterrole cluster-admin --user user@example.com
    

    對於 --user,請指定使用者的 OIDC 或 LDAP 使用者名稱。您已在 Tanzu Kubernetes Grid 安裝程式介面的 [身分識別管理 (Identity Management)] 區段中,或藉由設定 LDAP_*OIDC_* 變數,設定了使用者名稱屬性和其他身分識別提供者詳細資料:

    • OIDC:使用者名稱屬性設定於安裝程式介面 OIDC 身分識別管理來源 (OIDC Identity Management Source) 下的使用者名稱宣告 (Username Claim) 欄位中,或設定於 OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM 組態變數中。
    • LDAPS:使用者名稱屬性設定於安裝程式介面 LDAPS 身分識別管理來源 (LDAPS Identity Management Source) –> 使用者搜尋屬性 (User Search Attributes) 下的使用者名稱 (Username) 欄位中,或設定於 LDAP_USER_SEARCH_NAME_ATTRIBUTE 組態變數中。

    例如,對於 OIDC,使用者名稱通常是使用者的電子郵件地址。對於 LDAPS,則是 LDAP 使用者名稱,而不是電子郵件地址。

  4. 使用您在上面產生的標準 kubeconfig 檔案,嘗試再次於叢集上執行作業。例如,執行:

    kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
    

    此時,您應會看到正在工作負載叢集中執行的網繭清單。這是因為 my-cluster-kubeconfig 檔案的使用者已經過您的身分識別提供者的驗證,並在叢集上具有必要的權限。您可以與在叢集上為其設定角色繫結的所有使用者共用 my-cluster-kubeconfig 檔案。

後續步驟

與其他使用者共用產生的 kubeconfig 檔案,以允許他們存取叢集。

check-circle-line exclamation-circle-line close-line
Scroll to top icon