Les clients peuvent se connecter aux clusters Managed Service pour Apache Kafka à l'aide de l'API Apache Kafka Open Source. Toutes les connexions doivent être chiffrées à l'aide du protocole TLS. La communication en texte brut n'est pas acceptée. L'authentification est gérée par l'un des deux mécanismes compatibles, chacun avec un type d'identifiant différent : SASL ou mTLS.
Ce document explique comment s'authentifier à l'aide de la méthode SASL. Les clients s'authentifient à l'aide des identifiants d'un compte principal Identity and Access Management autorisé, tel qu'un compte de service. Managed Service pour Apache Kafka gère les certificats de broker côté serveur pour toutes les connexions.
Avant de commencer
Apprenez-en plus sur les sujets suivants :
Attribuez le rôle client Kafka géré au compte de service.
Vous devez attribuer le rôle IAM roles/managedkafka.client sur le projet contenant le cluster au compte de service que vous allez utiliser pour vous connecter au cluster.
Le rôle client Managed Kafka inclut l'autorisation managedkafka.clusters.connect requise pour toutes les connexions.
Pour attribuer le rôle de client Kafka géré au compte de service, procédez comme suit :
Console
- Dans la console Google Cloud , accédez à la page IAM.
Accéder à IAM - Vérifiez que le projet est défini sur le projet client auquel le client Managed Service pour Apache Kafka accéderait.
- Cliquez sur Accorder l'accès.
- Sur la nouvelle page, dans Ajouter des comptes principaux, saisissez l'adresse e-mail du compte de service que vous utilisez.
- Pour Attribuer des rôles, sélectionnez le rôle Client Kafka géré.
- Cliquez sur Enregistrer.
gcloud CLI
-
In the Google Cloud console, 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.
-
Exécutez la commande
gcloud projects add-iam-policy-binding:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role roles/managedkafka.client
Remplacez les éléments suivants :
-
PROJECT_ID est l'ID de projet.
-
SERVICE_ACCOUNT_EMAIL est l'adresse e-mail du compte de service.
-
Configurer le client Kafka pour l'authentification auprès de Google Cloud
Vous pouvez authentifier les clients Kafka auprès de Google Cloud à l'aide de l'un des mécanismes suivants :
OAUTHBEARER (recommandé) : ce mécanisme nécessite l'utilisation des Identifiants par défaut de l'application (ADC). ADC est une stratégie utilisée par les bibliothèques d'authentification pour rechercher automatiquement des identifiants en fonction de l'environnement d'application. Pour en savoir plus sur l'emplacement des ADC (Identifiants par défaut de l'application) et l'ordre dans lequel ils sont consultés, consultez la section Fonctionnement des identifiants par défaut de l'application.
SASL/PLAIN : ce mécanisme nécessite l'utilisation d'un nom d'utilisateur et d'un mot de passe pouvant être dérivés d'un fichier JSON de clé de compte de service ou d'un jeton d'accès.
En général, OAUTHBEARER est l'option recommandée. Toutefois, SASL/PLAIN peut être un mécanisme plus pratique pour les tests.
Authentification OAuthBearer
Pour savoir comment vous authentifier auprès de l'API Kafka Open Source, consultez la documentation sur GitHub.
Authentification SASL/PLAIN
Managed Service pour Apache Kafka est compatible avec l'authentification SASL/PLAIN à l'aide d'un fichier JSON de clé de compte de service ou d'un jeton d'accès.
Fichier JSON de clé de compte de service
Cette méthode s'applique à tous les clients Kafka.
Téléchargez un fichier JSON de clé de compte de service pour le compte de service que vous prévoyez d'utiliser pour votre client.
Encodez le fichier de compte de service à l'aide de base64-encode pour l'utiliser comme chaîne d'authentification. Supposons que le nom de fichier soit
my_service_account_key.json.Sur les systèmes Linux ou macOS, utilisez la commande
base64(souvent installée par défaut) comme suit :base64 -w 0 < my_service_account_key.json > password.txtCette commande effectue les actions suivantes :
base64 < my_service_account_key.json: Lit le contenu du fichier nommémy_service_account_key.json.Encode le contenu du fichier à l'aide de l'encodage Base64. L'encodage en base64 permet de représenter des données binaires (telles que les données JSON de votre fichier de compte de service) sous forme de texte ASCII. Cette méthode est souvent utilisée pour transmettre des données sur des canaux conçus pour le texte.
> password.txt: redirige la sortie de la commandebase64(version encodée en base64 de votre fichier de compte de service) vers un nouveau fichier nommépassword.txt.
Vous pouvez utiliser le contenu du fichier de mots de passe pour l'authentification avec les paramètres suivants.
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";Remplacez les éléments suivants :
SERVICE_ACCOUNT_EMAIL_ADDRESS: adresse e-mail du compte de service que vous souhaitez utiliser pour l'authentification.CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE: contenu du fichier de mot de passe encodé en base64 que vous avez obtenu à l'étape précédente. Il doit s'agir d'une seule ligne.
Lors de l'authentification des connexions entrantes au cluster, Managed Service pour Apache Kafka vérifie les éléments suivants :
Le nom d'utilisateur fourni correspond au compte de service dont la clé est utilisée dans le mot de passe.
Le compte principal de service fourni dispose de l'autorisation
managedkafka.clusters.connect(incluse dans le rôle IAMroles/managedkafka.client) sur le cluster.
Jeton d'accès
Obtenez un jeton d'accès pour le compte principal que vous souhaitez utiliser pour l'authentification. Par exemple, obtenez un jeton d'accès pour le principal actuel de gcloud CLI :
gcloud auth print-access-tokenVous pouvez utiliser le jeton d'accès pour l'authentification avec les paramètres suivants.
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";Remplacez les éléments suivants :
PRINCIPAL_EMAIL_ADDRESS: adresse e-mail du compte principal que vous avez utilisé pour obtenir le jeton d'accès.ACCESS_TOKEN_VALUE: valeur du jeton d'accès obtenue à l'étape précédente.
Lors de l'authentification des connexions entrantes au cluster, Managed Service pour Apache Kafka vérifie les éléments suivants :
Le jeton d'accès est valide et n'a pas expiré.
Le nom d'utilisateur fourni correspond à l'adresse e-mail principale à laquelle le jeton d'accès est associé.
Le principal du jeton d'accès dispose de l'autorisation
managedkafka.clusters.connect(incluse dans le rôle IAMroles/managedkafka.client) sur le cluster.
Workload Identity Federation for GKE
Managed Service pour Apache Kafka est compatible avec l'authentification auprès de l'API Apache Kafka Open Source à l'aide de la fédération d'identité de charge de travail pour GKE. L'authentification est compatible avec SASL/PLAIN et SASL/OAUTHBEARER.
Pour utiliser la fédération d'identité de charge de travail pour GKE avec Managed Service for Apache Kafka, vous devez respecter les exigences suivantes :
- Utilisez GKE version
1.31.1-gke.1241000ou ultérieure. Annotez votre compte de service Kubernetes avec
iam.gke.io/return-principal-id-as-email: "true". Exemple :apiVersion: v1 kind: ServiceAccount metadata: name: kafka-service-account annotations: iam.gke.io/return-principal-id-as-email: "true"Si vous utilisez le serveur d'authentification local, vérifiez que vous utilisez également la version
2.40.3ou ultérieure du package google-auth.
Vérifiez que le compte principal GKE dispose de l'autorisation managedkafka.clusters.connect (incluse dans le rôle IAM roles/managedkafka.client).
Managed Service pour Apache Kafka n'est pas compatible avec l'authentification auprès de l'API Apache Kafka Open Source à l'aide de Workload Identity de parc. Vous pouvez également associer votre compte de service Kubernetes à un compte de service IAM.
Résoudre les problèmes d'authentification
Si un client Managed Service pour Apache Kafka ne peut pas s'authentifier auprès de Managed Service pour Apache Kafka, un message d'erreur semblable à celui-ci s'affiche :
Exception in thread "main" java.util.concurrent.ExecutionException:
org.apache.kafka.common.errors.SaslAuthenticationException:
Authentication failed: Invalid username or password
Pour résoudre le problème, vérifiez les causes suivantes :
Le mot de passe est mal formé et ne représente pas un blob JSON de clé de compte de service valide lorsqu'il est décodé en base64, ni un jeton d'accès valide.
Le principal d'authentification ne dispose pas de l'autorisation
managedkafka.clusters.connectsur le cluster.Le nom d'utilisateur fourni ne correspond pas au principal des identifiants.
Si un client est fréquemment déconnecté toutes les 30 minutes, cela peut être dû au fait qu'il ne prend pas en charge la réauthentification périodique.
Les agents Managed Service pour Apache Kafka exigent que les clients se réauthentifient toutes les 30 minutes. Cette exigence est appliquée par la propriété d'agent connections.max.reauth.ms.
Vérifiez que la version de votre bibliothèque cliente Kafka est la version 2.2.0 ou une version ultérieure, et qu'elle est compatible avec la réauthentification.