設定 RBAC 適用的 Google 群組

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

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

使用 Google 網路論壇進行 RBAC,也能與現有的使用者帳戶管理做法整合,例如在人員離職時撤銷存取權。

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

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

如要將 Google 群組用於 RBAC,請完成下列工作:

  1. 符合規定。
  2. 設定 Google 群組。
  3. 在叢集上啟用 RBAC 適用的 Google 群組。
  4. 定義 RBAC 權限並指派給 Google 群組。

需求條件

如要使用 Google 網路論壇進行 RBAC,您必須具備 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. 按一下 「建立」。

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

  4. 在導覽窗格中,按一下「進階設定」,然後執行下列任一操作:

    • Autopilot:展開「Security」(安全性) 區段,勾選「Enable Google Groups for RBAC」(啟用 RBAC 適用的 Google 群組) 核取方塊,然後在「Security Group」(安全性群組) 中填入 gke-security-groups@DOMAIN。
    • 標準:在「Google Groups for RBAC」(RBAC 適用的 Google 群組) 列中,按一下 「Edit configuration」(編輯設定),選取「Enable Google Groups for RBAC」(啟用 RBAC 適用的 Google 群組) 核取方塊,在「Security Group」(安全性群組) 中填入 gke-security-groups@DOMAIN,然後按一下「Save」(儲存)。
  5. 點選「建立」。

更新現有叢集

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. 在「Log Type」(記錄類型) 選單中,選取下列任一選項:

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

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

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

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

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

      前往 Logs Explorer

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

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

      resource.type="k8s_cluster"
      resource.labels.location="CLUSTER_LOCATION"
      resource.labels.cluster_name="CLUSTER_NAME"
      protoPayload.resourceName="authorization.k8s.io/v1/selfsubjectaccessreviews"
      protoPayload.authenticationInfo.principalEmail="EMAIL_ADDRESS"
      

      更改下列內容:

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

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

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

    7. labels.authorization.k8s.io/decision 欄位會顯示要求是否獲得允許或遭到拒絕。

    8. labels."authorization.k8s.io/reason" 欄位包含 Google 群組的名稱。這個群組是 gke-security-group 的成員,並對應至決定存取權的 Kubernetes 群組。

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

刪除群組的影響

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

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

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

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

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

後續步驟