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