使用外部身分驗證 GKE on Azure

員工身分聯盟可授予非 Google 身分存取Google Cloud 服務的權限。就 Azure 上的 GKE 而言,這表示您可以使用現有的外部身分建立或存取 GKE 叢集,不必依賴 Google 憑證。

使用員工身分聯盟的優點如下:

  • 您不必在不同平台或供應商建立重複帳戶。
  • 您只需要設定一次權限,不必在多個平台上進行設定。
  • 您可簡化使用者存取權,因為登入次數和密碼需求較少。

事前準備

如要允許外部使用者或群組存取 GKE 叢集,請先完成下列步驟:

  1. 如要讓外部使用者或群組使用 GKE on Azure API,請設定員工身分聯盟:

  2. 為外部使用者或群組指派 gkemulticloud.viewer 角色,讓他們可以存取叢集。指派 container.clusterViewer 角色,在 Google Cloud 控制台中查看叢集。

    請注意,角色是一組權限。將角色指派給實體 (使用者、群組或服務帳戶) 時,您會授予該實體角色包含的所有權限。

    使用者

    如要為個別使用者指派角色,請按照下列步驟操作:gkemulticloud.viewer

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.viewer" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • WORKFORCE_POOL_ID:用來在 Google Cloud中專屬識別工作團隊身分集區的 ID。格式化 ID 時,請務必遵循 IAM 文件中「查詢參數」提供的建議做法。
    • SUBJECT_VALUE:可專屬識別外部使用者的 ID。舉例來說,ID 可以是電子郵件地址,例如 alex@cymbalgroup.com

    群組

    如要為群組指派角色,請指派 gkemulticloud.viewer 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.viewer" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • WORKFORCE_POOL_ID:用來在 Google Cloud中專屬識別工作團隊身分集區的 ID。格式化 ID 時,請務必遵循 IAM 說明文件「查詢參數」中提供的建議做法。
    • GROUP_ID:可專屬識別外部群組的 ID。
  3. 選用:為外部使用者或群組指派適當的 Identity and Access Management (IAM) 角色。只有在您想授予使用者或群組建立或更新叢集的權限時,才需要執行這個步驟;如要存取叢集,則不需要執行這個步驟

    使用者

    如要為個別使用者指派角色,請按照下列步驟操作:gkemulticloud.admin

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE"
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • WORKFORCE_POOL_ID:用來在 Google Cloud中專屬識別工作團隊身分集區的 ID。格式化 ID 時,請務必遵循 IAM 文件中「查詢參數」提供的建議做法。
    • SUBJECT_VALUE:可專屬識別外部使用者的 ID。舉例來說,ID 可以是電子郵件地址,例如 alex@cymbalgroup.com

    群組

    如要為群組指派角色,請指派 gkemulticloud.admin 角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --role="roles/gkemulticloud.admin" \
      --member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • WORKFORCE_POOL_ID:用來在 Google Cloud中專屬識別工作團隊身分集區的 ID。格式化 ID 時,請務必遵循 IAM 說明文件「查詢參數」中提供的建議做法。
    • GROUP_ID:可專屬識別外部群組的 ID。

如要進一步瞭解 GKE on Azure 需要哪些 API 角色和權限,請參閱「API 角色和權限」。

授予 GKE 叢集的外部存取權

設定員工身分聯盟的方法有兩種,可讓外部使用者或群組存取 GKE 叢集。

方法 1 需要定義 RBAC 檔案,並將其套用至叢集。這個方法可精細控管權限,例如允許使用者唯讀存取資源,但不會授予更廣泛的存取權。

方法 2 則要求您在建立或更新叢集時,指定外部身分的存取權。這個方法會將完整管理權限授予指定使用者或群組。

請選擇最符合所需存取權控管層級的方法:方法 1 可提供更精細的權限,方法 2 則可授予完整的叢集管理員權限。

方法 1:使用 RBAC 檔案

授予 GKE 叢集外部存取權的第一種方法是使用 RBAC 檔案。步驟如下:

  1. 定義 RBAC YAML 檔案,其中包含主體 (使用者或群組) 和您要在 GKE 叢集中授予的權限。以下是個別使用者和群組的 RBAC YAML 設定範例:

    使用者

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-user
    subjects:
    - kind: User
      name: principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/SUBJECT_VALUE
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    

    更改下列內容:

    • WORKFORCE_POOL_ID:用來在 Google Cloud中專屬識別工作團隊身分集區的 ID。格式化 ID 時,請務必遵循 IAM 說明文件「查詢參數」中提供的建議做法。
    • SUBJECT_VALUE:可專屬識別外部使用者的 ID。舉例來說,ID 可以是電子郵件地址,例如 alex@cymbalgroup.com

    群組

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: gateway-cluster-admin-group
    subjects:
    - kind: Group
      name: principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    

    更改下列內容:

    • WORKFORCE_POOL_ID:用來在 Google Cloud中專屬識別工作團隊身分集區的 ID。格式化 ID 時,請務必遵循 IAM 說明文件「查詢參數」中提供的建議做法。
    • GROUP_ID:可專屬識別外部群組的 ID。
  2. 找出要設定的 GKE 叢集,然後使用下列指令將其設為有效內容:

      kubectl config use-context CLUSTER_CONTEXT
    

    CLUSTER_CONTEXT 替換為叢集的適當內容名稱。

  3. 將所需的 GKE 叢集設為作用中內容後,請使用下列指令將 RBAC 設定套用至叢集:

    kubectl apply -f RBAC_PATH
    

    RBAC_PATH 替換為您建立或編輯的 RBAC 檔案路徑。

    執行這項指令後,RBAC 設定中指定的使用者或群組,現在就能存取及管理目標 GKE 叢集,權限如 RBAC 規則所定義。

  4. 如要對權限進行任何後續變更,請修改 RBAC 檔案,然後重複上述步驟,將檔案重新套用至叢集。

方法 2:在建立或更新叢集時授予外部身分存取權

方法 2 會在叢集建立或更新程序期間,授予外部身分的存取權。

如要建立叢集,請按照「建立叢集」一文中的步驟操作。 如要更新叢集,請按照「更新叢集」一節的步驟操作。

執行 gcloud 指令來建立或更新叢集時,請指定 admin-users 和/或 admin-groups 參數,如下所示:

gcloud container azure clusters [create|update] CLUSTER_NAME \
    --location=LOCATION
    --admin-users=principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject SUBJECT_VALUE \
    --admin-groups=principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • LOCATION:叢集管理的 Google Cloud 區域。
  • WORKFORCE_POOL_ID:用來在 Google Cloud中專屬識別工作團隊身分集區的 ID。格式化 ID 時,請務必遵循 IAM 說明文件「查詢參數」中提供的建議做法。
  • SUBJECT_VALUE:可專屬識別外部使用者的 ID。舉例來說,ID 可以是電子郵件地址,例如 alex@cymbalgroup.com
  • GROUP_ID:可專屬識別外部群組的 ID。

授予外部 ID 存取 GKE 叢集的權限摘要

執行方法 1 或方法 2 後,指定外部使用者或群組即可使用 Google Cloud 控制台連線及查看叢集詳細資料。或者,他們可以使用 kubectl 和 gcloud CLI 的身分,管理、操控及與叢集通訊。

如要對 GKE 叢集執行 kubectl 指令,請參閱如何產生 kubeconfig 項目