本文說明叢集管理員或應用程式運算子如何設定 Kubernetes 叢集,以支援來自第三方輕量型目錄存取協定 (LDAP) 提供者的驗證,例如 Microsoft Entra ID 或 Google LDAP。詳情請參閱「關於使用第三方身分驗證」。
限制
您必須使用支援 LDAP 的叢集類型。
事前準備
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
初始化 gcloud CLI 後,請更新 gcloud CLI 並安裝必要元件:
gcloud components update gcloud components install kubectl
- 請確認平台管理員已提供所有必要的供應商資訊。詳情請參閱「設定 LDAP 供應商,以便向叢集進行驗證」。
在整個設定過程中,您可能需要參閱 LDAP 伺服器的說明文件。下列管理員指南說明如何為部分熱門 LDAP 供應商設定,包括如何找到登入 LDAP 伺服器及設定叢集所需的資訊:
填入 LDAP 服務帳戶密碼
叢集需要服務帳戶密碼,才能向 LDAP 伺服器驗證身分並擷取使用者詳細資料。LDAP 驗證支援下列機制:
- 基本驗證:使用使用者名稱和密碼。
- 用戶端憑證驗證:使用用戶端私密金鑰和用戶端憑證。
您或平台管理員應已從「設定 LDAP 供應商,以驗證叢集」一文中取得供應商的相關資訊。如要讓叢集使用 LDAP 伺服器登入資訊,您必須建立包含 LDAP 登入詳細資料的 Kubernetes 密鑰。下列範例說明如何為兩種驗證類型設定密鑰。範例顯示密鑰套用至 anthos-identity-service 命名空間。
以下是基本驗證的密鑰設定範例:
apiVersion: v1 kind: Secret metadata: name: SERVICE_ACCOUNT_SECRET_NAME namespace: "anthos-identity-service" type: kubernetes.io/basic-auth # Make sure the type is correct data: username: USERNAME # Use a base64-encoded username password: PASSWORD # Use a base64-encoded password
其中, SERVICE_ACCOUNT_SECRET_NAME 是您為這個 Secret 選擇的名稱。 將使用者名稱和密碼值,換成您在上一步取得的使用者名稱和密碼。 USERNAME 是 Base64 編碼的使用者名稱 PASSWORD 是 Base64 編碼的密碼
以下是用戶端憑證密鑰設定範例:
apiVersion: v1 kind: Secret metadata: name: SERVICE_ACCOUNT_SECRET_NAME namespace: anthos-identity-service type: kubernetes.io/tls # Make sure the type is correct data: # the data is abbreviated in this example tls.crt: | MIIC2DCCAcCgAwIBAgIBATANBgkqh ... tls.key: | MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
將 SERVICE_ACCOUNT_SECRET_NAME 替換成您為這個 Secret 選擇的名稱。將 TLS 憑證和金鑰值,換成您在上一步取得的編碼憑證和金鑰值。
範例顯示密鑰已套用至 anthos-identity-service 命名空間。根據預設,系統元件有權讀取這個命名空間中的 Secret。如要使用其他命名空間,請變更密鑰中的中繼資料,然後新增 RBAC 政策,將讀取該命名空間中密鑰的權限授予 anthos-identity-service 命名空間中的 default ServiceAccount,如下所示:
--- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: NAMESPACE name: ais-secret-reader-role rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get","list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: ais-secret-reader-role-binding namespace: NAMESPACE roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: ais-secret-reader-role subjects: - kind: ServiceAccount name: default namespace: anthos-identity-service ---
設定叢集
如要使用 LDAP 設定叢集的驗證,請將下列資訊新增至名為 ClientConfig 的 Kubernetes 自訂資源:
- 身分識別提供者和參數的相關資訊,這些參數必須傳回使用者資訊。
- 您在先前建立及套用的密鑰名稱和命名空間,可讓叢集向 LDAP 伺服器進行驗證。
如要設定叢集,請編輯 kube-public命名空間中的 default ClientConfig:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-public edit clientconfig default
將 USER_CLUSTER_KUBECONFIG 替換為叢集的 kubeconfig 檔案路徑。如果 kubeconfig 中有多個環境,系統會使用目前的環境。執行指令前,您可能需要將目前的環境重設為正確的叢集。
以下顯示 ClientConfig 設定的格式:
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- name: NAME
ldap:
certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
connectionType: CONNECTION_TYPE
host: HOST_NAME
serviceAccountSecret:
name: SERVICE_ACCOUNT_SECRET_NAME
namespace: NAMESPACE
type: SECRET_FORMAT
user:
baseDN: BASE_DN
filter: FILTER
identifierAttribute: IDENTIFIER_ATTRIBUTE
loginAttribute: LOGIN_ATTRIBUTE
group:
baseDN: BASE_DN
filter: FILTER
identifierAttribute: IDENTIFIER_ATTRIBUTE
您可以在同一個 ClientConfig 中新增多個 OIDC、LDAP 和 SAML 識別資訊提供者設定。叢集會依定義順序,嘗試使用每項設定進行驗證,並在首次驗證成功後停止。以下 ClientConfig 範例會依特定順序定義多個身分識別提供者:
apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
name: default
namespace: kube-public
spec:
authentication:
- aws:
region: us-west-2
name: AWS Login
- ldap:
# Multiple lines are omitted here.
- saml:
# Multiple lines are omitted here.
- azureAD:
# Multiple lines are omitted here.
- oidc:
name: Okta OIDC
# Multiple lines are omitted here.
- oidc:
name: Google OIDC
# Multiple lines are omitted here.
ClientConfig LDAP 欄位
下表說明 ClientConfig ldap 物件的欄位。您需要新增的欄位取決於識別資訊提供者權杖,以及平台管理員設定提供者的方式。
| 欄位 | 必填 | 說明 | 格式 |
|---|---|---|---|
| name | 是 | 識別這項 LDAP 設定的名稱 | 字串 |
| 主機 | 是 | LDAP 伺服器的主機名稱或 IP 位址。通訊埠為選用項目,如未指定,則預設為 389。例如 ldap.server.example.com 或 10.10.10.10:389。
|
字串 |
| certificateAuthorityData | 特定 LDAP 連線類型必須提供此資訊 | 包含採用 Base64 編碼和 PEM 格式的 LDAP 伺服器憑證授權單位憑證。這項資訊僅適用於 ldaps 和 startTLS 連線。
|
字串 |
| connectionType | 是 | 連至 LDAP 伺服器時要使用的 LDAP 連線類型,預設值為 startTLS。insecure 模式只能用於開發,因為與伺服器的所有通訊都會以純文字形式進行。
|
字串 |
| serviceAccountSecret | |||
| name | 是 | 儲存 LDAP 服務帳戶憑證的 Kubernetes 密鑰名稱。 | 字串 |
| 命名空間 | 是 | 儲存 LDAP 服務帳戶憑證的 Kubernetes 密鑰命名空間。 | 字串 |
| 類型 | 是 | 定義服務帳戶密鑰的格式,以便支援不同類型的密鑰。如果您在 Secret 設定中指定 basic-auth,則應為 basic,否則應為 tls。如未指定,則預設為 basic。
|
字串 |
| 使用者 | |||
| baseDN | 是 | LDAP 目錄中子樹的位置,用來搜尋使用者項目。 | 字串 |
| 篩選器 | 否 | 搜尋使用者時要套用的篩選器 (選用)。這項功能可用於進一步限制允許登入的使用者帳戶。如未指定,則預設為 (objectClass=User)。
|
字串 |
| identifierAttribute | 否 | 決定通過驗證的使用者用來表示身分的屬性。這與 loginAttribute 欄位不同,可讓使用者透過使用者名稱登入,但實際 ID 為電子郵件地址或完整辨別名稱 (DN)。舉例來說,如果將 loginAttribute 設為 sAMAccountName,並將 identifierAttribute 設為 userPrincipalName,使用者就能以 bsmith 登入,但使用者實際的 RBAC 政策會寫成 bsmith@example.com。建議使用 userPrincipalName,因為每位使用者都有專屬的 ID。如未指定,則預設為 userPrincipalName。
|
字串 |
| loginAttribute | 否 | 用來比對輸入使用者名稱的屬性名稱。這項屬性用於在 LDAP 資料庫中尋找使用者 (例如 (<LoginAttribute>=<username>)),並與選用篩選器欄位合併。預設值為 userPrincipalName。
|
字串 |
| group (選填欄位) | |||
| baseDN | 是 | LDAP 目錄中子樹的位置,用來搜尋群組項目。 | 字串 |
| 篩選器 | 否 | 搜尋使用者所屬群組時要套用的篩選器 (選用)。這項功能可用於明確比對特定群組,減少每個使用者傳回的群組數量。預設值為 (objectClass=Group)。
|
字串 |
| identifierAttribute | 否 | 使用者所屬各群組的識別名稱。舉例來說,如果設為 distinguishedName,則 RBAC 和其他群組期望值應以完整 DN 形式撰寫。如未指定,則預設為 distinguishedName。
|
字串 |
後續步驟
套用設定後,請繼續設定外部供應商對叢集的存取權。