SASL-Authentifizierung konfigurieren

Clients können über die Open-Source-Apache Kafka API eine Verbindung zu Managed Service for Apache Kafka-Clustern herstellen. Alle Verbindungen müssen mit TLS verschlüsselt werden. Die Kommunikation im Klartext wird nicht unterstützt. Die Authentifizierung erfolgt über einen von zwei unterstützten Mechanismen, die jeweils einen anderen Anmeldedatentyp verwenden: SASL oder mTLS.

In diesem Dokument wird die Authentifizierung mit der SASL-Methode beschrieben. Clients authentifizieren sich mit den Anmeldedaten eines autorisierten Identity and Access Management-Principals, z. B. eines Dienstkontos. Managed Service for Apache Kafka verwaltet die serverseitigen Broker-Zertifikate für alle Verbindungen.

Hinweise

Informieren Sie sich über folgende Themen:

Dem Dienstkonto die Managed Kafka-Clientrolle zuweisen

Sie müssen dem Dienstkonto, das Sie zum Herstellen einer Verbindung zum Cluster verwenden, die IAM-Rolle roles/managedkafka.client für das Projekt mit dem Cluster zuweisen.

Die Managed Kafka-Clientrolle enthält die Berechtigung managedkafka.clusters.connect, die für alle Verbindungen erforderlich ist. So weisen Sie dem Dienstkonto die Managed Kafka-Clientrolle zu:

Console

  1. Rufen Sie in der Google Cloud Console die Seite IAM auf.
    IAM aufrufen
  2. Prüfen Sie, ob das Projekt auf das Nutzerprojekt festgelegt ist, auf das der Managed Service for Apache Kafka-Client zugreifen würde.
  3. Klicken Sie auf Zugriff erlauben.
  4. Geben Sie auf der neuen Seite unter Hauptkonten hinzufügen die E-Mail-Adresse des Dienstkontos ein, das Sie verwenden.
  5. Wählen Sie unter Rollen zuweisen die Rolle Managed Kafka-Client aus.
  6. Klicken Sie auf Speichern.

gcloud-CLI

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Führen Sie den Befehl gcloud projects add-iam-policy-binding aus:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
      --role roles/managedkafka.client

    Ersetzen Sie Folgendes:

    • PROJECT_ID ist die Projekt-ID.

    • SERVICE_ACCOUNT_EMAIL ist die E-Mail-Adresse des Dienstkontos.

Kafka-Client für die Authentifizierung bei Google Cloudkonfigurieren

Sie können Kafka-Clients bei Google Cloud mit einem der folgenden Mechanismen authentifizieren:

OAUTHBEARER (empfohlen): Für diesen Mechanismus müssen Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) verwendet werden. ADC ist eine Strategie, die von den Google-Authentifizierungsbibliotheken verwendet wird, um Anmeldedaten automatisch basierend auf der Anwendungsumgebung zu finden. Weitere Informationen dazu, wo ADC nach Anmeldedaten sucht und in welcher Reihenfolge dies geschieht, finden Sie unter Funktionsweise von Standardanmeldedaten für Anwendungen.

SASL/PLAIN: Für diesen Mechanismus ist ein Nutzername und ein Passwort erforderlich, die aus einer JSON-Datei mit einem Dienstkontoschlüssel oder einem Zugriffstoken abgeleitet werden können.

Im Allgemeinen wird OAUTHBEARER empfohlen. SASL/PLAIN ist jedoch möglicherweise ein geeigneterer Mechanismus für Tests.

OAuthBearer-Authentifizierung

Informationen zur Authentifizierung bei der Open-Source-Kafka-API finden Sie in der Dokumentation auf GitHub.

SASL/PLAIN-Authentifizierung

Managed Service for Apache Kafka unterstützt die SASL/PLAIN-Authentifizierung mit einer JSON-Datei für den Dienstkontoschlüssel oder einem Zugriffstoken.

JSON-Datei für Dienstkontoschlüssel

Diese Methode gilt für alle Kafka-Clients.

  1. Laden Sie eine JSON-Datei mit dem Dienstkontoschlüssel für das Dienstkonto herunter, das Sie für Ihren Client verwenden möchten.

  2. Codieren Sie die Dienstkontodatei mit base64-encode, um sie als Authentifizierungsstring zu verwenden. Nehmen Sie an, dass der Dateiname my_service_account_key.json lautet.

    Verwenden Sie auf Linux- oder macOS-Systemen den Befehl base64 (oft standardmäßig installiert) so:

    base64 -w 0 < my_service_account_key.json > password.txt
    

    Dieser Befehl führt die folgenden Aktionen aus:

    • base64 < my_service_account_key.json: Liest den Inhalt der Datei mit dem Namen my_service_account_key.json.

    • Codiert den Inhalt der Datei mit Base64-Codierung. Die Base64-Codierung ist eine Möglichkeit, Binärdaten (z. B. JSON-Daten in der Datei Ihres Dienstkontos) als ASCII-Text darzustellen. Dies wird häufig verwendet, um Daten über Kanäle zu übertragen, die für Text konzipiert sind.

    • > password.txt: Leitet die Ausgabe des Befehls base64 (die base64-codierte Version Ihrer Dienstkontodatei) in eine neue Datei namens password.txt um.

  3. Sie können den Inhalt der Passwortdatei für die Authentifizierung mit den folgenden Parametern verwenden.

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="SERVICE_ACCOUNT_EMAIL_ADDRESS" \
    password="CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE";
    

    Ersetzen Sie Folgendes:

    • SERVICE_ACCOUNT_EMAIL_ADDRESS: Die E-Mail-Adresse des Dienstkontos, das Sie für die Authentifizierung verwenden möchten.
    • CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE: Der Inhalt der base64-codierten Passwortdatei, die Sie im vorherigen Schritt erhalten haben. Dies muss eine einzelne Zeile sein.

Bei der Authentifizierung eingehender Verbindungen zum Cluster prüft Managed Service for Apache Kafka Folgendes:

  1. Der angegebene Nutzername stimmt mit dem Dienstkonto überein, dessen Schlüssel im Passwort verwendet wird.

  2. Das angegebene Dienstkonto-Hauptkonto hat die Berechtigung managedkafka.clusters.connect (enthalten in der IAM-Rolle roles/managedkafka.client) für den Cluster.

Zugriffstoken

  1. Rufen Sie ein Zugriffstoken für das Hauptkonto ab, das Sie für die Authentifizierung verwenden möchten. Rufen Sie beispielsweise ein Zugriffstoken für den aktuellen gcloud CLI-Principal ab:

    gcloud auth print-access-token
    
  2. Sie können das Zugriffstoken für die Authentifizierung mit den folgenden Parametern verwenden.

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="PRINCIPAL_EMAIL_ADDRESS" \
    password="ACCESS_TOKEN_VALUE";
    
    

    Ersetzen Sie Folgendes:

    • PRINCIPAL_EMAIL_ADDRESS: Die E-Mail-Adresse des Hauptkontos, mit dem Sie das Zugriffstoken abgerufen haben.
    • ACCESS_TOKEN_VALUE: Der Zugriffstokenwert, den Sie im vorherigen Schritt erhalten haben.

Bei der Authentifizierung eingehender Verbindungen zum Cluster prüft Managed Service for Apache Kafka Folgendes:

  1. Das Zugriffstoken ist gültig und nicht abgelaufen.

  2. Der angegebene Nutzername stimmt mit der E-Mail-Adresse des Hauptkontos überein, dem das Zugriffstoken zugeordnet ist.

  3. Das Hauptkonto des Zugriffstokens hat die Berechtigung managedkafka.clusters.connect (in der IAM-Rolle roles/managedkafka.client enthalten) für den Cluster.

Workload Identity Federation for GKE

Managed Service for Apache Kafka unterstützt die Authentifizierung bei der Open-Source-Apache Kafka API mit der Identitätsföderation von Arbeitslasten für GKE. Die Authentifizierung wird sowohl für SASL/PLAIN als auch für SASL/OAUTHBEARER unterstützt.

Wenn Sie die Workload Identity-Föderation für GKE mit Managed Service for Apache Kafka verwenden möchten, müssen Sie die folgenden Anforderungen erfüllen:

  1. Verwenden Sie die GKE-Version 1.31.1-gke.1241000 oder höher.
  2. Annotieren Sie Ihr Kubernetes-Dienstkonto mit iam.gke.io/return-principal-id-as-email: "true". Beispiel:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kafka-service-account
      annotations:
        iam.gke.io/return-principal-id-as-email: "true"
    
  3. Wenn Sie den lokalen Authentifizierungsserver verwenden, prüfen Sie, ob Sie auch Version 2.40.3 oder höher des google-auth-Pakets verwenden.

Prüfen Sie, ob das GKE-Hauptkonto die Berechtigung managedkafka.clusters.connect hat (in der IAM-Rolle roles/managedkafka.client enthalten).

Managed Service for Apache Kafka unterstützt die Authentifizierung bei der Open-Source-Apache Kafka API mit Workload Identity für Flotten nicht. Alternativ können Sie Ihr Kubernetes-Dienstkonto mit einem IAM-Dienstkonto verknüpfen.

Authentifizierungsfehler beheben

Wenn sich ein Managed Service for Apache Kafka-Client nicht bei Managed Service for Apache Kafka authentifizieren kann, wird eine Fehlermeldung ähnlich der folgenden angezeigt:

Exception in thread "main" java.util.concurrent.ExecutionException:
org.apache.kafka.common.errors.SaslAuthenticationException:
Authentication failed: Invalid username or password

Prüfen Sie, ob eine der folgenden Ursachen vorliegt, um das Problem zu beheben:

  • Das Passwort ist fehlerhaft und stellt nach der Base64-Decodierung keinen gültigen JSON-Blob für den Dienstkontoschlüssel oder ein gültiges Zugriffstoken dar.

  • Das authentifizierende Hauptkonto hat nicht die Berechtigung managedkafka.clusters.connect für den Cluster.

  • Der angegebene Nutzername stimmt nicht mit dem Hauptkonto der Anmeldedaten überein.

Wenn ein Client alle 30 Minuten häufige Verbindungsunterbrechungen aufweist, kann dies daran liegen, dass der Client die regelmäßige erneute Authentifizierung nicht unterstützt. Für Managed Service for Apache Kafka-Broker müssen sich Clients alle 30 Minuten neu authentifizieren. Dies wird durch die Broker-Property connections.max.reauth.ms erzwungen. Prüfen Sie, ob Ihre Kafka-Clientbibliothek Version 2.2.0 oder höher hat und die erneute Authentifizierung unterstützt.

Nächste Schritte

Apache Kafka® ist eine eingetragene Marke der Apache Software Foundation oder deren Tochtergesellschaften in den USA und/oder anderen Ländern.