kafka與zookeeper的SSL認(rèn)證教程

作者樂維社區(qū)(forum.lwops.cn)許遠(yuǎn)

在構(gòu)建現(xiàn)代的分布式系統(tǒng)時,確保數(shù)據(jù)傳輸?shù)陌踩灾陵P(guān)重要氓癌。Apache Kafka和 Zookeeper 作為流行的分布式消息隊(duì)列和協(xié)調(diào)服務(wù)坡慌,提供了SSL(Secure Sockets Layer)認(rèn)證機(jī)制粹懒,以增強(qiáng)數(shù)據(jù)傳輸過程中的安全性涨冀。

本文將詳細(xì)介紹從生成SSL證書到配置服務(wù)端和客戶端的全過程迁客,確保數(shù)據(jù)在傳輸過程中得到充分的保護(hù)担敌。

一摔敛、配置Kafka賬號密碼:

1、首先全封,需要修改kafka配置文件:vim /asop/kafka/kafka_2.11-2.1.0/config/server.properties

broker.id=0

listeners=SASL_PLAINTEXT://:9092

advertised.listeners=SASL_PLAINTEXT://10.176.31.137:9092

num.network.threads=3

num.io.threads=8

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

log.dirs=/asop/kafka/logs

num.partitions=1

num.recovery.threads.per.data.dir=1

offsets.topic.replication.factor=1

transaction.state.log.replication.factor=1

transaction.state.log.min.isr=1

log.retention.hours=168

log.segment.bytes=1073741824

log.retention.check.interval.ms=300000

zookeeper.connect=localhost:2181

zookeeper.connection.timeout.ms=6000

group.initial.rebalance.delay.ms=0

#使用的認(rèn)證協(xié)議

security.inter.broker.protocol=SASL_PLAINTEXT

#SASL機(jī)制

sasl.enabled.mechanisms=PLAIN

sasl.mechanism.inter.broker.protocol=PLAIN

#完成身份驗(yàn)證的類

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

#如果沒有找到ACL(訪問控制列表)配置马昙,則允許任何操作桃犬。

allow.everyone.if.no.acl.found=false

#需要開啟設(shè)置超級管理員,設(shè)置visitor用戶為超級管理員

super.users=User:visitor

2、其次行楞,為server創(chuàng)建登錄驗(yàn)證文件,可以根據(jù)自己愛好命名文件攒暇,如vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf?,文件內(nèi)容如下

KafkaServer {

????org.apache.kafka.common.security.plain.PlainLoginModule required

????????username="visitor"

????????password="qaz@123"

????????user_visitor="qaz@123";

};

3子房、然后修改kafka安裝目錄vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh形用,在文件最上面添加變量


export KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"


4、接下來為consumer和producer創(chuàng)建登錄驗(yàn)證文件证杭,可以根據(jù)愛好命名文件田度,如kafka_client_jaas.conf,文件內(nèi)容如下(如果是程序訪問解愤,如springboot訪問镇饺,可以不配置

vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf


KafkaClient {

org.apache.kafka.common.security.plain.PlainLoginModule required ?

????username="visitor" ?

????password="qaz@123";

};


5、在consumer.properties和producer.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


security.protocol=SASL_PLAINTEXT

sasl.mechanism=PLAIN


[if !supportLists]6送讲、[endif]修改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

export KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf"


[if !supportLists]4、[endif]分別啟動zookeeper和kafka,至此服務(wù)端kafka用戶登錄驗(yàn)證配置完成(先關(guān)閉kafka后關(guān)閉zookeeper)


關(guān)閉服務(wù)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


啟動服務(wù)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

關(guān)閉服務(wù)zookeeper-3.4.13

/asop/zk/zookeeper-3.4.13/bin/zkServer.sh ?stop /asop/zk/zookeeper-3.4.13/conf/zoo.cfg

啟動服務(wù)zookeeper-3.4.13

/asop/zk/zookeeper-3.4.13/bin/zkServer.sh?start ?/asop/zk/zookeeper-3.4.13/conf/zoo.cfg

5哼鬓、創(chuàng)建及查看主題

/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

二监右、zk和kafka配置ssal賬號密碼:

1. Zookeeper 配置 SASL

1.1 新建 zoo_jaas.conf 文件

zoo_jaas.conf 文件名、文件所在路徑?jīng)]有特殊要求异希,一般放置在${ZOOKEEPER_HOME}/conf目錄下vim /asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf

Server {

org.apache.kafka.common.security.plain.PlainLoginModule required

username="admin"

password="admin@12"

user_kafka="kafka@123";

};

Server.username健盒、Server.password為 Zookeeper 內(nèi)部通信的用戶名和密碼,因此保證每個 zk 節(jié)點(diǎn)該屬性一致即可

Server.user_xxx 中 xxx 為自定義用戶名宠互,用于 zkClient 連接所使用的用戶名和密碼味榛,即為 kafka 創(chuàng)建的用戶名

1.2 配置 /asop/zk/zookeeper-3.4.13/conf/zoo.cfg 文件

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider

requireClientAuthScheme=sasl

jaasLoginRenew=3600000

zookeeper.sasl.client=true

zookeeper.sasl.client 設(shè)置為 true,開啟客戶端身份驗(yàn)證予跌,否則zoo_jaas.conf中配置的用戶名將不起作用,客戶端仍然可以無 jaas 文件連接善茎,只是帶有 WARNNING 而已

1.3 導(dǎo)入依賴包

因?yàn)槭褂玫臋?quán)限驗(yàn)證類為:org.apache.kafka.common.security.plain.PlainLoginModule券册,所以需要 kafka 相關(guān) jar 包,新建文件夾 zk_sasl_lib垂涯,如下:從kafka/lib目錄下復(fù)制以下幾個jar包到zookeeper的lib和新建的zk_sasl_lib目錄下:

kafka-clients-2.4.1.jar

lz4-java-1.6.0.jar

slf4j-api-1.7.28.jar

slf4j-log4j12-1.7.28.jar

snappy-java-1.1.7.3.jar

mkdir /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

修改前:如果沒有就直接加

export SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS"

修改后

for jar in /asop/zk/zookeeper-3.4.13/zk_sasl_lib/*.jar;

do

CLASSPATH="$jar:$CLASSPATH"

done

export SERVER_JVMFLAGS=" -Djava.security.auth.login.config=/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf "

重啟Zookeeper 服務(wù)即可

關(guān)閉服務(wù)zookeeper-3.4.13

/asop/zk/zookeeper-3.4.13/bin/zkServer.sh ?stop /asop/zk/zookeeper-3.4.13/conf/zoo.cfg

啟動服務(wù)zookeeper-3.4.13

/asop/zk/zookeeper-3.4.13/bin/zkServer.sh?start ?/asop/zk/zookeeper-3.4.13/conf/zoo.cfg

2. Kakfa 配置 SASL

2.1 新建 kafka_server_jaas.conf 文件

kafka_server_jaas.conf 文件名和存放路徑?jīng)]有要求烁焙,一般放置在${KAFKA_HOME}/config目錄下/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf

KafkaServer {

org.apache.kafka.common.security.plain.PlainLoginModule required

username="visitor"

password="qaz@123"

user_visitor="qaz@123";

};

Client{

org.apache.kafka.common.security.plain.PlainLoginModule required

username="kafka"

password="kafka@123";

};

KafkaServer.username、KafkaServer.password 為 broker 內(nèi)部通信的用戶名密碼耕赘,同上

KafkaServer.user_xxx 其中 xxx 必須和 KafkaServer.username 配置的用戶名一致骄蝇,密碼也一致

KafkaServer.user_producer、KafkaServer.user_consumer 為了之后的 ACL 做準(zhǔn)備操骡,達(dá)到消費(fèi)者生產(chǎn)者使用不同賬號且消費(fèi)者賬號只能消費(fèi)數(shù)據(jù)九火,生產(chǎn)者賬號只能生產(chǎn)數(shù)據(jù)

Client.username赚窃、Client.password 填寫 Zookeeper 中注冊的賬號密碼,用于 broker 與 zk 的通信(若 zk 沒有配置 SASL 可以忽略岔激、若 zookeeper.sasl.client 為 false 也可以忽略只是帶有勒极,日志如下)

[2021-06-29 17:14:30,204] WARN SASL configuration failed: javax.security.auth.login.LoginException: No JAAS configuration section named 'Client' was found in specified JAAS configuration file: '/Users/wjun/env/kafka/config/kafka_server_jaas.conf'. Will continue connection to Zookeeper server without SASL authentication, if Zookeeper server allows it. (org.apache.zookeeper.ClientCnxn)

2.2 修改 server.properties 文件

broker.id=0

listeners=SASL_PLAINTEXT://:9092

advertised.listeners=SASL_PLAINTEXT://192.168.157.198:9092

num.network.threads=3

num.io.threads=8

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

log.dirs=/asop/kafka/logs

num.partitions=1

num.recovery.threads.per.data.dir=1

offsets.topic.replication.factor=1

transaction.state.log.replication.factor=1

transaction.state.log.min.isr=1

log.retention.hours=168

log.segment.bytes=1073741824

log.retention.check.interval.ms=300000

zookeeper.connect=127.0.0.1:2181

zookeeper.connection.timeout.ms=6000

group.initial.rebalance.delay.ms=0


#使用的認(rèn)證協(xié)議

security.inter.broker.protocol=SASL_PLAINTEXT

#SASL機(jī)制

sasl.enabled.mechanisms=PLAIN

sasl.mechanism.inter.broker.protocol=PLAIN

#完成身份驗(yàn)證的類

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

#如果沒有找到ACL(訪問控制列表)配置,則允許任何操作虑鼎。

allow.everyone.if.no.acl.found=false

#需要開啟設(shè)置超級管理員,設(shè)置visitor用戶為超級管理員

super.users=User:visitor

其中l(wèi)ocalhost 需要修改成 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

修改前:

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

fi

修改后:

(先在首行加這一行,如果有了就不用加了)export KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"

fi

設(shè)置zookeeper的ACL規(guī)則

/asop/zk/zookeeper-3.4.13/bin/zkCli.sh ???#進(jìn)入zk的命令行模式

addauth ?digestadmin: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#(設(shè)置可以登陸的IP和用戶賬號密碼炫彩,admin是上面的zk的配置文件里面定義的管理員匾七,Kafka用戶是/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf文件里面的定義的kafka連接zk的用戶 (Client下面的))

addauth ?digestkafka:kafka@123 ??#再切換為kafka用戶再設(shè)置一次acl

setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa

注意:如果要加白名單IP或者用戶要在原來的基礎(chǔ)上加,不然會覆蓋

setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa,auth:admin:admin@12:cdrwa,ip:1.1.1.1

需要恢復(fù)權(quán)限江兢,不設(shè)置acl的話就運(yùn)行

setAcl / world:anyone:cdrwa

重啟kafka 服務(wù)即可

關(guān)閉服務(wù)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

啟動服務(wù)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認(rèn)證,更多運(yùn)維技巧歡迎關(guān)注樂維社區(qū)划址,更多運(yùn)維問題也歡迎留言提問扔嵌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夺颤,隨后出現(xiàn)的幾起案子痢缎,更是在濱河造成了極大的恐慌,老刑警劉巖世澜,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件独旷,死亡現(xiàn)場離奇詭異,居然都是意外死亡寥裂,警方通過查閱死者的電腦和手機(jī)嵌洼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來封恰,“玉大人麻养,你說我怎么就攤上這事∨堤颍” “怎么了鳖昌?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長低飒。 經(jīng)常有香客問我许昨,道長,這世上最難降的妖魔是什么褥赊? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任糕档,我火速辦了婚禮户辞,結(jié)果婚禮上谅海,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好苞轿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布千埃。 她就那樣靜靜地躺著春叫,像睡著了一般亭螟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上榆俺,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天售躁,我揣著相機(jī)與錄音,去河邊找鬼茴晋。 笑死陪捷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诺擅。 我是一名探鬼主播市袖,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烁涌!你這毒婦竟也來了苍碟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤撮执,失蹤者是張志新(化名)和其女友劉穎微峰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抒钱,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜓肆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谋币。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仗扬。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蕾额,靈堂內(nèi)的尸體忽然破棺而出早芭,到底是詐尸還是另有隱情,我是刑警寧澤诅蝶,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布逼友,位于F島的核電站,受9級特大地震影響秤涩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜司抱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一筐眷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧习柠,春花似錦匀谣、人聲如沸照棋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烈炭。三九已至,卻和暖如春宝恶,著一層夾襖步出監(jiān)牢的瞬間符隙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工垫毙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霹疫,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓综芥,卻偏偏與公主長得像丽蝎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子膀藐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容