Aller au contenu principal

Authentification

Cette page présente les méthodes d'authentification les plus courantes pour le connecteur Kafka sur Databricks.

La liste complète des méthodes d’authentification prises en charge se trouve dans la documentation Kafka. Pour la référence des options d’authentification, consultez Authentification.

Connectez-vous à Amazon MSK avec IAM

Vous pouvez vous connecter à Amazon Managed Streaming pour Kafka (MSK) depuis Databricks à l'aide de l'authentification basée sur IAM. Pour les instructions de configuration MSK, consultez la configuration Amazon MSK.

Si vous utilisez IAM pour vous connecter à MSK, vous devez utiliser l'une des méthodes de connexion ci-dessous. Vous pouvez également configurer les connexions à MSK en utilisant les options fournies par le connecteur Apache Spark Kafka.

Se connecter avec les identifiants de service Unity Catalog

Dans Databricks Runtime 16.1 et versions ultérieures, Databricks prend en charge les identifiants de service Unity Catalog pour authentifier l'accès à AWS Managed Streaming for Apache Kafka (MSK). Databricks recommande cette méthode d'authentification si vous utilisez des clusters partagés ou du compute serverless.

Pour utiliser un identifiant de service Unity Catalog pour l’authentification, procédez comme suit :

  • Créer un nouvel identifiant de service Unity Catalog. Voir Créer des identifiants de service.

    • Confirmez que le rôle IAM attaché à votre identifiant de service dispose des autorisations correctes pour se connecter à votre cluster MSK.
  • Définissez l'option source databricks.serviceCredential au nom de vos informations d'identification de service Unity Catalog.

Python
kafka_options = {
"kafka.bootstrap.servers": "<bootstrap-hostname>:9092",
"subscribe": "<topic>",
"databricks.serviceCredential": "<service-credential-name>",
}

df = spark.readStream.format("kafka").options(**kafka_options).load()
remarque

Lorsque vous utilisez un identifiant de service Unity Catalog pour vous connecter à Kafka, n'utilisez pas les options suivantes :

  • kafka.sasl.mechanism
  • kafka.sasl.jaas.config
  • kafka.security.protocol
  • kafka.sasl.client.callback.handler.class

Se connecter avec les profils d’instance

Vous pouvez utiliser un profil d'instance pour vous authentifier auprès des clusters Amazon MSK qui ont l'authentification IAM activée. Consultez les profils d'instance.

Pour vous connecter à MSK à l'aide d'un profil d'instance, configurez les options suivantes :

Python
"kafka.sasl.mechanism": "AWS_MSK_IAM",
"kafka.sasl.jaas.config":
"shadedmskiam.software.amazon.msk.auth.iam.IAMLoginModule required;",
"kafka.security.protocol": "SASL_SSL",
"kafka.sasl.client.callback.handler.class":
"shadedmskiam.software.amazon.msk.auth.iam.IAMClientCallbackHandler"

Connectez-vous avec les utilisateurs et les rôles IAM.

Vous pouvez éventuellement configurer votre connexion à MSK avec un utilisateur IAM ou un rôle IAM au lieu d'un profil d'instance. Vous devez fournir les valeurs de votre clé d'accès AWS et de votre clé secrète à l'aide des variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY. Consultez Utiliser un secret dans une propriété de configuration Spark ou une variable d'environnement.

Pour configurer votre connexion à l'aide d'un rôle IAM, vous devez modifier la valeur de kafka.sasl.jaas.config pour inclure l'ARN du rôle, comme dans l'exemple suivant :

Python
"kafka.sasl.mechanism": "AWS_MSK_IAM",
"kafka.sasl.jaas.config":
"shadedmskiam.software.amazon.msk.auth.iam.IAMLoginModule required awsRoleArn='arn:aws:iam::123456789012:role/msk_client_role'",
"kafka.security.protocol": "SASL_SSL",
"kafka.sasl.client.callback.handler.class":
"shadedmskiam.software.amazon.msk.auth.iam.IAMClientCallbackHandler"

Utiliser SASL/PLAIN pour s'authentifier

Pour vous connecter à Kafka à l'aide de l'authentification SASL/PLAIN (nom d'utilisateur et mot de passe), configurez les options suivantes. Utilisez le nom de classe ombré PlainLoginModule :

Python
kafka_options = {
"kafka.bootstrap.servers": "<bootstrap-server>:9093",
"subscribe": "<topic>",
"kafka.security.protocol": "SASL_SSL",
"kafka.sasl.mechanism": "PLAIN",
"kafka.sasl.jaas.config":
'kafkashaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="<username>" password="<password>";',
}

df = spark.readStream.format("kafka").options(**kafka_options).load()

Databricks vous recommande de stocker votre mot de passe en tant que secret plutôt que de l'inclure directement dans votre code. Pour plus d'informations, consultez Gestion des secrets.

Utiliser SASL/SCRAM pour s'authentifier

Pour vous connecter à Kafka en utilisant SASL/SCRAM (SCRAM-SHA-256 ou SCRAM-SHA-512), configurez les options suivantes. Utilisez le nom de classe ombré ScramLoginModule :

Python
kafka_options = {
"kafka.bootstrap.servers": "<bootstrap-server>:9093",
"subscribe": "<topic>",
"kafka.security.protocol": "SASL_SSL",
"kafka.sasl.mechanism": "SCRAM-SHA-512",
"kafka.sasl.jaas.config":
'kafkashaded.org.apache.kafka.common.security.scram.ScramLoginModule required username="<username>" password="<password>";',
}

df = spark.readStream.format("kafka").options(**kafka_options).load()
remarque

Remplacez SCRAM-SHA-512 par SCRAM-SHA-256 si votre cluster Kafka est configuré pour utiliser SCRAM-SHA-256.

Databricks vous recommande de stocker votre mot de passe en tant que secret plutôt que de l'inclure directement dans votre code. Pour plus d'informations, consultez Gestion des secrets.

Utilisez SSL pour connecter Databricks à Kafka

Pour activer les connexions SSL/TLS à Kafka, définissez kafka.security.protocol sur SSL et fournissez les options de configuration du magasin de confiance et du magasin de clés préfixées par kafka.. Pour les connexions SSL qui ne nécessitent qu'une authentification du serveur (TLS unidirectionnel), vous devez utiliser un magasin de confiance. Pour le TLS mutuel (mTLS) où le broker Kafka authentifie également le client, vous devez utiliser à la fois un magasin de confiance et un magasin de clés.

Les options SSL/TLS suivantes sont disponibles. Pour la liste complète des propriétés SSL, consultez la documentation de configuration SSL d'Apache Kafka et la documentation sur le chiffrement et l'authentification avec SSL dans la documentation Confluent.

Option

Description

kafka.security.protocol

Réglez sur SSL pour activer le chiffrement TLS.

kafka.ssl.truststore.location

Chemin vers le fichier du magasin de confiance contenant les certificats d'autorité de certification (CA) de confiance.

kafka.ssl.truststore.password

Mot de passe du fichier de clés de confiance.

kafka.ssl.truststore.type

Format de fichier du magasin de confiance (default : JKS).

kafka.ssl.keystore.location

Chemin d'accès au fichier de magasin de clés contenant le certificat client et la clé privée (requis pour mTLS).

kafka.ssl.keystore.password

Mot de passe du fichier de stockage de clés.

kafka.ssl.key.password

Mot de passe de la clé privée dans le magasin de clés.

kafka.ssl.endpoint.identification.algorithm

Algorithme de vérification du Hostname. La valeur par défaut est https. Définir sur une chaîne vide pour désactiver.

Option

Description

kafka.security.protocol

Réglez sur SSL pour activer le chiffrement TLS.

kafka.ssl.truststore.location

Chemin vers le fichier du magasin de confiance contenant les certificats d'autorité de certification (CA) de confiance.

kafka.ssl.truststore.password

Mot de passe du fichier de clés de confiance.

kafka.ssl.truststore.type

Format de fichier du magasin de confiance (default : JKS).

kafka.ssl.keystore.location

Chemin d'accès au fichier de magasin de clés contenant le certificat client et la clé privée (requis pour mTLS).

kafka.ssl.keystore.password

Mot de passe du fichier de stockage de clés.

kafka.ssl.key.password

Mot de passe de la clé privée dans le magasin de clés.

kafka.ssl.endpoint.identification.algorithm

Algorithme de vérification du Hostname. La valeur par défaut est https. Définir sur une chaîne vide pour désactiver.

Si vous utilisez SSL, Databricks vous recommande de :

  • Stockez vos certificats dans un volume Unity Catalog. Les utilisateurs qui ont accès en lecture au volume peuvent utiliser vos certificats Kafka. Pour plus d’informations, consultez Que sont les volumes Unity Catalog ?.
  • Stockez vos mots de passe de certificat en tant que secrets dans un Secret Scope. Pour plus d’informations, consultez Manage secret scopes.

L'exemple suivant utilise des emplacements de stockage d'objets et des secrets Databricks pour activer une connexion SSL :

Python
df = (spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "<bootstrap-server>:9093")
.option("kafka.security.protocol", "SSL")
.option("kafka.ssl.truststore.location", <truststore-location>)
.option("kafka.ssl.keystore.location", <keystore-location>)
.option("kafka.ssl.keystore.password", dbutils.secrets.get(scope=<certificate-scope-name>,key=<keystore-password-key-name>))
.option("kafka.ssl.truststore.password", dbutils.secrets.get(scope=<certificate-scope-name>,key=<truststore-password-key-name>))
)

Utiliser les noms de classe Kafka obscurcis de Databricks

Databricks regroupe des versions propriétaires et « shaded » des bibliothèques clientes Kafka. Tous les noms de classes clients Kafka que vous référencez dans les options de configuration d'authentification doivent utiliser le préfixe de nom de classe masquée au lieu du nom de classe open source standard. Ceci s'applique à toute classe référencée dans des options comme kafka.sasl.jaas.config, kafka.sasl.login.callback.handler.class et kafka.sasl.client.callback.handler.class.

Si vous utilisez des noms de classe non ombrés, votre code génère une erreur RESTRICTED_STREAMING_OPTION_PERMISSION_ENFORCED. Consultez la FAQ pour plus de détails.

Gestion des erreurs potentielles

  • Échecs d'authentification IAM

    Si vous voyez SaslException, Failed to construct kafka consumer, ou des erreurs d'authentification, vérifiez :

    • L'ARN du rôle IAM dans votre kafka.sasl.jaas.config est correct et correctement formaté.
    • Le rôle IAM dispose des permissions nécessaires pour accéder à votre cluster MSK (par exemple, kafka-cluster:Connect, kafka-cluster:ReadData).
    • Pour les profils d'instance, assurez-vous que le profil d'instance est attaché au cluster et dispose des autorisations MSK.
    • Pour l’accès inter-comptes, vérifiez que la relation de confiance permet au compte Databricks d’assumer le rôle.
  • Problèmes de connectivité réseau

    Si vous voyez TimeoutException ou des échecs de connexion :

    • Vérifiez que le groupe de sécurité du cluster MSK autorise le trafic entrant depuis le groupe de sécurité du compute Databricks sur les ports Kafka (généralement 9092 pour PLAINTEXT, 9094 pour SASL/SSL ou 9098 pour IAM).
    • Assurez-vous que le peering Virtual Private Cloud (VPC) ou PrivateLink est correctement configuré entre le Virtual Private Cloud (VPC) Databricks et le Virtual Private Cloud (VPC) MSK.
    • Confirmez que le Hostname kafka.bootstrap.servers et le port sont corrects.
  • Aucun enregistrement renvoyé

    Si l'authentification réussit mais qu'aucune donnée n'est renvoyée :

    • Vérifiez que vous êtes abonné au nom de rubrique correct.
    • Le default startingOffsets est latest, qui ne lit que les nouvelles données. Définissez startingOffsets sur earliest pour lire les données existantes.
    • Vérifiez que votre rôle IAM dispose de l'autorisation kafka-cluster:ReadData pour le sujet.