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 のメタデータ情報に問題があると考えられます。公式 Web サイトの説明を参照してください。
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 ブローカー構成リファレンス
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";
セキュリティ機能の説明:
- Kafka の SASL/SCRAM のデフォルト実装では、SCRAM 資格情報が Zookeeper に保存されます。これは、Zookeeper が安全でプライベート ネットワーク上にあるインストールでの実稼働使用に適しています。
\- Kafka は、最小反復回数が 4096 の強力なハッシュ関数 SHA-256 および SHA-512 のみをサポートします。強力なパスワードと高い反復回数と組み合わせられた強力なハッシュ関数は、Zookeeper のセキュリティが侵害された場合のブルート フォース攻撃から保護します。
\- SCRAM 交換の傍受を防ぐために、SCRAM は TLS 暗号化とのみ使用する必要があります。これにより、辞書攻撃やブルート フォース攻撃、および Zookeeper が侵害された場合のなりすましから保護されます。
\- Kafka バージョン 2.0 以降では、Zookeeper が安全でないインストール環境で sasl.server.callback.handler.class を構成することにより、カスタム コールバック ハンドラーを使用してデフォルトの SASL/SCRAM 資格情報ストアをオーバーライドできます。