設定機群層級驗證管理

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

事前準備

  1. 安裝及設定 Google Cloud CLI:

    1. Install the 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. Enable the GKE Hub and Kubernetes Engine APIs.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the APIs

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

必要的角色

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

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

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

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

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

控制台

  1. 前往 Google Cloud 控制台的「GKE Identity Service」頁面。

    前往功能管理工具

  2. 按一下「啟用 Identity 服務」

gcloud

啟用機群層級的 Identity 服務功能:

gcloud container fleet identity-service enable

設定叢集

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

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

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

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

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

控制台

  1. 選取要設定的叢集:

    1. 前往 Google Cloud 控制台的「GKE Identity Service」頁面。

      前往功能管理工具

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

    3. 按一下「更新設定」。「編輯 Identity Service 叢集設定」窗格隨即開啟。

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

  2. 在「新增識別資訊提供者」部分,設定提供者詳細資料:

    OIDC

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

    Azure AD

    1. 選取「新的 Azure Active Directory」,建立新的 Azure AD 設定。
    2. 在「Provider name」(供應商名稱) 欄位中,指定要用來識別這項設定的名稱,通常是身分識別提供者名稱。名稱開頭須為英文字母,其後最多可接 39 個小寫英文字母、數字或連字號,但結尾不得為連字號。設定建立後,您就無法編輯這個名稱。
    3. 在「用戶端 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 範圍。視需要按一下「新增範圍」,新增更多範圍。
    • 使用者聲明 (選用):供應商用來識別帳戶的 JWT 聲明 (欄位名稱)。如未在此指定值,叢集會使用「sub」,這是許多供應商使用的使用者 ID 聲明。視 OpenID 供應商而定,您可以選擇其他憑證附加資訊,例如「電子郵件地址」或「姓名」。「電子郵件地址」以外的憑證附加資訊都必須在前方加上核發者網址,以免發生命名衝突。
    • 使用者前置字元 (選用):如果不想使用預設前置字元,請輸入要加在使用者憑證附加資訊前方的字串,避免與現有的名稱衝突。
    • 額外參數 (選用):設定所需的任何額外參數,指定為參數「鍵」和「值」。如要新增更多參數,請按一下「新增參數」
    • 啟用存取權權杖 (選用):啟用後,即可支援 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 設定。如要進一步瞭解何時該使用 oidcazuread,請參閱「供應商專屬設定」。

    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 替換為您要擷取群組資訊的格式。這個欄位可以採用與使用者群組的 IDNAME 相對應的值。這項設定僅適用於 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

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

驗證身分識別服務設定

完成機群層級設定後,您可以驗證機群中的叢集是否已成功設定您指定的 ID 服務設定。

控制台

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

    前往功能管理工具

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

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

gcloud

執行下列指令:

gcloud container fleet identity-service describe

後續步驟

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