kafka消息加密(SASL/PLAIN)
具體的配置方式官網已經說的很清楚了(盡量去官網看)
官網配置
分為以下幾個步驟
- 1、 在conf檔案目錄下添加檔案kafka_server_jaas.conf(檔案目錄 檔案名随意)内容如下
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_alice="alice-secret";
};
第一行 暫時不清楚幹嘛
第二行 用戶端連接配接的時候 可以使用這個使用者名admin
最後兩行的意思是 使用admin 密碼得是 admin-secret 使用alice 密碼得是alice-secret
至于如何擴充應該知道了
- 2、 修改配置檔案
一般啟動指令後面 會指定配置檔案 一般是server.properties 也可以自定義 我們以它為例
添加如下配置
listeners=SASL_SSL(SASL_PLAINTEXT)://host.name:port
security.inter.broker.protocol=SASL_SSL(SASL_PLAINTEXT)
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
這裡要将原來的 listeners改為上面的樣子同時協定要保持一緻
- 3、 修改啟動檔案
win下和liunix會有些許不同 但是修改的檔案的檔案名都是一樣的kafka-run-class
找到最下方(我的是win)
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %*
rem echo.
rem echo %COMMAND%
rem echo.
%COMMAND%
添加
set KAFKA_SASL_OPTS=-Djava.security.auth.login.config=D:/myprogram/kafka/config/kafka_server_jaas.conf
set後面的名字随便起
然後
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% %KAFKA_SASL_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %*
在原來的COMMAND 裡面把KAFKA_SASL_OPTS這個加進去 加到-cp的前面
上面的三步處理完 你的kafka服務就可以啟動了
Java用戶端配置
這邊要做的就很少了 隻要在配置檔案裡加上如下配置就可以了
spring:
kafka:
bootstrap-servers: 127.0.0.1:9092
consumer:
group-id: tst-1
auto-offset-reset: earliest
properties:
security.protocol: SASL_PLAINTEXT
sasl.mechanism: PLAIN
#sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";
sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="alice-secret";
對上面的配置進行簡單的說明
group-id 這個在啟用機密後 就必須配置了 不然會報錯
@KafkaListener annotation; a group.id is required when group management is used.
這個我覺得應該是伺服器要識别這個消費者吧 用id辨別
security.protocol: SASL_PLAINTEXT
sasl.mechanism: PLAIN
上面的這兩個要和伺服器端使用的保持一緻
最後的這個配置 sasl.jaas.config 後面的值一定要用分号結尾 另外這個值也可以儲存到檔案中 kafka.client.conf
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/etc/security/keytabs/kafka_client.keytab"
principal="[email protected]";
};
然後在使用jvm參數
-Djava.security.auth.login.config=…/kafka.client.conf也是可以的
另外還有一條
同一個使用者名和密碼 可以在多個java用戶端使用