Kafka開啟SASL認證 【windowe詳細版】

2022-09-21 18:00:37

一、JAAS設定


Zookeeper設定JAAS

zookeeper環境下新增一個組態檔,如zk_server_jass.conf,內容如下:

Server {
	org.apache.kafka.common.security.plain.PlainLoginModule required
	username="admin"
	password="admin"
	user_admin="admin";
};

其作用是:在改zookeeper節點建立了一個Server節點,其中

  • org.apache.kafka.common.security.plain.PlainLoginModule required 是加密機制為PLAIN的處理類。在kafka-client包下
  • usernamepassword是zookeeper之間通訊的使用者名稱和密碼,
  • user_admin="admin"的結構是user_[username]=[password],定義kafka-broker(zookeeper使用者端)連線到zookeeper時用的使用者名稱和密碼。

注意jaas設定都要以結尾


Kafka-Broker設定JAAS

在kafka-broker環境下新增設定,如kafka_server_jaas.conf,內容如下:

# 用於broker和zookeeper之間的認證,對應zk_server_jass.conf中的【user_admin="admin"】設定
Client {
	org.apache.kafka.common.security.plain.PlainLoginModule required
	username="admin"
	password="admin";
};

# 定義kafka使用者端與broker的認知資訊
KafkaServer {
	org.apache.kafka.common.security.plain.PlainLoginModule required
	username="admin"
	password="admin"
	user_admin="admin"
	user_alice="alice";
};
  • Client:用於broker和zookeeper之間的認證,對應zk_server_jass.conf中的【user_admin="admin"】設定
  • KafkaServer:叢集中,broker之間用節點中的username,password進行通訊
  • KafkaServerkafka使用者端(producer,consumer)連線broker時,用該設定下user_[username]=[password]結構設定的賬號密碼登入

Kafka-Producer設定JAAS

在kafka-broker環境下新增設定,如kafka_producer_jaas.conf,內容如下:

Client {
	org.apache.kafka.common.security.plain.PlainLoginModule required
	username="admin"
	password="admin";
};

Client:使用者端登入伺服器端認證資訊,對應broker設定中user_[username]=[password]定義的設定


Kafka-Consumer設定JAAS

新增kafka_consumer_jaas.conf,設定同producer

從以上設定可以得出結論:

  • username="admin" password="admin"設定格式有兩種場景

1、是用於伺服器端叢集之間的認證資訊,定義在Server節點裡

2、使用者登入伺服器端的認證資訊,定義在Client節點裡

  • user_[username]=[password]設定定義在Server節點裡,用於提供給使用者端登入。

以上關係是:Zookeeper:Kafka-Broker關係裡,Zookeeper是伺服器端,Kafka-Broker是使用者端;Kafka-Broker:Kafka-Producer、Kafka-Consumer關係裡,Kafka-Broker是伺服器端,Kafka-Producer、Kafka-Consumer是使用者端


二、SASL設定


zookeeper的sasl設定

zookeeper.properties組態檔新增:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000

修改zookeeper-server-start.bat,新增一個設定KAFKA_OPTS

SetLocal

set KAFKA_OPTS=-Djava.security.auth.login.config=【zk_server_jass.conf路徑】
......

EndLocal

broker新增sasl設定

server.properties新增設定

listeners=SASL_PLAINTEXT://localhost:9092
#使用的認證協定
security.inter.broker.protocol=SASL_PLAINTEXT
#SASL機制 
sasl.enabled.mechanisms=PLAIN  
sasl.mechanism.inter.broker.protocol=PLAIN   
# 完成身份驗證的類 
#authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer 
# 如果沒有找到ACL(存取控制列表)設定,則允許任何操作。 
allow.everyone.if.no.acl.found=false
#超級管理員許可權使用者
super.users=User:admin
advertised.listeners=SASL_PLAINTEXT://localhost:9092

修改kafka-server-start.bat ,新增一個設定KAFKA_OPTS:

SetLocal

set KAFKA_OPTS=-Djava.security.auth.login.config=【kafka_server_jass.conf路徑】
......

EndLocal

producer的sasl設定

producer.properties新增設定

sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

producer的sasl設定

consumer.properties新增設定

sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

三、啟動命令【範例】

zk:

.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

broker:

.\bin\windows\kafka-server-start.bat .\config\server.properties

zookeeper紀錄檔顯示kafka-broker認證成功資訊

producer:

.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092  --topic testTopic  --producer.config  .\config\producer.properties

consumer:

.\bin\windows\kafka-console-consumer.bat --bootstrap-server  localhost:9092 --topic testTopic --consumer.config .\config\consumer.properties

broker紀錄檔顯示消費者登入資訊