在AWS MSK中啟用用戶(hù)名密碼認(rèn)證及ACL設(shè)置

1.? ? ?概述

Amazon Managed Streaming for?Apache Kafka?(Amazon MSK)是亞馬遜云推出的一個(gè)完全托管唤蔗、高度可用且安全的Apache Kafka服務(wù)。本文講述了如何在MSK中啟用用戶(hù)名和密碼的方式來(lái)完成認(rèn)證淌喻,同時(shí)也提及了ACL的配置。因?yàn)檫@部分內(nèi)容和自建的Kafka集群有些不同雀摘,所以想通過(guò)本文來(lái)做個(gè)演示裸删。本文步驟基本上按照MSK官方文檔,只是增加了截圖和例子阵赠,方便理解涯塔。

2.? ? ?創(chuàng)建MSK集群

AmazonMSK使用SASL/SCRAM (Simple Authentication andSecurity Layer/ Salted Challenge Response Mechanism)來(lái)完成用戶(hù)名和密碼驗(yàn)證,它的前提是客戶(hù)端和代理之間需要使用TLS加密清蚀。所以在創(chuàng)建MSK集群時(shí)匕荸,需要選擇 客戶(hù)端和代理之間只允許TLS。此選項(xiàng)無(wú)法在創(chuàng)建后修改枷邪,所以如果你選擇了其他選項(xiàng)榛搔,必須要重新創(chuàng)建欣的集群。


在創(chuàng)建過(guò)程中選擇傳輸加密东揣,客戶(hù)端和代理之間 僅允許經(jīng)TLS加密的流量践惑。


身份驗(yàn)證選擇SASL/SCRAM身份驗(yàn)證。



3.? ? ?創(chuàng)建KMSKey

AmazonMSK使用Amazon Secret Manager來(lái)存儲(chǔ)MSK所用的用戶(hù)名和密碼救斑。在設(shè)置Secret Manager之前童本,先要在AmazonKMS(Key Management Service)中創(chuàng)建一個(gè)客戶(hù)托管的Key。KMS是Amazon托管的密鑰管理服務(wù)脸候。

創(chuàng)建過(guò)程采用默認(rèn)選項(xiàng)即可穷娱,如果有特殊權(quán)限要求可以后續(xù)再改绑蔫。起名例如 kafka

4.? ? ?創(chuàng)建SecretsManager密鑰

AmazonSecrets Manager是一項(xiàng)密碼管理服務(wù),可以把敏感的密碼等信息存放其中泵额,無(wú)須在代碼中嵌入配深,只要通過(guò)API調(diào)用就可以取得,避免在代碼中泄露嫁盲。

AmazonMSK通過(guò)Secrets Manager來(lái)存儲(chǔ)用戶(hù)名和密碼篓叶。在創(chuàng)建密碼時(shí),注意密鑰名稱(chēng)必須具有前綴AmazonMSK_羞秤。

在Secrets Manager中選擇 其他類(lèi)型的密碼缸托,將用戶(hù)名和密碼填入,可以通過(guò)JSON格式瘾蛋,也可以通過(guò)Key/Value方式俐镐。加密的密鑰要選擇上面創(chuàng)建的KMS密鑰(非常重要)。

例如:

{

?"username": "alice",

?"password": "alice-secret"

}






5.? ? ?關(guān)聯(lián)密鑰到MSK集群

等MSK集群創(chuàng)建完成后哺哼,就可以把密碼關(guān)聯(lián)到MSK集群了佩抹。



6.? ? ?使用用戶(hù)名和密碼連接到MSK集群

現(xiàn)在就可以來(lái)通過(guò)用戶(hù)名和密碼來(lái)連接MSK集群了。

請(qǐng)按照以下步驟來(lái)完成:

6.1.? ? ? ?運(yùn)行以下命令取董,同時(shí)替換?ClusterArn?為MSK集群的 Amazon 資源名稱(chēng) (ARN):

aws kafka describe-cluster --cluster-arn "ClusterArn"

ClusterArn可以在MSK的集群界面查到:

運(yùn)行命令之后得到該集群的詳細(xì)信息:

從命令的 JSON 結(jié)果中棍苹,保存與名為“ZookeeperConnectString”的字符串關(guān)聯(lián)的值。


6.2.? ?在客戶(hù)端計(jì)算機(jī)上下載相應(yīng)版本的Kafka程序茵汰,具體鏈接可以查看https://kafka.apache.org/downloads枢里。

例如:

wget https://archive.apache.org/dist/kafka/2.6.1/kafka_2.13-2.6.1.tgz

下載完后解壓。


6.3.? ? ? ? 在客戶(hù)端計(jì)算機(jī)上kafka程序的?bin?目錄中運(yùn)行以下命令來(lái)在集群中創(chuàng)建主題经窖,替換?ZookeeperConnectString?為之前記錄的字符串坡垫。如果集群的節(jié)點(diǎn)數(shù)小于3個(gè),replication-factor要設(shè)置小于3.


./kafka-topics.sh --create

--zookeeper ZookeeperConnectString--replication-factor 3 --partitions 1 --topicExampleTopicName



6.4.? ? ? ? 在客戶(hù)端計(jì)算機(jī)上画侣,創(chuàng)建一個(gè) JAAS 配置文件冰悠。例如,對(duì)于用戶(hù)?alice配乱,創(chuàng)建一個(gè)名為?users_jaas.conf?的文件溉卓,該文件包含以下內(nèi)容:

KafkaClient {

??org.apache.kafka.common.security.scram.ScramLoginModule required

?? username="alice"

?? password="alice-secret";

};


6.5.? ? ? ? 將此 JAAS 配置文件設(shè)置為 KAFKA_OPTS 環(huán)境變量:

export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf


6.6.? ? ? ? 將 JDK 密鑰庫(kù)文件從 JVM 復(fù)制到用戶(hù)所需目錄。JDK的目錄根據(jù)安裝版本不同可能不同搬泥。


cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.amzn2.0.1.x86_64/jre/lib/security/cacerts?<path-to-keystore-file>/kafka.client.truststore.jks


6.7.? ? ? ?使用以下內(nèi)容創(chuàng)建名為?client_sasl.properties?的客戶(hù)端屬性文件桑寨。此文件定義 SASL 機(jī)制和協(xié)議,將被用來(lái)訪問(wèn)Kafka集群忿檩。MSK當(dāng)前只支持SCRAM-SHA-512認(rèn)證尉尾。


security.protocol=SASL_SSL

sasl.mechanism=SCRAM-SHA-512

ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks


6.8. 接下來(lái)要取得MSK的代理(Broker)地址,替換?ClusterArn?替換為MSK集群的 Amazon 資源名稱(chēng) (ARN):

aws kafka get-bootstrap-brokers

--cluster-arn ClusterArn


從命令的 JSON 結(jié)果中燥透,保存與名為“BootstrapBrokerStringSaslScram”的字符串關(guān)聯(lián)的值沙咏。


6.9.? ?現(xiàn)在可以通過(guò)Producer在Topic中生產(chǎn)數(shù)據(jù)了辨图。在Kafka客戶(hù)端的?bin?目錄中運(yùn)行以下命令,并將?BootstrapBrokerStringSaslScram?替換為上一個(gè)命令時(shí)獲取的值肢藐。

./kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic

ExampleTopicName --producer.config client_sasl.properties


輸入任意消息:


6.10.? ? ? ? ? ? ? ? 打開(kāi)另一窗口來(lái)通過(guò)Consumer消費(fèi)該Topic中的消息故河,在Kafka客戶(hù)端的?bin?目錄中運(yùn)行以下命令,并將?BootstrapBrokerStringSaslScram?替換為之前獲取的值吆豹。

./kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic

ExampleTopicName --from-beginning --consumer.config client_sasl.properties

可以看到之前鍵入的消息:


7.? ? ?創(chuàng)建更多用戶(hù)

上文演示了單個(gè)用戶(hù)的過(guò)程鱼的,如果需要?jiǎng)?chuàng)建其他用戶(hù),請(qǐng)重復(fù)步驟3-4來(lái)創(chuàng)建Secrets Manager的密鑰痘煤,并關(guān)聯(lián)到MSK集群凑阶。需要注意:

一個(gè)Amazon MSK集群最多可以有1000個(gè)用戶(hù)。

與Amazon MSK集群關(guān)聯(lián)的密鑰的名稱(chēng)必須具有前綴AmazonMSK_速勇。


8.? ? ?設(shè)置ACL

ACL可以用來(lái)控制生產(chǎn)者(Producer)晌砾,消費(fèi)者(Consumer)和管理員(admin)對(duì)于Topic的權(quán)限控制坎拐。

Apache Kafka ACLs的格式為“Principal P is [Allowed/Denied] Operation O From Host Hon any Resource R matching ResourcePattern RP”烦磁。如果RP與特定資源R不匹配,則R沒(méi)有關(guān)聯(lián)的ACLs哼勇,因此不允許除超級(jí)用戶(hù)之外的任何人訪問(wèn)R都伪。

默認(rèn)情況下,AmazonMSK會(huì)將allow.everyone.if.no.acl.found設(shè)置為true积担。這意味著陨晶,如果沒(méi)有顯式設(shè)置ACL,則所有委托人都可以訪問(wèn)此資源帝璧。只有啟用了ACL先誉,才能限制只有授權(quán)的委托人才能訪問(wèn)它。


1.? 首先將MSK的代理添加到ACL表的烁,以允許它們讀取已配置ACL的所有主題褐耳。這可以保證代理(Broker節(jié)點(diǎn))可以正常同步。

替換?ZooKeeper-Connection-String?替換為上文取得的連接字符串渴庆。

替換Distinguished-Name?替換為集群中任一代理的名字铃芦,然后將此第一個(gè)點(diǎn)之前的字符串替換為星號(hào) (*)。


bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String --add

--allow-principal "User:CN=Distinguished-Name"

--operation Read --group=* --topic Topic-Name

?


8.2. 要授予某個(gè)用戶(hù)對(duì)主題的讀訪問(wèn)權(quán)襟雷,請(qǐng)?jiān)诳蛻?hù)端計(jì)算機(jī)上運(yùn)行以下命令刃滓。

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String --add

--allow-principal "User:CN=Distinguished-Name"

--operation Read --group=* --topic Topic-Name

例如


8.3.? ? ? 要授予對(duì)主題的寫(xiě)訪問(wèn)權(quán),請(qǐng)?jiān)诳蛻?hù)端計(jì)算機(jī)上運(yùn)行以下命令

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String--add

--allow-principal "User:CN=Distinguished-Name" --operationWrite --topic Topic-Name

例如

8.4.? ? ? ? 如果使用未授權(quán)的用戶(hù)耸弄,將會(huì)出現(xiàn)沒(méi)有授權(quán)的錯(cuò)誤咧虎,無(wú)法讀取Topic內(nèi)容。


9. 結(jié)束

本文演示了如何在Amazon MSK中啟用用戶(hù)名和密碼驗(yàn)證以及簡(jiǎn)單的ACL設(shè)置计呈,其它未涉及的內(nèi)容以及更多信息砰诵,請(qǐng)參考AmazonWeb Services的MSK官方文檔僚饭。如有疑問(wèn),歡迎探討胧砰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鳍鸵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子尉间,更是在濱河造成了極大的恐慌偿乖,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哲嘲,死亡現(xiàn)場(chǎng)離奇詭異贪薪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)眠副,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)画切,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人囱怕,你說(shuō)我怎么就攤上這事霍弹。” “怎么了娃弓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵典格,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我台丛,道長(zhǎng)耍缴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任挽霉,我火速辦了婚禮防嗡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侠坎。我一直安慰自己蚁趁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布硅蹦。 她就那樣靜靜地躺著荣德,像睡著了一般。 火紅的嫁衣襯著肌膚如雪童芹。 梳的紋絲不亂的頭發(fā)上涮瞻,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音假褪,去河邊找鬼署咽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宁否。 我是一名探鬼主播窒升,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慕匠!你這毒婦竟也來(lái)了饱须?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤台谊,失蹤者是張志新(化名)和其女友劉穎蓉媳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體锅铅,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酪呻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盐须。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玩荠。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贼邓,靈堂內(nèi)的尸體忽然破棺而出阶冈,到底是詐尸還是另有隱情,我是刑警寧澤立帖,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布眼溶,位于F島的核電站,受9級(jí)特大地震影響晓勇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜灌旧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一绑咱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枢泰,春花似錦描融、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至毛甲,卻和暖如春年叮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玻募。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工只损, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓跃惫,卻偏偏與公主長(zhǎng)得像叮叹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爆存,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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