讓CDH的kafka 支持多種認證機制(PLAIN,SCRAM,KERBEROS)

用Cloudera Manager 安裝 的kafka默認情況下,可以開啟 Kerberos 和Sentry做安全認證和授權(quán)服務(wù)畏吓。
但有時有些特殊需求墨状,不適合在Kerberos中添加用戶,可以通過添加其他認證機制來解決此問題菲饼。
本文講述了 如何讓 Cloudera Manager中的kafka 支持 PLAIN和 SCRAM認證機制
版本:CDH-->5.13, Cloudera Manager-->5.13, kafka-->3.1.0對應(yīng)的社區(qū)版:1.0.1

Step 1:登錄 Cloudera Manager 控制臺肾砂,進入kafka 組件的configuration 中。

Step 2:修改如下選項

Sentry Service:none 說明:關(guān)閉Sentry宏悦,因為SCRAM和PLAIN的授權(quán)操作都是通過kafka-acl來完成的镐确,授權(quán)信息存儲在zookeeper中,而Sentry 是獨立的權(quán)限控制系統(tǒng)饼煞,只能支持Kerberos源葫,不能支持SCRAM和PLAIN。

advertised.host.name:說明:配置每個broker的IP地址或者主機名

advertised.port:9093 說明:此示例中開啟了PLAINTEXT-->9092和SASL_PLAINTEXT-->9093端口

security.inter.broker.protocol:INFERRED 說明:自動推測協(xié)議類型砖瞧,推測結(jié)果為SASL_PLAINTEXT

authenticate.zookeeper.connection:true 連接 zookeeper是 啟用SASL協(xié)議息堂,因為 zookeeper開啟了kerberos認證,因此此處需要勾選块促。

super.users:kafka 啟動kafka服務(wù)的 超級用戶荣堰。默認為kafka用戶

broker_java_opts:尾部增加 -Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf,指定kafka broker啟動是 加載本地jaas文件/etc/kafka/kafka_server_jaas.conf竭翠,后面需要為每個機器設(shè)置kafka_server_jaas.conf文件

Kafka Broker Advanced Configuration Snippet (Safety Valve) for kafka.properties:內(nèi)容如下
[
listeners=PLAINTEXT://0.0.0.0:9092,SASL_PLAINTEXT://0.0.0.0:9093
sasl.enabled.mechanisms=GSSAPI,SCRAM-SHA-256,PLAIN
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
]
另外在每個broker上的此項配置中再增加如下信息
[
advertised.listeners=PLAINTEXT://hostname:9092,SASL_PLAINTEXT://hostname:9093
]

Step 3: 在每個broker主機上持隧,添加/etc/kafka/kafka_server_jaas.conf,內(nèi)容如下:

KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
   username=kafka
   password=thisIsSecret;
org.apache.kafka.common.security.plain.PlainLoginModule required
   username=kafka
   password=thisIsSecret
   user_kafka=thisIsSecret
   user_alice=thisIsSecret;
com.sun.security.auth.module.Krb5LoginModule required
   doNotPrompt=true
   useKeyTab=true
   storeKey=true
   useTicketCache=true
   keyTab="/etc/kafka/kafka.keytab"
   principal="kafka/hostname@example.com";
};
KafkaClient {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   storeKey=true
   useTicketCache=true
   keyTab="/etc/kafka/kafka.keytab"
   principal="kafka/hostname@example.com";
};
Client {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   storeKey=true
   useTicketCache=true
   keyTab="/etc/kafka/kafka.keytab"
   principal="kafka/hostname@example.com";
};

配置項中的principal 改為 實際的kerberos中的principal逃片,及對應(yīng)的keytab文件屡拨。
至此 可以通過PLAIN 和Kerberos 兩種認證機制來訪問kafka只酥。
如果需要使用SCRAM機制,可以通過如下命令添加kafka和alice用戶

/opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=thisIsSecret]' --entity-type users --entity-name kafka
/opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=thisIsSecret]' --entity-type users --entity-name alice

至此可以通過PLAIN,KERBEROS,SCRAM三種認證機制來訪問kafka集群呀狼。

創(chuàng)建topic:

kafka-topics --zookeeper localhost:2181--list 
kafka-topics --create --zookeeper localhost:2181--partitions 30 --replication-factor 1 --topic test

授權(quán):

/opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --operation IdempotentWrite --allow-principal User:* --allow-host=* --cluster
/opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --operation All --allow-principal User:* --allow-host=* --transactional-id=*
/opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --operation All --allow-principal User:* --allow-host=* --cluster
/opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:* --allow-host=* --operation All --group=*  --topic test
/opt/cloudera/parcels/KAFKA-3.0.0-1.3.0.0.p0.40/lib/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:* --allow-host=* --operation All --group=*  --topic __consumer_offsets

客戶端訪問:
在客戶端 創(chuàng)建如下plain_alice_jaas.conf 文件

KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username=alice
password=thisIsSecret;
};

scram_alice_jaas.conf

KafkaClient {
org.apache.kafka.common.security.scram.ScramLoginModule required
username=alice
password=thisIsSecret;
};

啟動PLAIN機制的producer

export KAFKA_OPTS=" -Djava.security.auth.login.config=`pwd`/plain_alice_jaas.conf"
kafka-console-producer --broker-list localhost:9093 --producer-property security.protocol=SASL_PLAINTEXT --producer-property sasl.mechanism=PLAIN --topic test

啟動SCRAM機制的consumer

export KAFKA_OPTS=" -Djava.security.auth.login.config=`pwd`/scram_alice_jaas.conf"
kafka-console-consumer --new-consumer --bootstrap-server localhost:9093 --consumer-property security.protocol=SASL_PLAINTEXT --consumer-property sasl.mechanism=SCRAM-SHA-256 --topic test

Kerberos認知機制如下
krb5_alice_jaas.conf文件

KafkaClient {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   storeKey=true
   useTicketCache=true
   keyTab="/etc/kafka/alice.keytab"
   principal="alice/hostname@example.com";
};
export KAFKA_OPTS=" -Djava.security.auth.login.config=`pwd`/krb5_alice_jaas.conf"
kafka-console-consumer --new-consumer --bootstrap-server localhost:9093 --consumer-property security.protocol=SASL_PLAINTEXT --consumer-property sasl.mechanism=GSSAPI --topic test
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裂允,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哥艇,更是在濱河造成了極大的恐慌绝编,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件貌踏,死亡現(xiàn)場離奇詭異十饥,居然都是意外死亡,警方通過查閱死者的電腦和手機祖乳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門逗堵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人眷昆,你說我怎么就攤上這事蜒秤。” “怎么了亚斋?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵作媚,是天一觀的道長。 經(jīng)常有香客問我帅刊,道長纸泡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任赖瞒,我火速辦了婚禮女揭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冒黑。我一直安慰自己,他們只是感情好勤哗,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布抡爹。 她就那樣靜靜地躺著,像睡著了一般芒划。 火紅的嫁衣襯著肌膚如雪冬竟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天民逼,我揣著相機與錄音泵殴,去河邊找鬼。 笑死拼苍,一個胖子當著我的面吹牛笑诅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼吆你,長吁一口氣:“原來是場噩夢啊……” “哼弦叶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妇多,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤伤哺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后者祖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體立莉,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年七问,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜓耻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡烂瘫,死狀恐怖媒熊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坟比,我是刑警寧澤芦鳍,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站葛账,受9級特大地震影響柠衅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜籍琳,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一菲宴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趋急,春花似錦喝峦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至查近,卻和暖如春眉踱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霜威。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工谈喳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戈泼。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓婿禽,卻偏偏與公主長得像赏僧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谈宛,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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