本文說明叢集管理員如何使用機群,為多個叢集設定第三方身分提供者驗證。 Google Cloud 可管理機群中叢集的設定,因此設定程序比個別設定叢集更快、更簡單。如要進一步瞭解第三方供應商驗證程序,請參閱「關於使用第三方身分驗證」。
事前準備
安裝及設定 Google Cloud CLI:
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
初始化 gcloud CLI 後,請更新 gcloud CLI 並安裝必要元件:
gcloud components update gcloud components install kubectl
- 在 gcloud CLI 中,選取機群主專案:
將gcloud config set project FLEET_HOST_PROJECT_ID
FLEET_HOST_PROJECT_ID替換為車隊託管專案的專案 ID。
-
啟用必要的 API:
在 Google Cloud 控制台中,前往專案選擇器頁面:
選取機群主專案。
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 theserviceusage.services.enablepermission. Learn how to grant roles.
請確認平台管理員已提供所選通訊協定所需的所有供應商資訊。詳情請參閱下列文件:
必要的角色
如要取得在機群層級設定叢集所需的權限,請要求管理員授予機群主專案的機群管理員 (roles/gkehub/admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
啟用艦隊層級身分識別服務功能
機群層級身分識別服務功能會使用控制器,管理機群中每個叢集的設定。您只需要在機群主專案中啟用機群層級功能。
如要啟用車隊層級功能,請選取下列任一選項:
控制台
前往 Google Cloud 控制台的「GKE Identity Service」頁面。
按一下「啟用 Identity 服務」。
gcloud
啟用機群層級的 Identity 服務功能:
gcloud container fleet identity-service enable
設定叢集
如要設定叢集,您必須指定下列資訊:
- 身分識別提供者資訊,例如用戶端 ID 和密碼。
- 身分識別提供者用於驗證的 JSON Web Token (JWT) 相關資訊。
- 身分識別提供者專屬的其他範圍或參數。
如要進一步瞭解您需要平台管理員或機構身分管理員提供哪些資訊,請參閱下列文件:
如果您已為 OIDC 供應商設定叢集層級的設定,將機群層級設定套用至叢集時,系統會覆寫所有現有的驗證規格。此外,如果現有叢集層級設定的供應商不支援機群層級設定,這項設定就會失敗。如要套用機群層級設定,請務必移除現有的供應商設定。
如要設定叢集,請按照下列步驟操作:
控制台
選取要設定的叢集:
前往 Google Cloud 控制台的「GKE Identity Service」頁面。
找出要設定的叢集,然後選取一或多個核取方塊。您可以選擇個別叢集,也可以指定要為所有叢集設定相同的身分識別設定。如果您已設定機群層級預設值,系統會將設定調回預設值。
按一下「更新設定」。「編輯 Identity Service 叢集設定」窗格隨即開啟。
在「Identity Providers」部分,選擇叢集的設定方式。您可以更新現有設定、從其他叢集複製設定,或建立新設定。如要建立新設定,請按一下「新增身分識別提供者」。系統會顯示「New Identity Provider」(新增身分識別提供者) 區段。
在「新增識別資訊提供者」部分,設定提供者詳細資料:
OIDC
- 選取「New Open ID Connect」,建立新的 OIDC 設定。
- 在「Provider name」(供應商名稱) 欄位中,指定要用來識別這項設定的名稱,通常是身分識別提供者名稱。名稱開頭須為英文字母,其後最多可接 39 個小寫英文字母、數字或連字號,但結尾不得為連字號。設定建立後,您就無法編輯這個名稱。
- 在「用戶端 ID」欄位中,指定識別資訊提供者的用戶端 ID。
- 在「Client Secret」(用戶端密鑰) 欄位中,指定用戶端應用程式與身分識別提供者之間共用的用戶端密鑰。
- 在「核發者網址」欄位中,指定向識別資訊提供者提出授權要求的 URI。
- 按一下「下一步」設定 OIDC 屬性。
Azure AD
- 選取「新的 Azure Active Directory」,建立新的 Azure AD 設定。
- 在「Provider name」(供應商名稱) 欄位中,指定要用來識別這項設定的名稱,通常是身分識別提供者名稱。名稱開頭須為英文字母,其後最多可接 39 個小寫英文字母、數字或連字號,但結尾不得為連字號。設定建立後,您就無法編輯這個名稱。
- 在「用戶端 ID」欄位中,指定識別資訊提供者的用戶端 ID。
- 在「Client Secret」(用戶端密鑰) 欄位中,指定用戶端應用程式與身分識別提供者之間共用的用戶端密鑰。
- 在「Tenant」中,指定要驗證的 Azure AD 帳戶所屬的租戶。
- 按一下「下一步」設定 Azure AD 屬性。
LDAP
- 選取「LDAP」,建立新的 LDAP 設定。
- 在「Provider name」(供應商名稱) 欄位中,指定要用來識別這項設定的名稱,通常是身分識別提供者名稱。這個名稱開頭須為英文字母,其後最多可接 39 個小寫英文字母、數字或連字號,但結尾不得為連字號。設定建立後,您就無法編輯這個名稱。
- 點選「下一步」。
- 指定主機名稱 (必要)、LDAP 連線類型,以及 LDAP 伺服器的 Base64 編碼 CA 憑證。
- 按一下「下一步」設定伺服器。
- 指定使用者的識別名稱、篩選器、登入屬性和 ID 屬性。
- 按一下「下一步」設定使用者詳細資料。
- 如果選擇使用群組,請指定群組的識別名稱、篩選器和 ID 屬性。
- 點選「下一步」設定群組詳細資料。
- 指定服務帳戶使用者名稱和密碼。
- 按一下「完成」,即可設定服務帳戶名稱。
點選「下一步」。「設定屬性」部分隨即開啟。
設定身分識別提供者的屬性。如要查看 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。
按一下 [完成]。
選用:如要在設定中新增更多供應商,請按一下「新增識別資訊提供者」,然後重複上述步驟。
按一下「更新設定」。
這會視需要安裝所有必要元件,並在所選叢集上套用用戶端設定。
gcloud
如要使用 gcloud CLI 設定車隊,請建立名為 ClientConfig 的 Kubernetes 自訂資源,並填入叢集與身分識別提供者互動所需的所有資訊。如要建立及使用 ClientConfig,請按照下列步驟操作:
在名為
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。叢集會依定義順序嘗試驗證每項設定,並在首次成功驗證後停止。
將 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.
...
設定機群層級預設值
您可以指定機群層級的預設驗證設定。完成這項設定後,您向機群註冊的每個新叢集,都會自動使用您指定的驗證設定。
指定機群層級的預設設定時,現有機群成員叢集不會自動更新。您可以選擇將預設設定套用至這些叢集。如要進一步瞭解如何管理機群層級設定,請參閱「管理機群層級功能」。
設定機群層級預設值後,當機群控制器根據預設設定協調叢集時,系統會覆寫個別叢集的驗證設定。
如要設定機群層級的預設設定,請按照下列步驟操作:
- 在名為
fleet-default.yaml的檔案中建立 ClientConfig。如要進一步瞭解如何建立檔案,請參閱「設定叢集」一節中的 gcloud CLI 步驟。 如要套用車隊層級的預設設定,請執行下列任一指令:
如果未啟用機群層級身分識別服務功能,請啟用該功能並指定機群層級預設設定:
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
註冊至機群的新叢集預設會使用這項設定。現有機群成員叢集不會自動沿用新的預設設定。
如要將預設設定套用至現有車隊成員叢集,請執行下列指令:
gcloud container fleet identity-service apply --origin=fleet --membership=CLUSTER_NAME
移除機群層級的預設設定
如要移除預設設定,請執行下列指令:
gcloud container fleet identity-service delete --fleet-default-member-config
您向機群註冊的新叢集不會自動使用驗證設定。
驗證身分識別服務設定
完成機群層級設定後,您可以驗證機群中的叢集是否已成功設定您指定的 ID 服務設定。
控制台
前往 Google Cloud 控制台的「Feature Manager」頁面。
所有已啟用的功能都會在面板中列為「已啟用」。
在「身分識別服務」面板中,按一下「詳細資料」。詳細資料面板會顯示已註冊叢集的狀態。
gcloud
執行下列指令:
gcloud container fleet identity-service describe
後續步驟
設定叢集後,請繼續設定使用者存取權。