私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
著者 Lewei コミュニティ (forum.lwops.cn) Xu Yuan
最新の分散システムを構築する場合、データ送信のセキュリティを確保することが重要です。 Apache Kafka と Zookeeper は、一般的な分散メッセージ キューおよび調整サービスとして、データ送信時のセキュリティを強化する SSL (Secure Sockets Layer) 認証メカニズムを提供します。
この記事では、SSL 証明書の生成から、送信中にデータが完全に保護されるようにサーバーとクライアントを構成するまでのプロセス全体を詳しく紹介します。
1. Kafka アカウントのパスワードを構成します。
1. まず、kafka 設定ファイルを変更する必要があります: vim /asop/kafka/kafka_2.11-2.1.0/config/server.properties
ブローカーID=0
リスナー=SASL_PLAINTEXT://:9092
アドバタイズされたリスナー = SASL_PLAINTEXT://10.176.31.137:9092
ネットワークスレッド数=3
スレッド数=8
ソケット送信バッファバイト数=102400
ソケット受信バッファバイト数=102400
ソケットリクエスト最大バイト数=104857600
log.dirs=/asop/kafka/logs
パーティション数=1
データディレクトリあたりの回復スレッド数=1
オフセット.トピック.レプリケーション.係数=1
トランザクション状態ログレプリケーション係数=1
トランザクション状態ログ最小isr=1
ログ保持時間=168
ログセグメントバイト=1073741824
ログ保持チェック間隔 ms=300000
動物園の飼育係.connect=localhost:2181
動物園の飼育係の接続タイムアウト ms=6000
グループ初期再バランス遅延ms=0
#使用される認証プロトコル
セキュリティ インター ブローカー プロトコル = SASL_PLAINTEXT
#SASLメカニズム
sasl.enabled.mechanisms=プレーン
sasl.mechanism.inter.broker.protocol=PLAIN
#認証を完了するためのクラス
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#ACL (アクセス制御リスト) 設定が見つからない場合は、あらゆる操作が許可されます。
ACL が見つからない場合は誰でも許可する = false
#スーパー管理者の設定を有効にし、訪問者ユーザーをスーパー管理者として設定する必要があります。
super.users=ユーザー:訪問者
2. 次に、サーバーのログイン検証ファイルを作成します。ファイルの内容は、vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf など、好みに応じて付けることができます。続く
Kafkaサーバー{
org.apache.kafka.common.security.plain.PlainLoginModule が必要です
ユーザー名=“訪問者”
パスワード=“qaz@123”
ユーザー訪問者=“qaz@123”;
};
3. 次に、kafka インストール ディレクトリ vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh を変更し、ファイルの先頭に変数を追加します。
エクスポート KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
4. 次に、コンシューマとプロデューサのログイン検証ファイルを作成します。ファイルには、kafka_client_jaas.conf などの名前を付けることができます。ファイルの内容は次のとおりです (スプリングブート アクセスなどのプログラム アクセスの場合)。 、設定する必要はありません)
vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf
Kafkaクライアント{
org.apache.kafka.common.security.plain.PlainLoginModule が必要です
ユーザー名=“訪問者”
パスワード=“qaz@123”;
};
5. 次の設定をconsumer.propertiesとproduction.propertiesにそれぞれ追加します。
vim /asop/kafka/kafka_2.11-2.1.0/config/consumer.properties
vim /asop/kafka/kafka_2.11-2.1.0/config/producer.properties
セキュリティプロトコル=SASL_PLAINTEXT
sasl.mechanism=プレーン
6. Kafka インストール ディレクトリ bin/kafka-console-Producer.sh および bin/kafka-console-consumer.sh を変更し、ファイルの先頭に変数を追加します。
vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-producer.sh
vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-consumer.sh
エクスポート KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf"
7. Zookeeper と Kafka をそれぞれ起動します。この時点で、サーバー側の Kafka ユーザー ログイン検証構成が完了します (最初に Kafka を閉じ、次に Zookeeper を閉じます)。
サービスkafkaをシャットダウンする
/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-stop.sh -daemon /asop/kafka/kafka_2.11-2.1.0/config/server.properties
サービスkafkaの開始
#/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh -daemon /asop/kafka/kafka_2.11-2.1.0/config/server.properties
サービス Zookeeper-3.4.13 をシャットダウンします。
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh を停止 /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
サービス Zookeeper-3.4.13 を開始します。
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh を起動します /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
8. テーマの作成と表示
/asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-producer.sh --broker-list 10.176.31.137:9092 --topic cmdb --producer-property security.protocol=SASL_PLAINTEXT --producer-property sasl.mechanism=PLAIN
メッセージを受信する
/asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-consumer.sh --bootstrap-server 10.176.31.137:9092 --topic cmdb --from-beginning --consumer-property security.protocol=SASL_PLAINTEXT --consumer-property sasl.mechanism=PLAIN
2. zk および kafka の ssal アカウントのパスワードを構成します。
サーバー{
org.apache.kafka.common.security.plain.PlainLoginModule が必要です
ユーザー名=“admin”
パスワード=“admin@12”
ユーザーkafka = “kafka@123”;
};
Server.username、Server.password为 Zookeeper 内部通信的用户名和密码,因此保证每个 zk 节点该属性一致即可
Server.user_xxx 中 xxx 为自定义用户名,用于 zkClient 连接所使用的用户名和密码,即为 kafka 创建的用户名
1.2 /asop/zk/zookeeper-3.4.13/conf/zoo.cfg ファイルを構成する
authProvider.1=org.apache.zookeeper.server.auth.SASL認証プロバイダー
要求クライアント認証スキーム=sasl
jaasログイン更新=3600000
zookeeper.sasl.client=true
Zookeeper.sasl.client が true に設定されていると、zoo_jaas.conf で設定されたユーザー名は機能しませんが、警告が表示されます。
1.3 依存関係パッケージをインポートする
使用される権限検証クラスは org.apache.kafka.common.security.plain.PlainLoginModule であるため、kafka 関連の jar パッケージが必要です。 次のように新しいフォルダー zk_sasl_lib を作成します。 次の jar パッケージを kafka/lib ディレクトリからコピーします。 Zookeeper lib と新しく作成された zk_sasl_lib ディレクトリ:
kafka-クライアント-2.4.1.jar
lz4-java-1.6.0.jar
slf4j-api-1.7.28.jar
slf4j-log4j12-1.7.28.jar
スナップイン-java-1.1.7.3.jar
/asop/zk/zookeeper-3.4.13/zk_sasl_lib ディレクトリに移動します。
cp /asop/kafka/kafka_2.11-2.1.0/libs/kafka-clients-2.1.0.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/lz4-java-1.5.0.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/slf4j-api-1.7.25.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/slf4j-log4j12-1.7.25.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/snappy-java-1.1.7.2.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/kafka-clients-2.1.0.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/lz4-java-1.5.0.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/slf4j-api-1.7.25.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/slf4j-log4j12-1.7.25.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/snappy-java-1.1.7.2.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
chmod 755 -R /asop/zk/zookeeper-3.4.13/zk_sasl_lib/
chmod 755 -R /asop/zk/zookeeper-3.4.13/zk_sasl_lib/
1.4 zkEnv.sh ファイルを変更する/asop/zk/zookeeper-3.4.13/bin/zkEnv.sh
変更前:ない場合は直接追加
エクスポート SERVER_JVMFLAGS=“-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS”
変更後:
/asop/zk/zookeeper-3.4.13/zk_sasl_lib/*.jar 内の jar の場合;
する
クラスパス=“ 瓶:瓶:じゃr:クラスパス”
終わり
エクスポート SERVER_JVMFLAGS=" -Djava.security.auth.login.config=/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf "
Zookeeper サービスを再起動するだけです
サービス Zookeeper-3.4.13 をシャットダウンします。
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh を停止 /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
サービス Zookeeper-3.4.13 を開始します。
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh を起動します /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Kafkaサーバー{
org.apache.kafka.common.security.plain.PlainLoginModule が必要です
ユーザー名=“訪問者”
パスワード=“qaz@123”
ユーザー訪問者=“qaz@123”;
};
クライアント{
org.apache.kafka.common.security.plain.PlainLoginModule が必要です
ユーザー名=“kafka”
パスワード=“kafka@123”;
};
KafkaServer.username、KafkaServer.password 为 broker 内部通信的用户名密码,同上
KafkaServer.user_xxx (xxx は KafkaServer.username で構成されたユーザー名と一致している必要があり、パスワードも一致している必要があります)
KafkaServer.user_production と KafkaServer.user_consumer は、後続の ACL を準備します。これにより、コンシューマーとプロデューサーは異なるアカウントを使用し、コンシューマー アカウントはデータの消費のみが可能で、プロデューサー アカウントはデータの生成のみが可能になります。
Client.username と Client.password には、Zookeeper に登録されているアカウントのパスワードを入力します。これは、ブローカーと Zookeeper 間の通信に使用されます (Zookeeper が SASL で構成されていない場合は無視できます。Zookeeper.sasl.client が false の場合は、無視できます)ログは次のとおりです)。
[2021-06-29 17:14:30,204] 警告 SASL 構成に失敗しました: javax.security.auth.login.LoginException: 指定された JAAS 構成ファイル '/Users/wjun/env/kafka/config/kafka_server_jaas.conf' に 'Client' という名前の JAAS 構成セクションが見つかりませんでした。Zookeeper サーバーが許可する場合は、SASL 認証なしで Zookeeper サーバーへの接続を続行します。(org.apache.zookeeper.ClientCnxn)
2.2 server.properties ファイルを変更する
ブローカーID=0
リスナー=SASL_PLAINTEXT://:9092
アドバタイズされたリスナー = SASL_PLAINTEXT://192.168.157.198:9092
ネットワークスレッド数=3
スレッド数=8
ソケット送信バッファバイト数=102400
ソケット受信バッファバイト数=102400
ソケットリクエスト最大バイト数=104857600
log.dirs=/asop/kafka/logs
パーティション数=1
データディレクトリあたりの回復スレッド数=1
オフセット.トピック.レプリケーション.係数=1
トランザクション状態ログレプリケーション係数=1
トランザクション状態ログ最小isr=1
ログ保持時間=168
ログセグメントバイト=1073741824
ログ保持チェック間隔 ms=300000
動物園の飼育係.connect=127.0.0.1:2181
動物園の飼育係の接続タイムアウト ms=6000
グループ初期再バランス遅延ms=0
#使用される認証プロトコル
セキュリティ インター ブローカー プロトコル = SASL_PLAINTEXT
#SASLメカニズム
sasl.enabled.mechanisms=プレーン
sasl.mechanism.inter.broker.protocol=PLAIN
#認証を完了するためのクラス
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#ACL (アクセス制御リスト) 設定が見つからない場合は、あらゆる操作が許可されます。
ACL が見つからない場合は誰でも許可する = false
#スーパー管理者の設定を有効にし、訪問者ユーザーをスーパー管理者として設定する必要があります。
super.users=ユーザー:訪問者
localhost を IP アドレスに変更する必要がある場合
super.users はスーパー ユーザーを構成します。これは後続の ACL 構成の影響を受けません。
2.3 起動スクリプトを変更する
kafka-server-start.sh ファイルを変更して、kafka_server_jaas.conf ファイル/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh にロードします。
修正する前に:
[ “x$KAFKA_HEAP_OPTS” = “x” ] の場合;
エクスポート KAFKA_HEAP_OPTS=“-Xmx1G -Xms1G”
フィ
変更後:
(この行を最初の行に追加します。すでに存在する場合は追加する必要はありません。) export KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11- 2.1.0/config/kafka_server_jaas.conf "
[ “x$KAFKA_HEAP_OPTS” = “x” ] の場合;
エクスポート KAFKA_HEAP_OPTS=“-Xmx1G -Xms1G -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf”
フィ
Zookeeper の ACL ルールを設定する
/asop/zk/zookeeper-3.4.13/bin/zkCli.sh #zk のコマンド ライン モードに入る
addauth ダイジェスト admin:admin@12 #ログイン ユーザーの切り替え (スーパー管理者は zk 設定ファイル/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf にあります)
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa #(ログインできるIPとユーザーアカウントのパスワードを設定します。adminは上記のzk構成ファイルで定義された管理者で、Kafkaユーザーは/asop は /kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf ファイル (クライアントの下) で定義された kafka 接続 zk ユーザーです)
addauth ダイジェスト kafka:kafka@123 #kafka ユーザーに切り替えて、ACL を再度設定します
ACL を設定 / ip:127.0.0.1:cdrwa、auth:kafka:kafka@123:cdrwa
注: ホワイトリスト IP を追加する場合、またはユーザーが元のベースに基づいて追加する必要がある場合は、追加しないと上書きされます。
setAcl / ip:127.0.0.1:cdrwa、auth:kafka:kafka@123:cdrwa、auth:admin:admin@12:cdrwa、ip:1.1.1.1
権限を復元する必要があります。ACL を設定せずに実行してください
setAcl / ワールド:誰でも:cdrwa
Kafkaサービスを再起動するだけです
サービスkafkaをシャットダウンする
#/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-stop.sh -daemon /asop/kafka/kafka_2.11-2.1.0/config/server.properties
サービスkafkaの開始
#/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh -daemon /asop/kafka/kafka_2.11-2.1.0/config/server.properties
この時点で、kafka と Zookeeper の SSL 認証構成が完了します。操作およびメンテナンスのスキルについて詳しく知りたい場合は、Lewei コミュニティに注目してください。操作およびメンテナンスについてさらに質問がある場合は、メッセージを残してください。