左神算法與數(shù)據(jù)結(jié)構(gòu)全階班-秋風(fēng)起兮白云飛
Kafka認(rèn)證3:添加Kerberos認(rèn)證詳細(xì)過程
sasl.kerberos.service.name配置的含義
左神算法與數(shù)據(jù)結(jié)構(gòu)全階班
download:https://www.51xuebc.com/thread-392-1-1.html
Kafka的Kerberos部署的核心是Kafka服務(wù)器的主要配置。其主要部分必須在屬性文件的sasl.kerberos.service.name屬性中配置,而主機(jī)名部分必須確保/etc/hosts文件中存在Kafka IP的域名。
對于Kafka客戶端來說,它們之和就是三個拼接的目標(biāo)服務(wù)的本金:sasl . Kerberos . service . name/Kafka IP的值或者是Kafka IP對應(yīng)的主機(jī)名@Realm,必須在KDC數(shù)據(jù)庫中保證。
找了半天,沒看到這個配置項的說明。經(jīng)過反復(fù)操作,我終于明白了這個屬性的含義。
例如,請求目標(biāo)Kafka IP是192.168.xx.1當(dāng)Kafka客戶端啟動Kerberos身份驗證時,它會向KDC發(fā)送一個AS_REQ。目標(biāo)服務(wù)的主體的計算過程如下:
1)如果/etc/hosts文件中存在目標(biāo)主機(jī)的域名,則請求服務(wù)的主體是
Sasl.kerberos.service.name/主機(jī)名@Realm。
2)如果/etc/hosts文件中不存在目標(biāo)主機(jī)的域名,則請求服務(wù)的主體是
Sasl.kerberos.service.name/目標(biāo)IP@Realm。
從KDC的日志中可以看到這個結(jié)果:
比如在我的請求過程中,目標(biāo)Kafka IP的域名是oracle,也就是這里的Kerberos票證認(rèn)證過程。
總之,對于客戶端和服務(wù)器來說,這兩種配置的含義是:
1.Kafka客戶端最重要的sasl . Kerberos . service . name+目標(biāo)IP的域名必須存在于KDC認(rèn)證數(shù)據(jù)庫中。
2.KafkaServer sasl . Kerberos . service . name+本地域名,必須是jaas.config文件中Kafka server主體的值。
主機(jī)域名準(zhǔn)備
Kerberos的主要組成規(guī)則是:
作為服務(wù)器,一般需要配置域名。最好是客戶端和服務(wù)器都配置服務(wù)器IP的域名,而且必須統(tǒng)一才能保證正確的Kerberos認(rèn)證過程。否則,在Kerberos數(shù)據(jù)庫中就很容易出現(xiàn)找不到的問題。
對于Kafka集群,集群主機(jī)的主體用戶名相同,但主機(jī)域名不同??蛻舳司S護(hù)集群節(jié)點(diǎn)的域名,sasl.kerberos.service.name的配置是每個節(jié)點(diǎn)的用戶名。
在設(shè)置Kafka Kerberos身份驗證環(huán)境之前,必須在客戶端和服務(wù)器的/etc/hosts文件中配置Kafka服務(wù)器IP的域名。很多在線建設(shè)教程都是由Kafka客戶端和Kafka服務(wù)托管的,不會出現(xiàn)域名配置的問題。
在kafka的客戶端主機(jī)上部署Kafka的副本,以啟動消費(fèi)者應(yīng)用程序;服務(wù)器正常部署kafka,在Kafka的home目錄下創(chuàng)建一個kerberos文件夾,放Kerberos認(rèn)證相關(guān)的配置文件。
KDC注冊的客戶端和服務(wù)器
步驟零,復(fù)制krb5.conf
將KDC認(rèn)證中心的krb5.conf文件復(fù)制到所有Kerberos客戶端。客戶端最重要的系統(tǒng)環(huán)境變量是krb5.conf文件的路徑。因此,每個KDC客戶端都需要維護(hù)與KDC服務(wù)器一致的krb5.conf文件。復(fù)制命令是:
scp/etc/krb5 . conf root @ 192 . 168 . 10 . 101:/opt/Kafka-1 . 0 . 2/Kerberos/krb5 . conf
scp/etc/krb5 . conf root @ 192 . 168 . 10 . 102:/opt/Kafka-1 . 0 . 2/Kerberos/krb5 . conf
復(fù)制代碼
Java API添加Kerberos身份驗證的代碼是:
system . set property(" Java . security . krb5 . conf ",krb 5 conf);
復(fù)制代碼
第一步是注冊Kerberos帳戶。
你需要在Kerberos數(shù)據(jù)庫中注冊Kafka的客戶端和服務(wù)器,并在默認(rèn)域名MY_KDC中注冊。通訊器顯示剛才表中的校長。
在Kerberos服務(wù)器上,執(zhí)行kadmin.local命令并輸入以下操作來注冊帳戶:
你好-卡夫卡-客戶
addprinc hello-Kafka-server/Oracle
復(fù)制代碼
運(yùn)行結(jié)果如下:
第二步是生成帳戶的keytab文件。對于上面添加的兩個Kerberos帳戶,導(dǎo)出keytab文件:
kadmin . local-q " xst-norandkey-k/root/hello-Kafka-client . keytab hello-Kafka-client @ MY _ KDC。COM "
kadmin . local-q " xst-norandkey-k/root/hello-Kafka-server . keytab hello-Kafka-server/Oracle @ MY _ KDC。COM "
復(fù)制代碼
使用控制臺命令kadmin.local導(dǎo)出keytab文件和客戶端keytab:
服務(wù)器密鑰表如下:
步驟3:傳輸keytab文件。將賬號的keytab文件遠(yuǎn)程傳輸?shù)終afka客戶端和服務(wù)器,也就是之前的101和102主機(jī)。
scp/root/hello-Kafka-client . keytab root @ 192 . 168 . 10 . 101:/opt/Kafka-1 . 0 . 2/Kerberos/hello-Kafka-client . keytab
scp/root/hello-Kafka-server . keytab root @ 192 . 168 . 10 . 102:/opt/Kafka-1 . 0 . 2/Kerberos/hello-Kafka-server . keytab
復(fù)制代碼
Kafka服務(wù)器部署Kerberos
第一步是準(zhǔn)備server-kerberos.properties文件。復(fù)制Kafka config目錄下的server.properties文件,命名為kerberos-server.properties,編輯認(rèn)證配置相關(guān)內(nèi)容:
listeners = SASL _明文://192.168.10.102:9092
advertised . listeners = SASL _明文://192.168.10.102:9092
security . inter . broker . protocol = SASL _明文
sasl . mechanism . inter . broker . protocol = GSSAPI
sasl.enabled.mechanisms=GSSAPI
sasl . Kerberos . service . name = hello-Kafka-server
復(fù)制代碼
主要是上面的配置,sasl . Kerberos . service . name = hello-Kafka-server是當(dāng)前Kafka的keytab文件中Principal的用戶名部分。
其次,準(zhǔn)備server-jaas.conf配置文件。在kerberos目錄中,創(chuàng)建文件kafka-server-jaas.conf,并對其進(jìn)行如下編輯:
KafkaServer {
需要com . sun . security . auth . module . krb 5 log in module
useKeyTab=true
//不同的主機(jī)需要修改成不同的keytab文件。
keyTab = "/opt/Kafka-1 . 0 . 2/Kerberos/hello-Kafka-server . keyTab "
storeKey=true
useTicketCache=false
//KDC Kafka服務(wù)器的完整用戶名
principal= "你好-卡夫卡-服務(wù)器/oracle@MY_KDC。COM”;
};
復(fù)制代碼
第三步:準(zhǔn)備kafka-server-kerberos-start.sh文件,添加kerberos認(rèn)證配置。復(fù)制腳本bin/kafka-server-start.sh,命名為kafka-server-kerberos-start.sh,編輯最后一行,在最后一行代碼之前,添加Krb5環(huán)境變量和jaas.conf配置信息:
導(dǎo)出KAFKA _ OPTS = "-dzookeeper . sasl . client = false-dzookeeper . sasl . client . username = ZK-server
-DJ ava . security . krb5 . conf =/opt/Kafka-1 . 0 . 2/Kerberos/krb5 . conf
-DJ ava . security . auth . log in . config =/opt/Kafka-1 . 0 . 2/Kerberos/Kafka-server-JAAS . conf "
復(fù)制代碼
第四步:啟動Kafka服務(wù)。使用新創(chuàng)建的腳本kafka-server-kerberos-start.sh啟動Kafka,并配置kerberos-server.properties:
bin/Kafka-server-start-Kerberos . sh-daemon Kerberos/Kerberos-server . properties
復(fù)制代碼
Kafka客戶端部署Kerberos
第一步是準(zhǔn)備客戶端kerberos.properties文件。復(fù)制Kafka config目錄下的consumer.properties文件,命名為client-kerberos.properties,編輯認(rèn)證配置相關(guān)內(nèi)容:
bootstrap . servers = 192 . 168 . 10 . 102:9092
group . id = test-consumer-group 001
curity . protocol = SASL _明文
sasl.mechanism=GSSAPI
sasl . Kerberos . service . name = hello-Kafka-server
復(fù)制代碼
步驟2:準(zhǔn)備client-jaas.conf配置文件。在kerberos目錄中,創(chuàng)建文件kafka-client-jaas.conf,并對其進(jìn)行如下編輯:
卡夫卡客戶端{(lán)
需要com . sun . security . auth . module . krb 5 log in module
useKeyTab=true
//不同的主機(jī)需要修改成不同的keytab文件。
keyTab = "/opt/Kafka-1 . 0 . 2/Kerberos/hello-Kafka-client . keyTab "
storeKey=true
useTicketCache=false
//客戶在KDC的賬號
principal= "你好-卡夫卡-client@MY_KDC。COM”;
};
復(fù)制代碼
第三步:準(zhǔn)備kafka-server-kerberos-start.sh文件,添加kerberos認(rèn)證配置。復(fù)制腳本bin/kafka-console-consumer.sh,命名為Kerberos-Kafka-console-consumer . sh,編輯最后一行,在最后一行代碼之前,添加Krb5環(huán)境變量和jaas.conf配置信息:
導(dǎo)出KAFKA _ OPTS = "-DJ ava . security . krb5 . conf =/opt/KAFKA-1 . 0 . 2/Kerberos/krb5 . conf
-DJ ava . security . auth . log in . config =/opt/Kafka-1 . 0 . 2/Kerberos/Kafka-client-JAAS . conf "
復(fù)制代碼
步驟4,使用步驟1的配置文件進(jìn)行認(rèn)證消費(fèi):
bin/Kerberos-Kafka-console-consumer . sh-bootstrap-server 192 . 168 . 10 . 102:9092-topic my-topic-consumer . config = Kerberos/client-Kerberos . properties-from-beging
復(fù)制代碼
KDC日志視圖驗證流程
KDC服務(wù)中心的日志文件為/var/log/krb5kdc.log,每次Kerberos認(rèn)證對應(yīng)兩條日志消息:
如果Kafka服務(wù)啟動或客戶端啟動失敗,您也可以查看日志文件。常見的錯誤是主機(jī)、域名、服務(wù)名的配置不一致,導(dǎo)致Kerberos數(shù)據(jù)庫中找不到Server的異常。
此外,還沒有找到多域問題的解決方案。如果在客戶機(jī)的krb5.conf文件中配置了多個領(lǐng)域,默認(rèn)情況下只能有一個領(lǐng)域。但是對于需要同時訪問多個Kafka和多組認(rèn)證領(lǐng)域的應(yīng)用程序,應(yīng)該如何配置呢?