web-dev-qa-db-ja.com

Kafka "JAAS configで指定されていないログインモジュール"

Kafkaコンソールスクリプトを使用してsaslで保護されています。Kafkaはsaslで保護されています。リスナーはSASL_PLAINTEXTおよびメカニズムはPLAINです。

私がやったこと:kafka script:

bin/kafka-consumer-groups.sh --bootstrap-server (address) --list

しかし、私は得る

WARN Bootstrap broker (address) disconnected (org.Apache.kafka.clients.NetworkClient)

コマンドは失敗しますが、これはsaslで保護されているため理解できます。

そこで、そのコマンドにクライアントのユーザー名/パスワードを追加する方法を試しました。まず、kafka-console-consumerスクリプトを実行しようとしました。--command-configを使用して必要なファイルを追加しました。私はすぐにjaasファイルを直接追加できず、.propertiesファイルを使用する必要があることをすぐに発見しました。

私のプロパティファイル(括弧は「検閲された」データを示すことに注意してください、私はすべての実際のデータをここに置くことはできません):

bootstrap.servers=(address)
zookeeper.connect=127.0.0.1:2181
zookeeper.connection.timeout.ms=6000
sasl.jaas.config=(path)/consumer_jaas.conf
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
group.id=(group)

私のjaasファイル:

KafkaClient {
    org.Apache.kafka.common.security.plain.PlainLoginModule required
    username=(username)
    password=(password);
};

このjaasファイルは、標準のJavaアプリケーションで機能します。

ただし、kafka-consumer-groupsスクリプトまたはkafka-console-consumerのいずれかを実行しようとすると、次のエラーが表示されます。

Exception in thread "main" org.Apache.kafka.common.KafkaException: Java.lang.IllegalArgumentException: Login module not specified in JAAS config
at org.Apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.Java:94)
at org.Apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.Java:93)
at org.Apache.kafka.common.network.ChannelBuilders.clientChannelBuilder(ChannelBuilders.Java:51)
at org.Apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.Java:84)
at kafka.admin.AdminClient$.create(AdminClient.scala:229)
at kafka.admin.AdminClient$.create(AdminClient.scala:223)
at kafka.admin.AdminClient$.create(AdminClient.scala:221)
at kafka.admin.ConsumerGroupCommand$KafkaConsumerGroupService.createAdminClient(ConsumerGroupCommand.scala:454)
at kafka.admin.ConsumerGroupCommand$KafkaConsumerGroupService.<init>(ConsumerGroupCommand.scala:389)
at kafka.admin.ConsumerGroupCommand$.main(ConsumerGroupCommand.scala:65)
at kafka.admin.ConsumerGroupCommand.main(ConsumerGroupCommand.scala)
Caused by: Java.lang.IllegalArgumentException: Login module not specified in JAAS config
at org.Apache.kafka.common.security.JaasConfig.<init>(JaasConfig.Java:68)
at org.Apache.kafka.common.security.JaasUtils.jaasConfig(JaasUtils.Java:59)
at org.Apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.Java:85)

このjaasファイルは、Javaと通信するアプリのkafkaで動作しますが、動作するファイルの直接コピーです。ただし、ここでは、コンソールツールを使用しても機能しません。ソリューションを検索しようとしましたが、有用なものが見つかりません。

誰でもこれで私を助けることができますか?

12
Tomasz

KafkaクライアントにJAAS構成を提供するには2つの方法があります。

  • クライアントプロパティ経由:sasl.jaas.config。その場合、実際のJAAS構成エントリに設定します。たとえば、構成ファイルは次のようになります。

    bootstrap.servers=(address)
    zookeeper.connect=127.0.0.1:2181
    zookeeper.connection.timeout.ms=6000
    sasl.jaas.config=org.Apache.kafka.common.security.plain.PlainLoginModule required username="(username)" password="(password)";
    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=PLAIN
    group.id=(group)
    

    既にわかったように、--command-configを使用してプロパティファイルをkafka-consumer-groups.shに渡すことができます。

  • Javaプロパティ:Java.security.auth.login.config経由。この場合、JAASファイルのパスに設定します。KAFKA_OPTSkafka-consumer-groups.shは自動的にそれを選択します。

    export KAFKA_OPTS="-Djava.security.auth.login.config=(path)/consumer_jaas.conf"
    
18
Mickael Maison