Kafka 클러스터 시작 오류: SASL 메커니즘의 잘못된 자격 증명으로 인해 인증에 실패했습니다.

1. 문제 설명

여기에 이미지 설명을 삽입하세요

일선 피드백에서 한 번은 kafka 배포 프로세스에서 오류가 시작되었습니다. ERROR [Controller id=2, targetBrokerId=2] 노드 2(5-hb-217-BClinux/172.18.1.217:8074)에 대한 연결이 다음으로 인해 인증에 실패했습니다. : 다음과 같이 SASL 메커니즘 SCRAM-SHA-512(org.apache.kafka.clients.NetworkClient)의 잘못된 자격 증명으로 인해 인증 중에 인증이 실패했습니다.

여기에 이미지 설명을 삽입하세요
라이브 환경: 독립 사육사 3.8.2, kafka: 2.13-3.5.1

리소스 링크: SASL/SCRAM을 사용한 인증 , ZooKeeper 인증 , ZooKeeper 지원 중단

2. 분석 및 디버깅

1) 오류 보고서를 보면 브로커가 신원 확인에 실패했음을 명확하게 나타내는 것을 볼 수 있으며 가능한 이유는 다음과 같습니다.

1. 계정 비밀번호가 잘못되어 현장 상담 후 배제해야 합니다
2. Zookeeper에 해당하는 계정 정보가 없으며 요청 시 브로커가 Zookeeper 엔드포인트에 올바르게 연결할 수 없어 인증 실패 및 연결 실패가 발생합니다.
3. Kafka 인증 메커니즘: SCRAM-SHA-512 지원 문제
4. Kafka 컨트롤러 및 브로커 인스턴스 모니터링 구성 문제, 분리되지 않음
여기에 이미지 설명을 삽입하세요
성공적인 시작은 다음과 같습니다.
여기에 이미지 설명을 삽입하세요

2) Kafka 구성 파일을 확인하고 다음과 같이 수정합니다.

############################# Group Coordinator Settings #############################

# The following configuration specifies the time, in milliseconds, that the GroupCoordinator will delay the initial consumer rebalance.
# The rebalance will be further delayed by the value of group.initial.rebalance.delay.ms as new members join the group, up to a maximum of max.poll.interval.ms.
# The default value for this is 3 seconds.
# We override this to 0 here as it makes for a better out-of-the-box experience for development and testing.
# However, in production environments the default value of 3 seconds is more suitable as this will help to avoid unnecessary, and potentially expensive, rebalances during application startup.
group.initial.rebalance.delay.ms=0
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
sasl.enabled.mechanisms=SCRAM-SHA-512
# 配置ACL入口类
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
# 设置本例中admin为超级用户
super.users=User:admin
listener.name.sasl.scram-sha-512.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="123456"
listener.security.protocol.map=INTERNAL:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT,CONTROLLER:SASL_PLAINTEXT
listeners=INTERNAL://172.18.1.217:8073,EXTERNAL://172.31.77.237:8072,CONTROLLER://172.18.1.217:8074
inter.broker.listener.name=INTERNAL
control.plane.listener.name = CONTROLLER

수정 후 Kafka를 다시 시작해도 뚜렷한 개선이 보고되지 않았습니다.

3) zk의 메타데이터 정보에 문제가 있는 것으로 의심됩니다. 공식 웹사이트 설명을 참조하세요.

Kafka의 SCRAM(Salted Challenge Response Authentication Mechanism) 구현에서는 Zookeeper를 자격 증명 저장소 로 사용합니다 . kafka-configs.sh 를 사용하여 Zookeeper에서 자격 증명을 생성할 수 있습니다 . 활성화된 각 SCRAM 메커니즘에 대해 메커니즘 이름이 포함된 구성을 추가하여 자격 증명을 생성 해야 합니다 . Kafka 브로커가 시작되기 전에 브로커 간 통신을 위한 자격 증명을 생성해야 합니다. 클라이언트 자격 증명은 동적으로 생성 및 업데이트될 수 있으며 업데이트된 자격 증명은 새 연결을 인증하는 데 사용됩니다.

즉, 먼저 kafka-configs.sh 스크립트를 사용하여 SCRAM 구성 정보를 추가하고 다음을 실행해야 합니다.

bin/kafka-configs.sh --zookeeper localhost:2182 --zk-tls-config-file zk_tls_config.properties --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=123456t],SCRAM-SHA-512=[password=123456]' --entity-type users --entity-name admin
#验证
bin/kafka-configs.sh --zookeeper localhost:2182 --zk-tls-config-file /data1/zookeeper/conf/zoo.cfg --describe --entity-type users --entity-name admin
#删除
bin/kafka-configs.sh --zookeeper localhost:2182 --zk-tls-config-file zk_tls_config.properties --alter --delete-config 'SCRAM-SHA-512' --entity-type users --entity-name bclinux

완료 후 다시 시작하고 다음을 실행합니다. /data1/kafka/bin/kafka-server-start.sh -daemon /data1/kafka/config/server.properties. kafka는 여전히 일부 오류 정보를 보고하지만 kafka 서버는 다음을 수행할 수 있습니다. 정상적으로 시작합니다.

여기에 이미지 설명을 삽입하세요

3. 부록: 기타 SASL 구성

1) Kafka Brokers 구성 참조

KafkaServer {
    
    
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username="admin"   #kafka启动后初始化连接会创建这2个属性用于内部broker之间通信
    password="admin-secret";  
};

#编辑 kafka-run-class.sh 将jaas文件加入kafka启动项
vim ./bin/kafka-run-class.sh   #找到JVM任何一个选项参数加入以下配置,比如 KAFKA_OPTS=""

KAFKA_OPTS="-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"

#修改kafka server.properties
vim server.properties  #参考如下
listeners=SASL_SSL://host.name:port
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 (or SCRAM-SHA-512)
sasl.enabled.mechanisms=SCRAM-SHA-256 (or SCRAM-SHA-512)
#kafka client配置
vim producer.properties //同样适用于consumer.properties,参考如下
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-256 (or SCRAM-SHA-512)
#kafka client jaas文件配置
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="alice" \   #producer用该用户连接broker
password="alice-secret";

보안 기능 설명:

  1. Kafka의 SASL/SCRAM 기본 구현은 Zookeeper에 SCRAM 자격 증명을 저장합니다. 이는 Zookeeper가 안전하고 개인 네트워크에 설치되어 있는 프로덕션 환경에 적합합니다.
    \
  2. Kafka는 최소 반복 횟수가 4096인 강력한 해시 기능 SHA-256 및 SHA-512만 지원합니다. 강력한 암호 및 높은 반복 횟수와 결합된 강력한 해시 기능은 Zookeeper 보안이 손상된 경우 무차별 대입 공격으로부터 보호합니다.
    \
  3. SCRAM은 SCRAM 교환을 가로채는 것을 방지하기 위해 TLS 암호화와 함께 사용해야 합니다. 이는 사전 또는 무차별 대입 공격으로부터 보호하고 Zookeeper가 손상된 경우 가장을 방지합니다.
    \
  4. Kafka 버전 2.0부터는 Zookeeper가 안전하지 않은 설치에서 sasl.server.callback.handler.class를 구성하여 사용자 정의 콜백 핸들러를 사용하여 기본 SASL/SCRAM 자격 증명 저장소를 재정의할 수 있습니다.

추천

출처blog.csdn.net/ximenjianxue/article/details/132643474