GKE Identity Service mit LDAP einrichten

Dieses Dokument richtet sich an Clusteradministratoren oder Anwendungsoperatoren, die GKE Identity Service auf ihren Clustern einrichten. Sie erfahren, wie Sie GKE Identity Service auf Ihren Clustern mit Ihrem bevorzugten LDAP-Anbieter (Lightweight Directory Access Protocol) einrichten, einschließlich Microsoft Active Directory. Es wird davon ausgegangen, dass Sie oder Ihr Plattformadministrator bereits Anmeldedaten für Ihren LDAP-Anbieter erhalten haben, gemäß der Anleitung unter LDAP-Anbieter für GKE Identity Service einrichten. Weitere Informationen zur Funktionsweise von GKE Identity Service und zu anderen Einrichtungsoptionen finden Sie in der Übersicht. Informationen zum Zugriff auf einen Cluster mit diesem Dienst als Entwickler oder anderer Clusternutzer finden Sie unter Mit GKE Identity Service auf Cluster zugreifen. GKE Identity Service mit LDAP kann nur mit Google Distributed Cloud-Deployments auf VMware (Nutzercluster) und auf Bare Metal verwendet werden.

Vorbereitung

  1. Prüfen Sie, ob die folgenden Befehlszeilentools installiert sind:
    • Die neueste Version des Google Cloud CLI, die gcloud, das Befehlszeilentool für die Interaktion mit Google Cloud, enthält. Informationen zur Installation des Google Cloud CLI finden Sie in der Installationsanleitung.
    • kubectl zum Ausführen von Befehlen für Kubernetes-Cluster. Wenn Sie kubectl installieren müssen, lesen Sie den Installationsleitfaden. Wenn Sie Cloud Shell als Shell-Umgebung für die Interaktion mit Google Cloud verwenden, sind diese Tools bereits für Sie installiert.
  2. Achten Sie darauf, dass die gcloud CLI für die Verwendung mit Ihrem Projekt initialisiert wurde.

Während der Einrichtung müssen Sie möglicherweise die Dokumentation des LDAP-Servers lesen. Im Folgenden werden die Konfigurationen für einige beliebte LDAP-Anbieter erläutert. Außerdem erfahren Sie, wo Sie die erforderlichen Informationen finden, um sich beim LDAP-Server anzumelden und Ihre Cluster zu konfigurieren:

LDAP-Dienstkonto-Secret füllen

GKE Identity Service benötigt ein Dienstkonto-Secret, um sich beim LDAP-Server zu authentifizieren und Nutzerdetails abzurufen. Für die LDAP-Authentifizierung sind zwei Arten von Dienstkonten zulässig: die Basisauthentifizierung (mit einem Nutzernamen und einem Passwort zur Authentifizierung beim Server) oder ein Clientzertifikat (mit einem privaten Clientschlüssel und einem Clientzertifikat). Sie oder Ihr Plattformadministrator sollten diese Informationen zu Ihrem Anbieter haben, indem Sie die Schritte unter LDAP-Anbieter für GKE Identity Service einrichten ausgeführt haben. Um die Anmeldedaten für den LDAP-Server für GKE Identity Service verfügbar zu machen, müssen Sie eine Kubernetes-Secret-Ressource mit den Anmeldedaten aus dem Abschnitt LDAP-Anbieter für GKE Identity Service einrichten erstellen. Die folgenden Beispiele zeigen, wie Secrets für beide Dienstkontotypen konfiguriert werden. In den Beispielen wird gezeigt, wie das Secret auf den anthos-identity-service-Namespace angewendet wird.

Dies ist ein Beispiel für eine grundlegende Konfiguration eines Secrets bei der Basisauthentifizierung:

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

Dabei ist SERVICE_ACCOUNT_SECRET_NAME der Name, den Sie für dieses Secret ausgewählt haben. Ersetzen Sie die Nutzernamen- und Passwortwerte durch den Nutzernamen und das Passwort, die Sie im vorherigen Schritt erhalten haben. USERNAME ist ein Base64-codierter Nutzername. PASSWORD ist ein Base64-codiertes Passwort.

Dies ist ein Beispiel für die Konfiguration eines Secrets bei einem Clientzertifikat:

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 ...

Ersetzen Sie SERVICE_ACCOUNT_SECRET_NAME durch den Namen, den Sie für dieses Secret ausgewählt haben. Ersetzen Sie das TLS-Zertifikat und die Schlüsselwerte durch das codierte Zertifikat und die Schlüsselwerte, die Sie im vorherigen Schritt erhalten haben.

Die Beispiele zeigen das Secret, das auf den Namespace anthos-identity-service angewendet wird. Dies ist unser empfohlener Ansatz. Das liegt daran, dass GKE Identity Service standardmäßig die Berechtigung zum Lesen von Secrets in anthos-identity-service hat. Wenn Sie einen anderen Namespace verwenden möchten, ändern Sie die Metadaten im Secret und fügen Sie dann eine neue RBAC-Richtlinie hinzu, um dem GKE Identity Service die Berechtigung zum Lesen von Secrets in diesem Namespace zu erteilen:

---
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
---

Cluster konfigurieren

GKE Identity Service verwendet einen speziellen benutzerdefinierten Ressourcentyp (CRD) für Kubernetes zum Konfigurieren Ihrer Cluster mit dem Namen ClientConfig, mit Feldern für Informationen zum Identitätsanbieter und den Parametern, die zum Zurückgeben von Nutzerinformationen erforderlich sind. Die Konfiguration ClientConfig enthält auch den Secret-Namen und den Namespace aus dem Secret, das Sie im vorherigen Abschnitt erstellt und angewendet haben, damit sich GKE Identity Service beim LDAP-Server authentifizieren kann.

Bearbeiten Sie das KRM-Standardobjekt vom Typ clientconfig im Namespace kube-public, um die Konfiguration auf Ihren Cluster anzuwenden:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-public edit clientconfig default

Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei für den Cluster. Wenn die kubeconfig mehrere Kontexte enthält, wird der aktuelle Kontext verwendet. Möglicherweise müssen Sie den aktuellen Kontext auf den richtigen Cluster zurücksetzen, bevor Sie den Befehl ausführen.

Im Folgenden sehen Sie das Format der ClientConfig-Konfiguration:

apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
  name: default
  namespace: kube-public
spec:
  authentication:
    - name: NAME_STRING
      ldap:
        host: HOST_NAME
        certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
        connectionType: CONNECTION_TYPE
        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

In der folgenden Tabelle werden die Felder in der CRD von ClientConfig beschrieben:

Feld Erforderlich Beschreibung Format
Name Ja Ein Name zur Identifizierung dieser LDAP-Konfiguration String
Host Ja Hostname oder IP-Adresse des LDAP-Servers. Der Port ist optional und standardmäßig 389, wenn nicht angegeben. Beispiel: ldap.server.example.com oder 10.10.10.10:389. String
certificateAuthorityData Erforderlich für bestimmte LDAP-Verbindungstypen Enthält ein Base64-codiertes, PEM-formatiertes Zertifizierungsstellen-Zertifikat für den LDAP-Server. Dies muss nur für ldaps- und startTLS-Verbindungen angegeben werden. String
connectionType Ja LDAP-Verbindungstyp, der beim Herstellen einer Verbindung zum LDAP-Server verwendet werden soll. Die Standardeinstellung ist startTLS. Der Modus insecure sollte nur für die Entwicklung verwendet werden, da die gesamte Kommunikation mit dem Server im Klartext erfolgt. String
serviceAccountSecret
Name Ja Name des Kubernetes-Secrets, das die Anmeldedaten für das LDAP-Dienstkonto speichert. String
Namespace Ja Namespace des Kubernetes-Secrets, das die Anmeldedaten für das LDAP-Dienstkonto speichert. String
Typ Ja Definiert das Format des Dienstkonto-Secrets, um verschiedene Arten von Secrets zu unterstützen. Wenn Sie basic-auth in der Secret-Konfiguration angegeben haben, ist dies basic, andernfalls tls. Wenn nicht angegeben, lautet die Standardeinstellung basic. String
Nutzer
baseDN Ja Der Speicherort der Unterstruktur im LDAP-Verzeichnis, um nach Nutzereinträgen zu suchen. String
Filter Nein Optionaler Filter, der bei der Suche nach dem Nutzer angewendet werden soll. Damit können Sie die Nutzerkonten, die sich anmelden dürfen, weiter einschränken. Wenn nicht angegeben, lautet die Standardeinstellung (objectClass=User). String
identifierAttribute Nein Bestimmt, welches Attribut nach der Authentifizierung als Identität des Nutzers verwendet werden soll. Dies unterscheidet sich vom Feld "loginAttribute", wodurch sich Nutzer mit einem Nutzernamen anmelden können. Die tatsächliche Kennzeichnung muss jedoch eine E-Mail-Adresse oder ein vollständiger Distinguished Name (DN) sein. Beispiel: Wenn Sie loginAttribute auf sAMAccountName und identifierAttribute auf userPrincipalName setzen, können sich Nutzer alsbsmith anmelden. Die tatsächlichen RBAC-Richtlinien für den Nutzer würden jedoch so geschrieben werden: bsmith@example.com. Die Verwendung von userPrincipalName wird empfohlen, da dies für jeden Nutzer eindeutig ist. Wenn nicht angegeben, lautet die Standardeinstellung userPrincipalName. String
loginAttribute Nein Der Name des Attributs, das dem Eingabenutzernamen entspricht. Damit wird der Nutzer in der LDAP-Datenbank gesucht, z. B. (<LoginAttribute>=<username>). Es wird mit dem optionalen Filterfeld kombiniert. Die Standardeinstellung ist userPrincipalName. String
group (optionales Feld)
baseDN Ja Der Speicherort der Unterstruktur im LDAP-Verzeichnis, um nach Gruppeneinträgen zu suchen. String
Filter Nein Optionaler Filter, der bei der Suche nach Gruppen verwendet wird, zu denen ein Nutzer gehört. Dies kann verwendet werden, um explizit auf bestimmte Gruppen einzuschränken, um die Anzahl der Gruppen zu reduzieren, die für jeden Nutzer zurückgegeben werden. Die Standardeinstellung ist (objectClass=Group). String
identifierAttribute Nein Der identifizierende Name jeder Gruppe, zu der ein Nutzer gehört. Wenn dieser Wert beispielsweise auf distinguishedName festgelegt ist, sollten RBACs und andere Gruppenerwartungen als vollständige DNs geschrieben werden. Wenn nicht angegeben, lautet die Standardeinstellung distinguishedName. String

Nächste Schritte

Nachdem die Konfiguration angewendet wurde, richten Sie den Nutzerzugriff auf Cluster mit dem GKE Identity Service ein.