kafka SASL/PLAIN 身份驗證

小吉猫發表於2024-12-01

kafka 認證機制

使用 SSL 或 SASL 對來自客戶端(生產者和使用者)、其他代理和工具的代理連線進行身份驗證。Kafka 支援以下 SASL 機制:
  SASL/GSSAPI (Kerberos) - 從版本 0.9.0.0 開始
  SASL/PLAIN - 從版本 0.10.0.0 開始
  SASL/SCRAM-SHA-256 和 SASL/SCRAM-SHA-512 - 從版本 0.10.2.0 開始
  SASL/OAUTHBEARER - 從版本 2.0 開始

kafka 偵聽器

kafka 偵聽器型別

PLAINTEXT:用於不加密的普通通訊。 listeners=PLAINTEXT://:9092
SSL:用於加密通訊,確保資料傳輸的安全性。 listeners=SSL://:9093
SASL_PLAINTEXT:在不加密的基礎上,新增身份驗證機制。listeners=SASL_PLAINTEXT://:9094
SASL_SSL:結合加密和身份驗證,確保通訊的機密性和完整性。listeners=SASL_SSL://:9095
CONTROLLER:用於 Kafka 叢集控制器進行內部通訊,管理 Broker 狀態。listeners=CONTROLLER://:9096
EXTERNAL:專為外部客戶端訪問設計,通常用於跨網路的通訊。listeners=EXTERNAL://:9097

kafka 偵聽器配置

Kafka 伺服器支援監聽多個埠上的連線。這可以透過listeners伺服器配置中的屬性進行配置,該屬性接受要啟用的偵聽器的逗號分隔列表。每個伺服器上必須定義至少一個偵聽器。
  {LISTENER_NAME}://{hostname}:{port}
  listeners=CLIENT://localhost:9092
每個偵聽器的安全協議在單獨的配置中定義: listener.security.protocol.map。該值是每個偵聽器對映到其安全協議的逗號分隔列表。
  listener.security.protocol.map=CLIENT:SSL,BROKER:PLAINTEXT

使用 SASL/PLAIN 進行身份驗證

SASL/PLAIN 是一種簡單的使用者名稱/密碼身份驗證機制,通常與 TLS 一起用於加密以實現安全身份驗證。Kafka 支援 SASL/PLAIN 的預設實現。

建立kafka_server_jaas.conf檔案

cat >> config/kafka_server_jaas.conf <<EOF
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret"
    user_alice="alice-secret"
    user_producer="producer-secret"
    user_consumer="consumer-secret";

};
EOF

更新 bin/kafka-server-start.sh

exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=/data/kafka/kafka/config/kafka_server_jaas.conf kafka.Kafka "$@"

更新配置檔案 config/kraft/server.properties

listeners=PLAINTEXT://:9092,CONTROLLER://:9093,SASL_PLAINTEXT://:9094
advertised.listeners=PLAINTEXT://192.168.174.108:9092,SASL_PLAINTEXT://192.168.174.108:9094
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

驗證認證配置資訊

9092 埠

# bin/kafka-topics.sh --list --bootstrap-server 192.168.174.108:9092
wgs-test-event

9094 埠

# bin/kafka-topics.sh --list --bootstrap-server 192.168.174.108:9094
Error while executing topic command : Timed out waiting for a node assignment. Call: listTopics
[2024-12-01 12:03:37,085] ERROR org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: listTopics
 (org.apache.kafka.tools.TopicCommand)
Dec 01 12:03:13 node01 kafka-server-start.sh[10720]: [2024-12-01 12:03:13,475] INFO [SocketServer listenerType=BROKER, nodeId=1] Failed authentication with /192.168.174.108 (channelId=192.168.174.108:9094-192.168.174.108:50542-11) (Unexpected Kafka request of type METADATA during SASL handshake.) (org.apache.kafka.common.network.Selector)

客戶端認證配置

生成訊息

bin/kafka-console-producer.sh --topic wgs-test-event --bootstrap-server 192.168.174.109:9094 --producer-property security.protocol=SASL_PLAINTEXT  --producer-property sasl.mechanism=PLAIN --producer-property 'sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="producer" password="producer-secret";'

消費訊息

bin/kafka-console-consumer.sh --topic wgs-test-event --from-beginning --bootstrap-server 192.168.174.109:9094 --consumer-property "security.protocol=SASL_PLAINTEXT" --consumer-property "sasl.mechanism=PLAIN" --consumer-property 'sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="consumer" password="consumer-secret";'

檢視 topic

建立配置檔案

cat >> config/jaas.conf <<EOF
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="alice-secret";
EOF

檢視 topic

bin/kafka-topics.sh --list --bootstrap-server 192.168.174.108:9094 --command-config config/jaas.conf
__consumer_offsets
wgs-test-event
wgs2-test-event

刪除 topic

bin/kafka-topics.sh --delete --topic wgs2-tst-event --bootstrap-server 192.168.174.108:9094 --command-config config/jaas.conf

建立 topic

bin/kafka-topics.sh --create --topic test-event --bootstrap-server 192.168.174.108:9094 --partitions 3 --replication-factor 2  --command-config config/jaas.conf

檢視 topic 詳細資訊

bin/kafka-topics.sh --describe --topic test-event --bootstrap-server 192.168.174.108:9094   --command-config config/jaas.conf 
Topic: test-event	TopicId: nSU3EOklQM2zGyX6oiZO7Q	PartitionCount: 3	ReplicationFactor: 2	Configs: segment.bytes=1073741824
	Topic: test-event	Partition: 0	Leader: 3	Replicas: 3,1	Isr: 3,1	Elr: 	LastKnownElr: 
	Topic: test-event	Partition: 1	Leader: 1	Replicas: 1,2	Isr: 1,2	Elr: 	LastKnownElr: 
	Topic: test-event	Partition: 2	Leader: 2	Replicas: 2,3	Isr: 2,3	Elr: 	LastKnownElr: 

參考文件

https://kafka.apache.org/documentation/#security_sasl

相關文章