設定機群層級驗證管理

本文說明叢集管理員如何使用機群,設定多個叢集,以便透過第三方身分提供者進行驗證。 Google Cloud 會管理機群中的叢集設定,因此設定程序比設定個別叢集更快、更簡單。如要進一步瞭解第三方供應商驗證程序,請參閱「關於使用第三方身分驗證」一文。

事前準備

  1. 安裝及設定 Google Cloud CLI:

    1. 安裝 Google Cloud CLI。

    2. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

    3. 執行下列指令,初始化 gcloud CLI:

      gcloud init
    4. 初始化 gcloud CLI 後,請更新 gcloud CLI 並安裝必要元件:

      gcloud components update
      gcloud components install kubectl
    5. 在 gcloud CLI 中,選取機群主專案:
      gcloud config set project FLEET_HOST_PROJECT_ID
      將 FLEET_HOST_PROJECT_ID 替換為機群主專案的專案 ID。

  2. 啟用必要的 API:

    1. 前往 Google Cloud 控制台的專案選取器頁面:

      前往專案選取器

    2. 選取機群主專案。

    3. 如果尚未啟用 GKE Hub 和 Kubernetes Engine API,請先啟用。

      啟用 API 時所需的角色

      如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過服務使用情形管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

      啟用 API

  3. 請確認平台管理員已提供所選通訊協定需要的所有供應商資訊。詳情請參閱下列文件:

必要的角色

如要取得在機群層級設定叢集所需的權限,請要求管理員授予機群主專案的機群管理員 (roles/gkehub.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

啟用艦隊層級身分識別服務功能

機群層級身分識別服務功能會使用控制器,管理機群中每個叢集的設定。您只需要在機群主專案中啟用機群層級功能。

如要啟用車隊層級功能,請選取下列任一選項:

控制台

  1. 前往 Google Cloud 控制台的「GKE 身分認證服務」頁面。

    前往 GKE 身分認證服務

  2. 按一下「Enable Identity Service」(啟用身分識別服務)。

gcloud

啟用機群層級身分識別服務功能:

gcloud container fleet identity-service enable

設定叢集

如要設定叢集,您必須指定下列資訊:

  • 身分識別提供者相關資訊,例如用戶端 ID 和密鑰。
  • 身分識別提供者用於驗證的 JSON Web Token (JWT) 相關資訊。
  • 身分識別提供者專屬的其他範圍或參數。

如要進一步瞭解您需要向平台管理員或貴機構的身分管理員索取哪些資訊,請參閱下列文件:

如果您已為 OIDC 提供者設定叢集層級設定,將機群層級設定套用至叢集時,系統會覆寫所有現有的驗證規格。此外,如果現有叢集層級的供應商設定不支援機群層級設定,這項設定就會失敗。您必須移除現有的供應商設定,才能套用機群層級設定。

如要設定叢集,請按照下列步驟操作:

控制台

  1. 選取要設定的叢集:

    1. 前往 Google Cloud 控制台的「GKE 身分認證服務」頁面。

      前往功能管理工具

    2. 選取要設定的叢集,勾選一或多個核取方塊。您可以選擇個別叢集,也可以指定要為所有叢集設定相同的身分識別設定。如果您已設定機群層級預設值,系統會將設定調整回預設值。

    3. 按一下「更新設定」。「編輯身分識別服務叢集設定」窗格隨即開啟。

    4. 在「身分識別提供者」部分,選擇叢集的設定方式。您可以更新現有設定、從其他叢集複製設定,或建立新設定。如要建立新設定,請按一下「新增身分識別提供者」。系統會顯示「New Identity Provider」部分。

  2. 在「New Identity Provider」部分,設定提供者詳細資料:

    OIDC

    1. 選取「New Open ID Connect」,建立新的 OIDC 設定。
    2. 在「Provider name」(供應商名稱) 欄位中,指定要用來識別這項設定的名稱,通常是身分識別提供者名稱。名稱開頭須為英文字母,其後最多可接 39 個小寫英文字母、數字或連字號,而且結尾不得為連字號。設定建立後,您就無法編輯這個名稱。
    3. 在「Client ID」欄位中,指定來自識別資訊提供者的用戶端 ID。
    4. 在「Client Secret」(用戶端密鑰) 欄位中,指定用戶端應用程式與身分識別提供者之間共用的用戶端密鑰。
    5. 在「核發者網址」欄位中,指定向識別資訊提供者發出授權要求的 URI。
    6. 按一下「Next」(下一步),設定 OIDC 屬性。

    Azure AD

    1. 選取「新的 Azure Active Directory」,建立新的 Azure AD 設定。
    2. 在「Provider name」(提供者名稱) 欄位中,指定要用來識別這項設定的名稱,通常是識別資訊提供者名稱。名稱開頭須為英文字母,其後最多可接 39 個小寫英文字母、數字或連字號,而且結尾不得為連字號。設定建立後,即無法編輯這個名稱。
    3. 在「Client ID」欄位中,指定來自識別資訊提供者的用戶端 ID。
    4. 在「Client Secret」(用戶端密鑰) 欄位中,指定必須在用戶端應用程式和識別資訊提供者之間共用的用戶端密鑰。
    5. 在「Tenant」中,指定要驗證的 Azure AD 帳戶所屬的租戶。
    6. 按一下「下一步」,設定 Azure AD 屬性。

    LDAP

    1. 選取「LDAP」建立新的 LDAP 設定。
    2. 在「Provider name」(供應商名稱) 欄位中,指定要用來識別這項設定的名稱,通常是身分識別提供者名稱。名稱開頭須為英文字母,其後最多可接 39 個小寫英文字母、數字或連字號,而且結尾不得為連字號。設定建立後,即無法編輯這個名稱。
    3. 點選「下一步」。
    4. 指定主機名稱 (必要)、LDAP 連線類型,以及 LDAP 伺服器的 Base64 編碼 CA 憑證。
    5. 按一下「下一步」設定伺服器。
    6. 指定使用者的識別名稱、篩選器、登入屬性和 ID 屬性。
    7. 按一下「下一步」設定使用者詳細資料。
    8. 如果選擇使用群組,請指定群組的識別名稱、篩選器和 ID 屬性。
    9. 點選「下一步」設定群組詳細資料。
    10. 指定服務帳戶的使用者名稱和密碼。
    11. 按一下「完成」,即可設定服務帳戶名稱。
  3. 點選「下一步」。「設定屬性」部分隨即開啟。

  4. 設定識別資訊提供者的屬性。如要查看 OIDC 或 Azure AD 的屬性,請選取下列其中一個選項:

    OIDC

    • kubectl 重新導向 URI:gcloud CLI 使用的重新導向網址和連接埠,由平台管理員在註冊時指定,通常採用 http://localhost:PORT/callback 格式。
    • 憑證授權單位 (選用):如果平台管理員有提供,請輸入識別資訊提供者的 PEM 編碼憑證字串。
    • 群組聲明 (選用):供應商用來傳回帳戶安全性群組的 JWT 聲明 (欄位名稱)。
    • 群組前置字串 (選用):您要附加至安全群組名稱的前置字串,可避免與存取控管規則中的現有名稱衝突 (如果您有多個身分提供者設定,通常是提供者名稱)。
    • Proxy (選用):如適用,用於連線至身分識別提供者的 Proxy 伺服器位址。舉例來說,如果叢集位於私人網路中,且需要連線至公開身分識別提供者,您可能就需要設定這項屬性。例如:http://user:password@10.10.10.10:8888。
    • 範圍 (選用):身分識別供應商要求的任何其他範圍。Microsoft Azure 和 Okta 需要 offline_access 範圍。如有需要,請按一下「Add scope」(新增範圍),新增更多範圍。
    • 使用者聲明 (選用):供應商用來識別帳戶的 JWT 聲明 (欄位名稱)。如果未在此指定值,叢集會使用「sub」,這是許多供應商使用的使用者 ID 聲明。視 OpenID 供應商而定,您可以選擇其他憑證附加資訊,例如「email」或「name」。「email」以外的憑證附加資訊會加上核發者網址前置字串,以免名稱衝突。
    • 使用者前置字串 (選用):如果不想使用預設前置字串,可以為使用者聲明加上前置字串,避免與現有名稱衝突。
    • 額外參數 (選用):設定所需的任何額外參數,指定為參數「鍵」和「值」。視需要按一下「新增參數」,新增更多參數。
    • 啟用存取權杖 (選用):啟用後,即可支援 Okta 等 OIDC 提供者。
    • 部署 Google Cloud 控制台 Proxy (選用):啟用後,系統會部署 Proxy,讓 Google Cloud 控制台連線至無法透過網際網路公開存取的地端部署身分識別提供者。

    Azure AD

    • kubectl 重新導向 URI:gcloud CLI 使用的重新導向網址和連接埠,由平台管理員在註冊時指定,通常採用 http://localhost:PORT/callback 格式。
    • 使用者聲明 (選用):供應商用來識別帳戶的 JWT 聲明 (欄位名稱)。如未在此指定值,叢集會依序使用「email」、「preferred_username」或「sub」的值擷取使用者詳細資料。
    • Proxy (選用):如適用,用於連線至身分識別提供者的 Proxy 伺服器位址。舉例來說,如果叢集位於私人網路中,且需要連線至公開身分識別提供者,您可能就需要設定這項屬性。例如:http://user:password@10.10.10.10:8888。
  5. 按一下「完成」。

  6. 選用:如要在設定中新增更多供應商,請按一下「新增識別資訊提供者」,然後重複上述步驟。

  7. 按一下「更新設定」。

視需要安裝所有必要元件,並在所選叢集上套用用戶端設定。

gcloud

如要使用 gcloud CLI 設定車隊,請建立名為 ClientConfig 的 Kubernetes 自訂資源,並填入叢集與身分識別提供者互動所需的所有資訊。如要建立及使用 ClientConfig,請按照下列步驟操作:

  1. 在名為 auth-config.yaml 的檔案中建立 ClientConfig 規格。 如要查看 OIDC、SAML 或 LDAP 的設定範例,請選取下列任一選項。如需其他身分識別提供者設定,請參閱「特定供應商的設定」。

    OIDC

    以下 ClientConfig 範例同時顯示 oidc 設定和 azuread 設定。如要進一步瞭解何時該使用 oidc 或 azuread,請參閱「供應商專屬設定」。

    apiVersion: authentication.gke.io/v2alpha1
    kind: ClientConfig
    metadata:
      name: default
      namespace: kube-public
    spec:
      authentication:
      - name: NAME
        proxy: PROXY_URL
        oidc:
          certificateAuthorityData: CERTIFICATE_STRING
          clientID: CLIENT_ID
          clientSecret: CLIENT_SECRET
          deployCloudConsoleProxy: PROXY_BOOLEAN
          extraParams: EXTRA_PARAMS
          groupsClaim: GROUPS_CLAIM
          groupPrefix: GROUP_PREFIX
          issuerURI: ISSUER_URI
          kubectlRedirectURI: http://localhost:PORT/callback
          scopes: SCOPES
          userClaim: USER_CLAIM
          userPrefix: USER_PREFIX
      - name: azure
        azureAD:
          clientID: CLIENT_ID
          clientSecret: CLIENT_SECRET
          tenant: TENANT_UUID
          kubectlRedirectURI: http://localhost:PORT/callback
          groupFormat: GROUP_FORMAT
          userClaim: USER_CLAIM
    

    如要進一步瞭解 oidc 物件中的欄位,請參閱「ClientConfig OIDC 欄位」。

    SAML

    以下 ClientConfig 範例顯示 saml 設定:

        apiVersion: authentication.gke.io/v2alpha1
        kind: ClientConfig
        metadata:
          name: default
          namespace: kube-public
        spec:
          authentication:
          - name: NAME
            saml:
              idpEntityID: ENTITY_ID
              idpSingleSignOnURI: SIGN_ON_URI
              idpCertificateDataList: IDP_CA_CERT
              userAttribute: USER_ATTRIBUTE
              groupsAttribute: GROUPS_ATTRIBUTE
              userPrefix: USER_PREFIX
              groupPrefix: GROUP_PREFIX
              attributeMapping:
                ATTRIBUTE_KEY_1 : ATTRIBUTE_CEL_EXPRESSION_1
                ATTRIBUTE_KEY_2 : ATTRIBUTE_CEL_EXPRESSION_2
            certificateAuthorityData: CERTIFICATE_STRING
            preferredAuthentication: PREFERRED_AUTHENTICATION
            server: <>
    

    如要進一步瞭解這些欄位,請參閱「ClientConfig SAML 欄位」。

    LDAP

    以下 ClientConfig 範例顯示 ldap 設定:

    apiVersion: authentication.gke.io/v2alpha1
    kind: ClientConfig
    metadata:
      name: default
      namespace: kube-public
    spec:
      authentication:
      - name: ldap
        ldap:
          server:
            host: HOST_NAME
            connectionType: CONNECTION_TYPE
            certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
          user:
            baseDn: BASE_DN
            loginAttribute: LOGIN_ATTRIBUTE
            filter: FILTER
            identifierAttribute: IDENTIFIER_ATTRIBUTE
          group:
            baseDn: BASE_DN
            filter: FILTER
            identifierAttribute: IDENTIFIER_ATTRIBUTE
          serviceAccount:
            simpleBindCredentials:
              dn: DISTINGUISHED_NAME
              password: PASSWORD
    

    如要進一步瞭解這些欄位,請參閱「ClientConfig LDAP 欄位」。

    您可以在同一個 ClientConfig 中新增多個識別資訊提供者設定。叢集會嘗試依定義順序,使用各項設定進行驗證,並在首次驗證成功後停止。

  2. 將 ClientConfig 套用至叢集:

    gcloud container fleet identity-service apply \
        --membership=CLUSTER_NAME \
        --config=auth-config.yaml
    

    將 CLUSTER_NAME 替換為叢集在機群中的專屬名稱。

叢集會安裝所有必要元件,並使用您建立的 ClientConfig。機群層級控制器會管理叢集的設定。叢集設定的任何本機變更,都會由控制器協調至機群層級設定。

對於部分叢集版本,套用機群層級設定時,系統也會預設在叢集中新增額外的 authentication 設定。這樣一來,叢集就能為使用 Google ID 登入的使用者帳戶擷取 Google 群組資訊。這項設定適用於 Google Distributed Cloud 上的叢集 (包括 VMware 和裸機)。如要進一步瞭解 Google 群組功能,請參閱「使用 Google 群組設定連線閘道」。

如果不想再讓機群層級控制器管理設定 (例如想使用其他驗證選項),可以按照「停用機群層級身分管理」一文中的操作說明停用這項功能。

供應商專屬設定

本節提供 OIDC 提供者 (例如 Azure AD 和 Okta) 的設定指南,包括可複製並以您自己的詳細資料編輯的設定範例。

Azure AD

這是使用 Azure AD 設定驗證的預設設定。使用這項設定,叢集就能從 Azure AD 取得使用者和群組資訊,並根據群組設定 Kubernetes 角色型存取權控管 (RBAC)。不過,使用這項設定時,每位使用者只能擷取約 200 個群組。

如需為每位使用者擷取超過 200 個群組,請參閱 Azure AD (進階) 的操作說明。

...
spec:
  authentication:
  - name: oidc-azuread
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
      extraParams: prompt=consent, access_type=offline
      issuerURI: https://login.microsoftonline.com/TENANT_ID/v2.0
      kubectlRedirectURI: http://localhost:PORT/callback
      scopes: openid,email,offline_access
      userClaim: email

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

Azure AD (進階)

這個 Azure AD 選用設定可讓叢集使用 Microsoft Graph API 擷取使用者和群組資訊,且每位使用者的群組數量不受限制。如要瞭解支援這項設定的平台,請參閱「身分識別提供者設定資訊」。

如果每位使用者需要擷取的群組少於 200 個,建議您使用 ClientConfig 中的 oidc 錨點,採用預設設定。詳情請參閱 Azure AD 的操作說明。

範例設定中的所有欄位均為必填。

...
spec:
  authentication:
  - name: azure
    azureAD:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      tenant: TENANT_UUID
      kubectlRedirectURI: http://localhost:PORT/callback
      groupFormat: GROUP_FORMAT
      userClaim: USER_CLAIM

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

將 GROUP_FORMAT 替換成要擷取群組資訊的格式。這個欄位的值可對應使用者群組的 ID 或 NAME。這項設定僅適用於 Google Distributed Cloud (地端) 部署作業中的叢集。

Okta

以下說明如何使用 Okta 做為識別資訊提供者,設定使用者和群組的驗證機制。這項設定可讓叢集使用存取權杖和 Okta 的 userinfo 端點,擷取使用者和群組憑證附加資訊。

...
spec:
  authentication:
  - name: okta
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
      enableAccessToken: true
      extraParams: prompt=consent
      groupsClaim: groups
      issuerURI: https://OKTA_ISSUER_URI/
      kubectlRedirectURI: http://localhost:PORT/callback
      scopes: offline_access,email,profile,groups
      userClaim: email

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

設定機群層級預設值

您可以指定機群層級的驗證預設設定。完成這項設定後,您向機群註冊的每個新叢集都會自動使用您指定的驗證設定。

指定機群層級預設設定時,現有機群成員叢集不會自動更新。您可以選擇將預設設定套用至這些叢集。如要進一步瞭解如何管理機群層級設定,請參閱「管理機群層級功能」。

設定機群層級預設值後,當機群控制器將叢集與預設設定進行協調時,個別叢集驗證設定的所有本機變更都會遭到覆寫。

如要設定機群層級的預設設定,請按照下列步驟操作:

  1. 在名為 fleet-default.yaml 的檔案中建立 ClientConfig。如要進一步瞭解如何建立檔案,請參閱「設定叢集」一節中的 gcloud CLI 步驟。
  2. 如要套用車隊層級的預設設定,請執行下列其中一個指令:

    • 如果未啟用機群層級身分識別服務功能,請啟用該功能並指定機群層級預設設定:

      gcloud container fleet identity-service enable --fleet-default-member-config=fleet-default.yaml
    • 如果已啟用機群層級身分識別服務功能,請套用新的機群層級預設設定:

      gcloud container fleet identity-service apply --fleet-default-member-config=default-config.yaml

    您向機群註冊的新叢集預設會使用這項設定。現有的機群成員叢集不會自動沿用新的預設設定。

  3. 如要將預設設定套用至現有車隊成員叢集,請執行下列指令:

    gcloud container fleet identity-service apply --origin=fleet --membership=CLUSTER_NAME

移除機群層級的預設設定

如要移除預設設定,請執行下列指令:

gcloud container fleet identity-service delete --fleet-default-member-config

向機群註冊的新叢集不會自動使用驗證設定。

驗證身分識別服務設定

完成機群層級設定後,您可以確認機群中的叢集是否已成功套用您指定的身分識別服務設定。

控制台

  1. 前往 Google Cloud 控制台的「Feature Manager」頁面。

    前往功能管理工具

    所有已啟用的功能都會在面板中列為「已啟用」。

  2. 在「身分識別服務」面板中,按一下「詳細資料」。詳細資料面板會顯示已註冊叢集的狀態。

gcloud

執行下列指令:

gcloud container fleet identity-service describe

後續步驟

設定叢集後,請繼續設定使用者存取權。