当前位置: 首页 > 知识库问答 >
问题:

Kafka SASL/SCRAM身份验证失败

柯国安
2023-03-14

我试图添加安全性到我的kafka集群,我按照留档:

    < Li > https://Kafka . Apache . org/documentation/# security _ sasl _ scram < Li > https://docs . confluent . io/current/Kafka/authentic ation _ sasl/authentic ation _ sasl _ scram . html #

我使用此添加用户:

kafka-configs.sh --zookeeper zookeeper1:2181 --alter --add-config 'SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]' --entity-type users --entity-name admin

我修改服务器。属性:

broker.id=1
listeners=SASL_PLAINTEXT://kafka1:9092
advertised.listeners=SASL_PLAINTEXT://kafka1:9092
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
security.inter.broker.protocol=SASL_PLAINTEXT
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
default.replication.factor=3
min.insync.replicas=2
log.dirs=/var/lib/kafka
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

创建了jaas文件:

KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username="admin"
    password="admin-secret"
};

在/etc/profile.d中创建了文件kafka_opts.sh:

export KAFKA_OPTS=-Djava.security.auth.login.config=/opt/kafka_2.12-2.5.0/config/kafka_server_jaas.conf

但当我启动kafka时,它会抛出以下错误:

[2020-05-04 10:54:08,782] INFO [Controller id=1, targetBrokerId=1] Failed authentication with kafka1/kafka1 (Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256) (org.apache.kafka.common.network.Selector)

我用每个服务器的ip代替kafka1、kafka2、kafka 3、zookeeper1、zookieper2和zookeper3,有人能帮我解决这个问题吗?

共有1个答案

姚鹤龄
2023-03-14

我的主要问题是这种配置:

zookeeper.connect=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181/kafka

server.properties中的这种配置需要有顺序的zookeeper创建kafka信息的方式,但这会影响我需要执行命令kafka-configs.sh的方式,所以我将解释我需要遵循的步骤

  1. 首先修改动物园管理员。

我已经从https://zookeeper.apache.org/releases.html官方网站下载了动物园管理员

我修改了 zoo.cfg 文件并添加了安全性的配置:

tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl

我为zookeeper创建了jaas文件:

Server {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    user_admin="admin_secret";
};

我在 /conf/ 上创建了文件 java.env 并添加了以下内容:

SERVER_JVMFLAGS="-Djava.security.auth.login.config=/opt/apache-zookeeper-3.6.0-bin/conf/zookeeper_jaas.conf"

使用此文件,您是在告诉zookeeper使用jaas文件让kafka向zookeeper进行身份验证,以验证zookeeper是否正在获取您只需要运行的文件:

zkServer.sh print-cmd

它将响应:

/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.6.0-bin/bin/../conf/zoo.cfg
"java"  -Dzookeeper.log.dir="/opt/apache-zookeeper-3.6.0-bin/bin/../logs" ........-Djava.security.auth.login.config=/opt/apache-zookeeper-3.6.0-bin/conf/zookeeper_jaas.conf....... "/opt/apache-zookeeper-3.6.0-bin/bin/../conf/zoo.cfg" > "/opt/apache-zookeeper-3.6.0-bin/bin/../logs/zookeeper.out" 2>&1 < /dev/null

我已经从https://www.apache.org/dyn/closer.cgi?官方网站下载了Kafka路径=/Kafka/2 . 5 . 0/Kafka_2.12-2.5.0.tgz

我在服务器属性文件中修改/添加了以下配置:

listeners=SASL_PLAINTEXT://kafka1:9092
advertised.listeners=SASL_PLAINTEXT://kafka1:9092
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
security.inter.broker.protocol=SASL_PLAINTEXT
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin

我为kafka创建了jaas文件:

KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username="admin"
    password="admin_secret";
};
Client {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="admin"
   password="admin_secret";
};

你需要明白的一件重要的事情是,客户端部分需要与zookeeper中的jaas文件相同,KafkaServer部分用于代理之间的通信。

我还需要告诉kafka使用jaas文件,这可以通过设置变量kafka_OPTS来完成:

export KAFKA_OPTS=-Djava.security.auth.login.config=/opt/kafka_2.12-2.5.0/config/kafka_server_jaas.conf

运行以下命令:

kafka-configs.sh --zookeeper zookeeper:2181/kafka --alter --add-config 'SCRAM-SHA-256=[password=admin_secret]' --entity-type users --entity-name admin

正如我之前提到的,我的错误是我没有将/kafka部分添加到动物园管理员ip中(请注意,使用动物园管理员的所有内容都需要在ip的末尾添加/kafka部分),现在如果你开始动物园管理员和kafka,一切都会很好。

 类似资料:
  • Tweepy API请求twitter return me Twitter错误响应:状态代码=401。 这是我的实际代码: 我曾试图用tweepy软件包删除推文,并获得了所有必需的密钥。镊子包装不起作用吗?有人能帮我解决这个问题吗。

  • 问题内容: 尝试使用JavaMail中的NTLM连接到Exchange服务器。我可以连接到SMTP,但不能连接到IMAP。我还可以使用相同的主机/用户名/密码通过OS X Mail.app应用程序进行身份验证,帐户类型=“ IMAP”,端口143,ssl = false,authentication = NTLM,域名=“。 连接代码: 输出: 我尝试通过http://www.oracle.com

  • 我相对来说是JMeter的新手,但是我很难让HTTP Sampler登陆到一个安全的网页上。我认为它需要NTLM认证,所以我使用HTTP授权管理器来传递BlazeMeter指南中指定的凭证 我的授权管理器具有以下值: 基本网址: https:// [测试站点] 用户名: [我的用户名] 密码: [我的密码] 域:与基本网址相同 机制: BASIC_DIGEST 然而,我只是得到一个401错误(见下

  • http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.3.xsd“>

  • 我对詹金斯和一个詹金斯奴隶有一个奇怪的问题。我的构建使用Maven发布插件。项目从Subversion存储库中签出。稍后在构建过程中,Maven发布插件尝试向我的项目pom.xml提交一些更改。正是在这里,这个过程有时会在詹金斯奴隶身上失败。每当它失败时,我需要在主服务器上再次运行构建,然后再在Jenkins从服务器上运行。 null

  • 我的用户需要根据他的Git存储库验证他的私钥。它类似于任何DB客户端工具中的“测试连接”按钮。 我在Java使用JSCH进行此验证(我只需要使用SSH连接并告诉连接成功)。下面是我的Java代码 我得到以下例外。 我引用了所有其他SO论坛,给出的解决方案是在相应的服务器中添加公钥。我做到了这一点,并且能够使用SSH命令成功地进行身份验证(如下所述)。但我无法使用JSCH实现同样的效果。请帮忙