設定 RBAC 適用的 Google 群組


本頁說明如何設定 Google 群組,以便在 Google Kubernetes Engine (GKE) 叢集中使用 Kubernetes 角色型存取權控管 (RBAC)。

透過 RBAC 適用的 Google 群組,您可以將 RBAC 權限指派給 Google Workspace 中 Google 群組的成員。Google Workspace 管理員會維護使用者和群組,完全獨立於 GKE 或 Google Cloud 控制台。因此,叢集管理員不需要使用者的詳細資訊。

使用 Google 群組進行 RBAC,也能整合現有的使用者帳戶管理做法,例如在使用者離開貴機構時撤銷存取權。

本頁面適用於想要在 GKE 叢集中搭配使用 Google 群組與 Kubernetes RBAC 的安全專家和作業人員。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱常見的 GKE Enterprise 使用者角色和工作

閱讀本頁內容前,請務必先瞭解建立群組及新增使用者為成員時的 Google 群組限制

如要使用 Google 群組進行 RBAC,請完成下列工作:

  1. 符合相關規定
  2. 設定 Google 網路論壇
  3. 在叢集上啟用 RBAC 適用的 Google 群組
  4. 為 Google 群組定義及指派 RBAC 權限

需求條件

如要使用「透過 Google 網路論壇進行角色型存取控管」功能,您必須有權存取 Google Workspace 或任何版本的 Cloud Identity

限制

  • 透過 RBAC 適用的 Google 網路論壇,GKE 支援安全性群組中最多 2000 個群組的成員,包括巢狀成員。

設定 Google 網路論壇

下列步驟說明如何在 Google 網路論壇中設定與 RBAC 搭配使用的群組:

  1. 在網域中建立名為 gke-security-groups 的群組。必須輸入gke-security-groups名稱。請確認群組已為「群組成員」選取「查看成員」權限。詳情請參閱「設定成員和內容管理權限」。

  2. 如果代表一群使用者的群組 (或是代表在您的叢集上擁有不同權限的群體) 尚不存在,請建立群組,例如開發人員和叢集管理員。每個群組都必須具備「查看成員」權限,才能查看「群組成員」

  3. 將群組新增為 gke-security-groups 群組的巢狀群組。請勿將個別使用者新增為 gke-security-groups 的成員。

如要進一步瞭解如何管理 Google 群組,請參閱 Google 群組說明中心

如要檢查特定使用者是否能對叢集資源執行動作,GKE 會檢查該使用者是否為擁有存取權的群組成員,以及該群組是否巢狀位於 gke-security-groups 群組中。

Google 群組成員資訊會在短時間內快取。 群組成員資格的變更,可能需要幾分鐘時間才會反映到所有叢集。除了群組變更造成的延遲,叢集上使用者憑證的標準快取約為一小時。

在叢集上啟用 RBAC 適用的 Google 群組

您可以使用 Google Cloud CLI 或 Google Cloud 控制台,在新舊 GKE Standard 和 Autopilot 叢集上啟用 RBAC 適用的 Google 群組。

建立新叢集

gcloud

標準

如要建立新的標準叢集並啟用 RBAC 適用的 Google 群組,請執行下列指令:

gcloud container clusters create CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

更改下列內容:

  • CLUSTER_NAME:新叢集的名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • DOMAIN:您建立的gke-security-groups群組網域名稱。

Autopilot

如要建立新的 Autopilot 叢集並啟用 RBAC 適用的 Google 群組,請執行下列指令:

gcloud container clusters create-auto CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

控制台

如要建立新叢集並啟用 RBAC 適用的 Google 群組功能,請執行下列步驟:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下「 Create」(建立)

  3. 按一下要使用的叢集模式的「設定」

  4. 如為 Autopilot 叢集,請展開「Advanced Options」(進階選項) 部分,找出「Security」(安全性) 選項。

  5. 如果是 Standard 叢集,請在「Cluster」(叢集) 區段中按一下「Security」(安全性)

  6. 勾選「Enable Google Groups for RBAC」(啟用 RBAC 適用的 Google 群組) 核取方塊。

  7. 在「Security Group」(安全性群組) 中填入 gke-security-groups@DOMAIN

  8. 點選「建立」

更新現有叢集

gcloud

如要更新現有叢集,啟用 RBAC 適用的 Google 群組,請執行下列指令:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --security-group="gke-security-groups@DOMAIN"

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • DOMAIN:您建立的gke-security-groups群組網域名稱。

控制台

如要更新現有叢集,啟用 RBAC 適用的 Google 群組,請執行下列步驟:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下要更新的叢集名稱。

  3. 在「Details」(詳細資料) 分頁中,找到「Security」(安全性) 區段。

  4. 在「Google Groups for RBAC」(RBAC 適用的 Google 群組) 欄位中,按一下 「Edit Google Groups for RBAC」(編輯 RBAC 適用的 Google 群組)

  5. 勾選「Enable Google Groups for RBAC」(啟用 RBAC 適用的 Google 群組) 核取方塊。

  6. 在「Security Group」(安全性群組) 中填入 gke-security-groups@DOMAIN

  7. 按一下 [儲存變更]。

定義及指派權限

建立及設定 RBAC 適用的 Google 網路論壇後,請使用角色和角色繫結定義 RBAC 權限,並將這些權限指派給 gke-security-groups 群組的成員 Google 網路論壇。如需操作說明,請參閱「定義及指派權限」。

驗證 RBAC 適用的 Google 群組設定

以下各節說明如何使用 gcloud CLI 或Google Cloud 控制台,確認您是否已成功設定 RBAC 適用的 Google 群組。

使用 gcloud CLI 驗證

執行 kubectl can-i 指令,檢查您是否可以對特定 Kubernetes 資源執行特定動作。您可以使用這個方法,在 CI/CD 工作流程中自動測試 RBAC 存取權。舉例來說,下列指令會測試 dev 命名空間中 pods 資源的 get 存取權:

kubectl auth can-i get pods \
    --namespace=dev \
    --as=USER \
    --as-group=GROUP

更改下列內容:

  • USER:要模擬的使用者名稱,例如 gke-user@example.com。指定使用者必須是您要測試存取權的群組成員。
  • GROUP:要模擬的群組名稱,例如 gke-dev-users@example.com

如果 USER 有存取權,輸出內容為 yes。如果不是,則輸出 no

使用 Google Cloud 控制台驗證

您也可以對叢集執行 kubectl 指令並檢查記錄,驗證 RBAC 存取權。

事前準備

在開始之前,請確認下列事項:

  • 您至少一小時未與要測試的叢集互動 (例如未執行任何 kubectl 指令)。驗證資訊會快取一小時。讓快取憑證過期,可確保要求發生時會記錄下來。
  • 您是gke-security-groups群組成員所屬的至少一個群組成員,確保系統會記錄部分 Google 協作平台資訊。

啟用記錄並執行測試指令

  1. 為 Google Cloud 專案啟用資料存取記錄。如要啟用記錄功能:

    1. 前往 Google Cloud 控制台的「稽核記錄」頁面。

      前往「Audit Logs」(稽核記錄) 頁面

    2. 在表格中選取「Kubernetes Engine API」

    3. 在「記錄類型」選單中,選取下列任一選項:

      • 「Admin Read」(管理員讀取)
      • 「Data Read」(資料讀取)
      • 「Data Write」(資料寫入)
    4. 按一下 [儲存]

    想進一步瞭解如何啟用稽核記錄,請參閱「透過 Cloud 控制台設定資料存取記錄檔」一文。

  2. 請在叢集中使用 kubectl 執行指令,例如:

    kubectl create ns helloworld
    
  3. 在「Logs Explorer」(記錄檔探索工具) 頁面中輸入自訂查詢。執行查詢:

    1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

      前往記錄檔探索工具

    2. 按一下頁面頂端「查詢預覽」方塊中的箭頭。

    3. 在隨即顯示的下拉式方塊中,指定下列查詢:

      resource.type="k8s_cluster"
      resource.labels.location="CLUSTER_LOCATION"
      resource.labels.cluster_name="CLUSTER_NAME"
      protoPayload.resourceName="authorization.k8s.io/v1beta1/subjectaccessreviews"
      protoPayload.response.spec.user="EMAIL_ADDRESS"
      

      更改下列內容:

      • CLUSTER_LOCATION:叢集所在的區域或可用區。
      • CLUSTER_NAME:叢集名稱。
      • EMAIL_ADDRESS:您 Google 帳戶註冊的電子郵件地址。
    4. 選取「Run Query」(執行查詢),至少應會顯示一項結果。如果沒有任何結果,請嘗試增加時間範圍。

    5. 選擇您要查看的叢集。

    6. 按一下「Expand nested fields」(展開巢狀欄位)

    7. protoPayload.request.spec.group 欄位包含的群組:

      • 這些群組是 gke-security-group 的成員。
      • 您是群組的成員。

      這份清單應與您所屬的群組相符。如果沒有群組,可能是群組的設定方式有問題。

  4. 您也可以選擇將資料存取記錄還原為先前的設定,以免產生額外費用。

刪除群組的影響

設定 RBAC 適用的 Google 群組後,RBAC 存取權授權取決於您建立的 Google 群組是否存在。請注意,刪除群組會造成下列影響:

  • gke-security-group:GKE 會使用gke-security-group群組的專屬 ID,找出您在 RBAC 政策中參照的主體。如果刪除這個群組,所有 RBAC 適用的 Google 群組存取權授權都會失敗。

    如果重新建立 gke-security-group 群組,請按照「更新現有叢集」一節中的步驟,在叢集上重新啟用 RBAC 適用的 Google 群組。重新啟用 RBAC 適用的 Google 群組後,叢集會更新為使用新 gke-security-group 群組的群組 ID。

  • 成員群組:如果您刪除為 RBAC 適用的 Google 群組設定的其中一個成員群組,該群組的所有 RBAC 繫結都會失敗。因此,該群組的所有成員都會失去相應的存取權。

    如要修正成員群組遭誤刪的問題,請建立新群組,並使用與遭刪除群組完全相同的名稱。按照「設定 Google 網路論壇」一節中的步驟,將新群組設為 gke-security-group 群組的成員。

後續步驟