本文說明叢集管理員或應用程式操作人員如何設定 Kubernetes 叢集,以支援來自第三方輕量型目錄存取協定 (LDAP) 提供者的驗證,例如 Microsoft Entra ID 或 Google LDAP。詳情請參閱「關於使用第三方身分進行驗證」。
限制
您必須使用支援 LDAP 的叢集類型。
事前準備
-
安裝 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 Secret。以下範例說明如何為這兩種驗證類型設定祕密。範例顯示 Secret 套用至 anthos-identity-service 命名空間。
以下是基本驗證 Secret 設定範例:
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 是您為這個密鑰選擇的名稱。將使用者名稱和密碼值替換為上一步取得的使用者名稱和密碼。 USERNAME 是採用 Base64 編碼的使用者名稱 PASSWORD 是採用 Base64 編碼的密碼
以下是用戶端憑證 Secret 設定範例:
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 政策,將讀取該命名空間中 Secret 的權限授予 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自訂資源:
- 身分識別提供者和參數的相關資訊,這些參數需要傳回使用者資訊。
- 您在上一個步驟中建立及套用的 Secret 名稱和命名空間,可讓叢集向 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 設定的名稱 | 字串 |
| host | 是 | LDAP 伺服器的主機名稱或 IP 位址。通訊埠為選用項目,如未指定,則預設為 389。例如 ldap.server.example.com 或 10.10.10.10:389。
|
字串 |
| certificateAuthorityData | 特定 LDAP 連線類型需要此設定 | 包含採用 Base64 編碼和 PEM 格式的 LDAP 伺服器憑證授權單位憑證。只有在 ldaps 和 startTLS 連線時,才需要提供這項資訊。
|
字串 |
| connectionType | yes | 連至 LDAP 伺服器時要使用的 LDAP 連線類型,預設為 startTLS。insecure 模式只能用於開發,因為與伺服器的所有通訊都會以純文字形式進行。
|
字串 |
| serviceAccountSecret | |||
| name | 是 | 儲存 LDAP 服務帳戶憑證的 Kubernetes Secret 名稱。 | 字串 |
| 命名空間 | 是 | 儲存 LDAP 服務帳戶憑證的 Kubernetes Secret 命名空間。 | 字串 |
| type | yes | 定義服務帳戶密鑰的格式,以便支援不同類型的密鑰。如果您在 Secret 設定中指定 basic-auth,則應為 basic,否則應為 tls。如未指定,則預設為 basic。
|
字串 |
| user | |||
| baseDN | 是 | LDAP 目錄中子樹的位置,用來搜尋使用者項目。 | 字串 |
| filter | 否 | 搜尋使用者時要套用的篩選器 (選用)。這項功能可用於進一步限制允許登入的使用者帳戶。如未指定,則預設為 (objectClass=User)。
|
字串 |
| identifierAttribute | 否 | 決定通過驗證的使用者用來表示身分的屬性。這與 loginAttribute 欄位不同,可讓使用者透過使用者名稱登入,但實際 ID 為電子郵件地址或完整辨別名稱 (DN)。舉例來說,如果將 loginAttribute 設為 sAMAccountName,identifierAttribute 設為 userPrincipalName,使用者就能以 bsmith 登入,但使用者實際的 RBAC 政策會寫成 bsmith@example.com。建議使用 userPrincipalName,因為每位使用者都有專屬的
。如未指定,則預設為 userPrincipalName。
|
字串 |
| loginAttribute | 否 | 用來比對輸入使用者名稱的屬性名稱。這項屬性用於在 LDAP 資料庫中尋找使用者 (例如 (<LoginAttribute>=<username>)),並與選用篩選器欄位合併。預設值為 userPrincipalName。
|
字串 |
| group (選填欄位) | |||
| baseDN | 是 | LDAP 目錄中子樹的位置,用來搜尋群組項目。 | 字串 |
| filter | 否 | 搜尋使用者所屬群組時要使用的篩選器 (選用)。這項功能可用於明確比對特定群組,減少為每位使用者傳回的群組數量。預設值為 (objectClass=Group)。 |
字串 |
| identifierAttribute | 否 | 使用者所屬各群組的識別名稱。舉例來說,如果設為 distinguishedName,則 RBAC 和其他群組預期應寫成完整 DN。如未指定,則預設為 distinguishedName。
|
字串 |
後續步驟
套用設定後,請繼續設定外部供應商對叢集的使用者存取權。