Tous les produits
Search
Centre de documentation

E-MapReduce:Utiliser l'authentification LDAP

Dernière mise à jour :Sep 21, 2026

Cette rubrique explique comment activer l'authentification LDAP pour EMR Kafka et fournit un exemple détaillé.

Prérequis

Vous avez créé un cluster Dataflow et sélectionné les services Kafka et OpenLDAP. Pour plus d'informations, consultez la rubrique Créer un cluster Dataflow Kafka.

Limites

  • Cette fonctionnalité est disponible pour les clusters EMR Kafka exécutant EMR V3.44.0 ou version ultérieure, ou EMR V5.10.0 ou version ultérieure.

  • Un service EMR OpenLDAP ou un service LDAP externe est disponible dans le cluster.

    Cette rubrique utilise le service EMR OpenLDAP à titre d'exemple.

Précautions

Si vous souhaitez utiliser l'authentification par groupe d'utilisateurs, assurez-vous que la fonctionnalité de superposition memberOf est activée pour le service LDAP ou que l'attribut memberOf est pris en charge pour les utilisateurs LDAP.

Activer l'authentification LDAP

  1. Créez un superutilisateur.

    Remarque

    Si vous avez déjà créé un superutilisateur, ignorez cette étape.

    Un superutilisateur Kafka peut accéder à toutes les ressources Kafka. Le superutilisateur gère la communication entre les nœuds broker et les autres composants. Cet exemple utilise le service EMR OpenLDAP pour montrer comment ajouter un superutilisateur Kafka.

    1. Connectez-vous au nœud master-1-1 du cluster via SSH. Pour plus d'informations, consultez la rubrique Se connecter à un cluster.

    2. Créez un fichier nommé kafka.ldif avec le contenu suivant.

      Cette rubrique utilise la commande ldap pour ajouter un utilisateur LDAP avec l'UID kafka et le mot de passe kafka-secret.

      dn: uid=kafka,ou=people,o=emr
      cn: kafka
      sn: kafka
      objectClass: inetOrgPerson
      userPassword: kafka-secret
      uid: kafka
    3. Exécutez la commande suivante pour ajouter l'utilisateur LDAP.

      ldapadd -H ldap://master-1-1:10389 -f kafka.ldif -D ${uid} -w ${rootDnPW}
      Remarque
      • ${uid} : valeur du paramètre admin_dn sur la page Configure du service OpenLDAP dans la console EMR.

      • ${rootDnPW} : valeur du paramètre admin_pwd sur la page Configure du service OpenLDAP dans la console EMR.

      • 10389 : port d'écoute du service OpenLDAP.

      Après avoir ajouté l'utilisateur, exécutez la commande suivante pour afficher ses informations.

      ldapsearch -w ${rootDnPW}  -D ${uid} -H ldap://master-1-1:10389 -b uid=kafka,ou=people,o=emr
  2. Accédez à la page de configuration de Kafka.

    1. Connectez-vous à la console EMR on ECS.

    2. Dans la barre de navigation supérieure, sélectionnez la région requise et le groupe de ressources.

    3. Dans la colonne Actions du cluster cible, cliquez sur Services.

    4. Sur la page Services, cliquez sur Configure dans la section du service Kafka.

  3. Modifiez et enregistrez la configuration.

    1. Sur la page Configure, cliquez sur l'onglet server.properties.

    2. Remplacez la valeur de l'élément de configuration kafka.ssl.config.type par CUSTOM.

    3. Remplacez la valeur de l'élément de configuration authorizer.class.name par kafka.security.ldap.authorizer.SimpleLdapAuthorizer.

    4. Enregistrez la configuration.

      1. Cliquez sur Save.

      2. Dans la boîte de dialogue, saisissez une raison dans le champ Execution Reason.

  4. Ajoutez et enregistrez des paramètres personnalisés.

    1. Sur l'onglet server.properties, cliquez sur Add Configuration Item.

    2. Dans la boîte de dialogue Add Configuration Item, ajoutez les éléments suivants.

      Paramètre

      Valeur

      Description

      super.users

      User:kafka

      kafka est le nom d'utilisateur que vous avez créé. Remplacez-le si nécessaire.

      Pour plus d'informations, consultez l'étape 1.

      listener.name.${listener}.sasl.enabled.mechanisms

      PLAIN

      Remplacez ${listener} par le nom d'un écouteur spécifique, tel que sasl_ssl.

      listener.name.${listener}.plain.sasl.jaas.config

      org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="kafka-secret" emr.kafka.security.ldap.user.name.attribute="uid" emr.kafka.security.ldap.user.base.dn="ou=people,o=emr" emr.kafka.security.ldap.group.name.attribute="cn" emr.kafka.security.ldap.group.base.dn="ou=groups,o=emr" emr.kafka.security.ldap.admin.name.attribute="uid" emr.kafka.security.ldap.admin.base.dn="o=emr" emr.kafka.security.ldap.url="ldaps://master-1-1:10636" emr.kafka.security.ldap.bind.user="admin" emr.kafka.security.ldap.bind.user.password="WMMuhh3P" emr.kafka.security.ldap.user.member.of.attribute="memberOf" emr.kafka.security.ldap.group.authorization.support="true" ;

      Remplacez ${listener} par le nom d'un écouteur spécifique, tel que sasl_ssl.

      Vous devez également remplacer les valeurs de configuration LDAP suivantes :

      • username : le superutilisateur utilisé par le service Kafka pour la communication entre les nœuds.

      • emr.kafka.security.ldap.user.name.attribute : l'attribut de nom d'utilisateur LDAP utilisé pour obtenir le nom d'utilisateur.

      • emr.kafka.security.ldap.user.base.dn : le nom distinctif de base (DN) de l'utilisateur LDAP.

      • emr.kafka.security.ldap.group.name.attribute : l'attribut du nom de groupe d'utilisateurs LDAP.

      • emr.kafka.security.ldap.group.base.dn : le DN de base du groupe d'utilisateurs LDAP.

      • emr.kafka.security.ldap.admin.name.attribute : l'attribut de l'utilisateur administrateur LDAP.

      • emr.kafka.security.ldap.admin.base.dn : le DN de base de l'utilisateur administrateur LDAP.

      • emr.kafka.security.ldap.url : l'URL LDAP.

      • emr.kafka.security.ldap.bind.user : le nom d'utilisateur de l'administrateur LDAP utilisé pour l'authentification par groupe d'utilisateurs.

      • emr.kafka.security.ldap.bind.user.password : le mot de passe de l'administrateur LDAP.

      • emr.kafka.security.ldap.user.member.of.attribute : l'attribut indiquant les groupes auxquels appartient un utilisateur.

      • emr.kafka.security.ldap.group.authorization.support : indique s'il faut activer l'autorisation de groupe. Si ce paramètre est défini sur true, un utilisateur hérite des autorisations de ses groupes d'utilisateurs assignés.

      listener.name.${listener}.plain.sasl.server.callback.handler.class

      kafka.security.ldap.authenticator.LdapAuthenticateCallbackHandler

      Remplacez ${listener} par le nom d'un écouteur spécifique, tel que sasl_ssl.

      sasl.mechanism.inter.broker.protocol

      PLAIN

      Aucun

      sasl.enabled.mechanisms

      PLAIN

      Aucun

    3. Modifiez d'autres paramètres.

      Modifiez les configurations suivantes selon vos besoins.

      Remarque

      Vous devez remplacer le nom d'utilisateur et le mot de passe dans la valeur du paramètre kafka.client.jaas.content si nécessaire. Nous vous recommandons d'utiliser le superutilisateur.

      Fichier de configuration

      Paramètre

      Valeur

      Description

      kafka_client_jaas.conf

      kafka.client.jaas.content

      KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka" password="kafka-secret"; };

      La valeur doit se terminer par un point-virgule (;).

      schema-registry.properties

      schema_registry_opts

      -Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf

      Si ce paramètre possède déjà une valeur, ajoutez le nouveau contenu.

      kafka-rest.properties

      kafkarest_opts

      -Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf

      Si ce paramètre possède déjà une valeur, ajoutez le nouveau contenu.

  5. Redémarrez le service Kafka.

    1. Sur la page Configure du service Kafka, choisissez More > Restart.

    2. Dans la boîte de dialogue qui s'affiche, saisissez une raison pour l'action et cliquez sur OK.

    3. Dans la boîte de dialogue Confirm, cliquez sur OK.

Exemple d'utilisation

Les opérations de cet exemple s'appliquent à Kafka open source 2.4.1. Pour les autres versions de Kafka, consultez la documentation Apache Kafka.

  1. Créez des utilisateurs et des groupes d'utilisateurs de test.

    1. Si la fonctionnalité de superposition memberOf n'est pas activée pour OpenLDAP, suivez ces étapes pour l'activer.

      Remarque
      • La méthode de configuration suivante est fournie à titre indicatif uniquement. La méthode d'activation de la superposition memberOf varie selon le service LDAP.

      • Appliquez cette configuration à tous les nœuds OpenLDAP.

      • Modifiez les paramètres dans tous les fichiers de configuration suivants si nécessaire. Par exemple :

        • olcModulepath : pour un système d'exploitation 32 bits, le chemin est /usr/lib/openldap.

        • dn: cn=module{0},cn=config : si le répertoire /etc/openldap/slapd.d/cn=config contient déjà un fichier cn=module{0}.ldif, remplacez le numéro après module par 1. S'il contient un fichier cn=module{1}.ldif, remplacez le numéro par 2, et ainsi de suite.

        • dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config : configurez cette valeur en fonction de la valeur olcDatabase dans le répertoire /etc/openldap/slapd.d/cn=config. Par exemple, si olcDatabase={2}hdb.ldif existe, définissez la valeur sur hdb.

      1. Exécutez la commande vim memberof_config.ldif pour créer un nouveau fichier de configuration memberof_config.ldif. Le contenu du fichier est le suivant.

        dn: cn=module{0},cn=config
        cn: module{0}
        objectClass: olcModuleList
        objectclass: top
        olcModuleload: memberof.la
        olcModulePath: /usr/lib64/openldap
        
        dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
        objectClass: olcConfig
        objectClass: olcMemberOf
        objectClass: olcOverlayConfig
        objectClass: top
        olcOverlay: memberof
        olcMemberOfDangling: ignore
        olcMemberOfRefInt: TRUE
        olcMemberOfGroupOC: groupOfNames
        olcMemberOfMemberAD: member
        olcMemberOfMemberOfAD: memberOf
      2. Exécutez la commande vim refint1.ldif pour créer le fichier de configuration refint1.ldif. Le contenu du fichier est le suivant.

        dn: cn=module{0},cn=config
        add: olcmoduleload
        olcmoduleload: refint
      3. Exécutez la commande vim refint2.ldif pour créer un nouveau fichier de configuration refint2.ldif avec le contenu suivant.

        dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
        objectClass: olcConfig
        objectClass: olcOverlayConfig
        objectClass: olcRefintConfig
        objectClass: top
        olcOverlay: refint
        olcRefintAttribute: memberof member manager owner
      4. Exécutez les commandes suivantes pour charger les fichiers de configuration.

        ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
        ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
        ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
    2. Créez des utilisateurs de test.

      Créez un fichier nommé kafka-users.ldif avec le contenu suivant, puis utilisez la commande ldapadd pour ajouter les utilisateurs de test.

      dn: uid=kafka-user1,ou=people,o=emr
      cn: kafka-user1
      sn: kafka-user1
      uid: kafka-user1
      objectClass: inetOrgPerson
      userPassword: kafka-secret
      
      dn: uid=kafka-user2,ou=people,o=emr
      cn: kafka-user2
      sn: kafka-user2
      uid: kafka-user2
      objectClass: inetOrgPerson
      userPassword: kafka-secret
    3. Créez des groupes d'utilisateurs de test.

      Créez un fichier nommé kafka-groups.ldif avec le contenu suivant, puis utilisez la commande ldapadd pour ajouter les groupes d'utilisateurs de test.

      dn: cn=kafka-group1,ou=groups,o=emr
      cn: kafka-group1
      objectClass: groupOfNames
      member: uid=kafka-user1,ou=people,o=emr
      member: uid=kafka-user2,ou=people,o=emr
      
      dn: cn=kafka-group2,ou=groups,o=emr
      cn: kafka-group2
      objectClass: groupOfNames
      member: uid=kafka-user1,ou=people,o=emr
    4. Sur le serveur où LDAP est en cours d'exécution, exécutez la commande suivante pour vérifier l'attribut memberOf des utilisateurs de test.

      ldapsearch -Q -Y EXTERNAL -H ldapi:///  -b ou=people,o=emr memberOf

      La sortie indique que l'attribut memberOf de kafka-user1 inclut kafka-group1 et kafka-group2, et que l'attribut memberOf de kafka-user2 inclut kafka-group1.

  2. Créez des fichiers de configuration client.

    1. Créez un fichier de configuration client nommé client.properties avec le contenu suivant.

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      #Replace the username and password based on the client identity.
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka" password="kafka-secret";
    2. Créez un fichier de configuration client nommé kafka-user1.properties avec le contenu suivant.

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      #Replace the username and password based on the client identity.
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka-user1" password="kafka-secret";
    3. Créez un fichier de configuration client nommé kafka-user2.properties avec le contenu suivant.

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      #Replace the username and password based on the client identity.
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka-user2" password="kafka-secret";
  3. Créez un sujet de test nommé test.

    kafka-topics.sh  --bootstrap-server core-1-1:9092 --command-config  client.properties --create --topic test --replication-factor 3 --partitions 2
  4. Accordez des autorisations.

    Pour plus d'informations sur les commandes d'autorisation, consultez la documentation Authorization and ACLs.

    #Permissions for kafka-group2
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-group2 --allow-host "*" --operation All --cluster kafka-cluster
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-group2 --allow-host "*" --operation All --topic test
    #Permissions for kafka-group1
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-group1 --deny-host "*" --operation All --topic test
    #Permissions for kafka-user1
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-user1 --deny-host "*" --operation Read --topic test
    #Permissions for kafka-user2
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user2 --allow-host "*" --operation Read --topic test

    Exécutez la commande suivante pour afficher les résultats d'autorisation.

    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --list --topic test

    Les informations suivantes sont renvoyées :

    Current ACLs for resource `Topic:LITERAL:test`:
            User:kafka-group2 has Allow permission for operations: All from hosts: *
            User:kafka-user2 has Allow permission for operations: Read from hosts: *
            User:kafka-user1 has Deny permission for operations: Read from hosts: *
            User:kafka-group1 has Deny permission for operations: All from hosts: *
  5. Vérifiez les autorisations.

    • L'utilisateur kafka-user1 peut écrire dans le sujet test via kafka-group2.

      kafka-console-producer.sh --broker-list core-1-1:9092 --producer.config ./kafka-user1.properties  --topic test

      Saisissez des messages de test à l'invite. L'opération d'écriture réussit.

      #Enter test messages after the prompt.
      >a
      >b
      >c
      >d
    • L'utilisateur kafka-user1 ne peut pas lire depuis le sujet test.

      #Grant permission to the consumer group.
      kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user1 --allow-host "*" --operation All --group kka-user1-consumer
      kafka-console-consumer.sh --bootstrap-server core-1-1:9092 --consumer.config ./kafka-user1.properties --topic test --group kafka-user1-consumer

      L'authentification échoue et l'utilisateur ne peut pas accéder au sujet test.

    • L'utilisateur kafka-user2 ne peut pas écrire dans le sujet test.

      kafka-console-producer.sh --broker-list core-1-1:9092 --producer.config ./kafka-user2.properties  --topic test
      #Enter a test message after the prompt.
      >a
      #Authentication fails.

      L'authentification échoue.

    • L'utilisateur kafka-user2 peut lire depuis le sujet test.

      #Grant permission to the consumer group.
      kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user2 --allow-host "*" --operation All --group kafka-user2-consumer
      kafka-console-consumer.sh --bootstrap-server core-1-1:9092 --consumer.config ./kafka-user2.properties --topic test --group kafka-user2-consumer --from-beginning
      #Data is consumed as expected.