Todos os produtos
Search
Central de documentação

E-MapReduce:Usar autenticação LDAP

Última atualização: Sep 21, 2026

Este tópico descreve como ativar a autenticação LDAP para o EMR Kafka e fornece um exemplo detalhado.

Pré-requisitos

Crie um cluster Dataflow e selecione os services Kafka e OpenLDAP. Para mais informações, consulte Create a Dataflow Kafka cluster.

Limites

  • Este recurso está disponível para clusters EMR Kafka que executam EMR V3.44.0 ou posterior, ou EMR V5.10.0 ou posterior.

  • Um service EMR OpenLDAP ou um service LDAP externo deve estar disponível no cluster.

    Este tópico usa o service EMR OpenLDAP como exemplo.

Precauções

Para usar a autenticação por grupo de usuários, certifique-se de que o recurso memberOf overlay esteja ativado para o service LDAP ou que o atributo memberOf seja compatível com os usuários LDAP.

Ativar a autenticação LDAP

  1. Crie um superusuário.

    Nota

    Se você já criou um superusuário, ignore esta etapa.

    Um superusuário do Kafka pode acessar todos os recursos do Kafka. O superusuário gerencia a comunicação entre os nós broker e os demais componentes. Este exemplo usa o service EMR OpenLDAP para demonstrar como adicionar um superusuário do Kafka.

    1. Conecte-se ao nó master-1-1 do cluster via SSH. Para mais informações, consulte Log on to a cluster.

    2. Crie um arquivo chamado kafka.ldif com o conteúdo a seguir.

      Este tópico usa o comando ldap para adicionar um usuário LDAP com o UID kafka e a senha kafka-secret.

      dn: uid=kafka,ou=people,o=emr
      cn: kafka
      sn: kafka
      objectClass: inetOrgPerson
      userPassword: kafka-secret
      uid: kafka
    3. Execute o comando a seguir para adicionar o usuário LDAP.

      ldapadd -H ldap://master-1-1:10389 -f kafka.ldif -D ${uid} -w ${rootDnPW}
      Nota
      • ${uid}: O valor do parâmetro admin_dn na página Configure do service OpenLDAP no console do EMR.

      • ${rootDnPW}: O valor do parâmetro admin_pwd na página Configure do service OpenLDAP no console do EMR.

      • 10389: A porta de escuta do service OpenLDAP.

      Após adicionar o usuário, execute o comando a seguir para visualizar suas informações.

      ldapsearch -w ${rootDnPW}  -D ${uid} -H ldap://master-1-1:10389 -b uid=kafka,ou=people,o=emr
  2. Acesse a página de configuração do Kafka.

    1. Acesse o EMR on ECS console.

    2. Na barra de navegação superior, selecione a região necessária e o grupo de recursos.

    3. Na coluna Actions do cluster de destino, clique em Services.

    4. Na página Services, clique em Configure na seção do service Kafka.

  3. Modifique e salve a configuração.

    1. Na página Configure, clique na aba server.properties.

    2. Altere o valor do item de configuração kafka.ssl.config.type para CUSTOM.

    3. Altere o valor do item de configuração authorizer.class.name para kafka.security.ldap.authorizer.SimpleLdapAuthorizer.

    4. Salve a configuração.

      1. Clique em Save.

      2. Na caixa de diálogo, insira um motivo no campo Execution Reason.

  4. Adicione e salve parâmetros personalizados.

    1. Na aba server.properties, clique em Add Configuration Item.

    2. Na caixa de diálogo Add Configuration Item, adicione os itens a seguir.

      Parameter

      Value

      Descrição

      super.users

      User:kafka

      kafka é o nome de usuário que você criou. Substitua conforme necessário.

      Para mais informações, consulte Step 1.

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

      PLAIN

      Substitua ${listener} pelo nome de um listener específico, como 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" ;

      Substitua ${listener} pelo nome de um listener específico, como sasl_ssl.

      Substitua também os seguintes valores de configuração relacionados ao LDAP:

      • username: O superusuário que o service Kafka usa para a comunicação entre os nós.

      • emr.kafka.security.ldap.user.name.attribute: O atributo de nome de usuário LDAP usado para obter o nome de usuário.

      • emr.kafka.security.ldap.user.base.dn: O distinguished name (DN) base do usuário LDAP.

      • emr.kafka.security.ldap.group.name.attribute: O atributo do nome do grupo de usuários LDAP.

      • emr.kafka.security.ldap.group.base.dn: O DN base do grupo de usuários LDAP.

      • emr.kafka.security.ldap.admin.name.attribute: O atributo do usuário administrador LDAP.

      • emr.kafka.security.ldap.admin.base.dn: O DN base do usuário administrador LDAP.

      • emr.kafka.security.ldap.url: A URL do LDAP.

      • emr.kafka.security.ldap.bind.user: O nome de usuário do administrador LDAP usado para autenticação de grupo de usuários.

      • emr.kafka.security.ldap.bind.user.password: A senha do administrador LDAP.

      • emr.kafka.security.ldap.user.member.of.attribute: O atributo que indica os grupos aos quais um usuário pertence.

      • emr.kafka.security.ldap.group.authorization.support: Especifica se a autorização por grupo deve ser ativada. Quando este parâmetro é definido como true, o usuário herda as permissões dos grupos de usuários aos quais está atribuído.

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

      kafka.security.ldap.authenticator.LdapAuthenticateCallbackHandler

      Substitua ${listener} pelo nome de um listener específico, como sasl_ssl.

      sasl.mechanism.inter.broker.protocol

      PLAIN

      Nenhum

      sasl.enabled.mechanisms

      PLAIN

      Nenhum

    3. Modifique os demais parâmetros.

      Ajuste as configurações a seguir conforme suas necessidades.

      Nota

      Substitua o nome de usuário e a senha no valor do parâmetro kafka.client.jaas.content conforme necessário. Recomenda-se usar o superusuário.

      Arquivo de configuração

      Parameter

      Value

      Descrição

      kafka_client_jaas.conf

      kafka.client.jaas.content

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

      O valor deve terminar com ponto e vírgula (;).

      schema-registry.properties

      schema_registry_opts

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

      Se este parâmetro já tiver um valor, acrescente o novo conteúdo ao final.

      kafka-rest.properties

      kafkarest_opts

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

      Se este parâmetro já tiver um valor, acrescente o novo conteúdo ao final.

  5. Reinicie o service Kafka.

    1. Na página Configure do service Kafka, escolha More > Restart.

    2. Na caixa de diálogo exibida, insira um motivo para a ação e clique em OK.

    3. Na caixa de diálogo Confirm, clique em OK.

Exemplo de uso

As operações deste exemplo aplicam-se ao Kafka open source 2.4.1. Para outras versões do Kafka, consulte Apache Kafka.

  1. Crie usuários e grupos de usuários de teste.

    1. Se o recurso memberOf overlay não estiver ativado para o OpenLDAP, siga estas etapas para ativá-lo.

      Nota
      • O método de configuração a seguir é apenas uma referência. O procedimento para ativar o memberOf overlay varia conforme o service LDAP.

      • Aplique esta configuração a todos os nós OpenLDAP.

      • Ajuste os parâmetros em todos os arquivos de configuração a seguir conforme necessário. Por exemplo:

        • olcModulepath: Em sistemas operacionais de 32 bits, o caminho é /usr/lib/openldap.

        • dn: cn=module{0},cn=config: Se o diretório /etc/openldap/slapd.d/cn=config já contiver um arquivo cn=module{0}.ldif, altere o número após module para 1. Se contiver um arquivo cn=module{1}.ldif, altere o número para 2, e assim por diante.

        • dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config: Configure este valor com base no valor de olcDatabase no diretório /etc/openldap/slapd.d/cn=config. Por exemplo, se olcDatabase={2}hdb.ldif existir, defina o valor como hdb.

      1. Execute o comando vim memberof_config.ldif para criar um novo arquivo de configuração memberof_config.ldif. O conteúdo do arquivo é o seguinte.

        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. Execute o comando vim refint1.ldif para criar o arquivo de configuração refint1.ldif. O conteúdo do arquivo é o seguinte.

        dn: cn=module{0},cn=config
        add: olcmoduleload
        olcmoduleload: refint
      3. Execute o comando vim refint2.ldif para criar um novo arquivo de configuração refint2.ldif com o seguinte conteúdo.

        dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
        objectClass: olcConfig
        objectClass: olcOverlayConfig
        objectClass: olcRefintConfig
        objectClass: top
        olcOverlay: refint
        olcRefintAttribute: memberof member manager owner
      4. Execute os comandos a seguir para carregar os arquivos de configuração.

        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. Crie usuários de teste.

      Crie um arquivo chamado kafka-users.ldif com o conteúdo a seguir e, em seguida, use o comando ldapadd para adicionar os usuários de teste.

      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. Crie grupos de usuários de teste.

      Crie um arquivo chamado kafka-groups.ldif com o conteúdo a seguir e, em seguida, use o comando ldapadd para adicionar os grupos de usuários de teste.

      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. No servidor onde o LDAP está em execução, execute o comando a seguir para verificar o atributo memberOf dos usuários de teste.

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

      O resultado indica que o atributo memberOf de kafka-user1 inclui kafka-group1 e kafka-group2, e que o atributo memberOf de kafka-user2 inclui kafka-group1.

  2. Crie arquivos de configuração do cliente.

    1. Crie um arquivo de configuração do cliente chamado client.properties com o seguinte conteúdo.

      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. Crie um arquivo de configuração do cliente chamado kafka-user1.properties com o seguinte conteúdo.

      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. Crie um arquivo de configuração do cliente chamado kafka-user2.properties com o seguinte conteúdo.

      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. Crie um tópico de teste chamado test.

    kafka-topics.sh  --bootstrap-server core-1-1:9092 --command-config  client.properties --create --topic test --replication-factor 3 --partitions 2
  4. Conceda permissões.

    Para mais informações sobre os comandos de autorização, consulte 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

    Execute o comando a seguir para visualizar os resultados da autorização.

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

    As seguintes informações são retornadas:

    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. Verifique as permissões.

    • O usuário kafka-user1 consegue gravar no tópico test por meio do kafka-group2.

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

      Insira mensagens de teste no prompt. A operação de gravação é concluída com sucesso.

      #Enter test messages after the prompt.
      >a
      >b
      >c
      >d
    • O usuário kafka-user1 não consegue ler do tópico 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

      A autenticação falha e o usuário não consegue acessar o tópico test.

    • O usuário kafka-user2 não consegue gravar no tópico 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.

      A autenticação falha.

    • O usuário kafka-user2 consegue ler do tópico 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.