最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于 SASL/SCRAM 讓 Kafka 實(shí)現(xiàn)動(dòng)態(tài)授權(quán)認(rèn)證的方法

 更新時(shí)間:2024年07月29日 09:59:42   作者:zlt2000  
在大數(shù)據(jù)處理和分析中?Apache Kafka?已經(jīng)成為了一個(gè)核心組件,本文將從零開始部署?ZooKeeper?和?Kafka?并通過配置?SASL/SCRAM?和?ACL(訪問控制列表)來增強(qiáng)?Kafka?的安全性,需要的朋友可以參考下

一、說明

在大數(shù)據(jù)處理和分析中 Apache Kafka 已經(jīng)成為了一個(gè)核心組件。然而在生產(chǎn)環(huán)境中部署 Kafka 時(shí),安全性是一個(gè)必須要考慮的重要因素。SASL(簡單認(rèn)證與安全層)和 SCRAM(基于密碼的認(rèn)證機(jī)制的鹽化挑戰(zhàn)響應(yīng)認(rèn)證機(jī)制)提供了一種方法來增強(qiáng) Kafka 集群的安全性。

本文將從零開始部署 ZooKeeper 和 Kafka 并通過配置 SASL/SCRAM 和 ACL(訪問控制列表)來增強(qiáng) Kafka 的安全性。

二、Kafka 的安全機(jī)制

kafka 社區(qū)在 0.9.0.0 版本正式添加了安全特性,可以滿足各種安全性的要求,包括:

  • Kafka 與 ZooKeeper 之間的安全通信;
  • Kafka 集群 ZooKeeper 之間的安全通信;
  • 客戶端與服務(wù)端之間的安全通信;
  • 消息級別的權(quán)限控制,可以控制客戶端(生產(chǎn)者或消費(fèi)者)的讀寫操作權(quán)限。
認(rèn)證方式引入版本適用場景
SSL0.9.0SSL做信道加密比較多,SSL認(rèn)證不如SASL所以一般都會(huì)使用SSL來做通信加密。
SASL/GSSAPI0.9.9主要是給 Kerberos 使用的。如果你的公司已經(jīng)做了 Kerberos 認(rèn)證(比如使用 Active Directory),那么使用 GSSAPI 是最方便的了。因?yàn)槟悴恍枰~外地搭建 Kerberos,只要讓你們的 Kerberos 管理員給每個(gè) Broker 和要訪問 Kafka 集群的操作系統(tǒng)用戶申請 principal 就好了。
SASL/PLAIN0.10.2簡單的用戶名密碼認(rèn)證,通常與SSL結(jié)合使用,對于小公司來說,沒必要搭建公司級別的Kerberos,使用它就比較合適。
SASL/SCRAM0.10.2PLAIN的加強(qiáng)版本,支持動(dòng)態(tài)的用戶增減。
Deleation Token1.1Delegation Token 是在 1.1 版本引入的,它是一種輕量級的認(rèn)證機(jī)制,主要目的是補(bǔ)充現(xiàn)有的 SASL 或 SSL 認(rèn)證。如果要使用 Delegation Token,你需要先配置好 SASL 認(rèn)證,然后再利用 Kafka 提供的 API 去獲取對應(yīng)的 Delegation Token。這樣 Broker 和客戶端在做認(rèn)證的時(shí)候,可以直接使用這個(gè) token,不用每次都去 KDC 獲取對應(yīng)的 ticket(Kerberos 認(rèn)證)或傳輸 Keystore 文件(SSL 認(rèn)證)。
SASL/OAUTHBEARER2.0OAuth 2框架的集成。

三、環(huán)境和軟件準(zhǔn)備

從 Apache Kafka 官網(wǎng) 下載對應(yīng)版本的 Kafka 并解壓到你選擇的目錄。

確保已經(jīng)安裝 Java 才能運(yùn)行 Kafka,可以通過運(yùn)行 java -version 來檢查 Java 環(huán)境。

四、部署 Zookeeper

使用 Kafka 內(nèi)置的 Zookeeper

4.1. 啟用 SASL 認(rèn)證

進(jìn)入 config 目錄,修改 zookeeper.properties 配置文件增加以下內(nèi)容:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
requireClientAuthScheme=sasl
zookeeper.sasl.client=true

4.2. 配置 JAAS

在 config 目錄下創(chuàng)建 zk_jaas.conf 文件,內(nèi)容如下:

Server {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="admin"
    password="admin"
    user_admin="admin"
    user_zkclient="zkclient";
};

其作用是創(chuàng)建了一個(gè) Server 節(jié)點(diǎn),其中

  • org.apache.zookeeper.server.auth.DigestLoginModule required 是認(rèn)證邏輯的處理類;
  • username、password 是zookeeper之間通訊的用戶名和密碼;
  • user_admin="admin" 的結(jié)構(gòu)是 user_[username]=[password] 定義 kafka-broker(zookeeper客戶端)連接到 zookeeper 時(shí)用的用戶名和密碼。

注意:Server 內(nèi)部最后一行的 ; 和 } 后的 ; 不能缺少!

4.3. 修改啟動(dòng)文件

進(jìn)入 bin 目錄,修改 zookeeper-server-start.sh 文件;

在 export KAFKA_HEAP_OPTS= 配置項(xiàng)的參數(shù)后添加 JAAS 的配置:

export KAFKA_HEAP_OPTS="-Xmx512M -Xms512M -Djava.security.auth.login.config=../config/zk_jaas.conf"

4.4. 啟動(dòng) Zookeeper

執(zhí)行命令:./zookeeper-server-start.sh -daemon ../config/zookeeper.properties

-daemon 參數(shù)配置后臺運(yùn)行

4.5. 測試

可以從官網(wǎng) Apache ZooKeeper 下載對應(yīng)版本的 ZooKeeper 并解壓;

添加 JAAS 配置,在 confi 目錄下創(chuàng)建 zk_client_jaas.conf 文件:

Client{
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="zkclient"
    password="zkclient";
};

修改 bin 目錄下的 zkCli.sh 文件,在啟動(dòng)命令中增加 JAAS 的配置:

"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.log.file=${ZOO_LOG_FILE}" \
     -cp "$CLASSPATH" $CLIENT_JVMFLAGS $JVMFLAGS \
     "-Djava.security.auth.login.config=../conf/zk_client_jaas.conf" \
     org.apache.zookeeper.ZooKeeperMain "$@"

執(zhí)行 zkCli.sh 連接本機(jī)已經(jīng)啟動(dòng)好的 ZooKeeper

進(jìn)入 Kafka 的 log 目錄,查看內(nèi)置 zk 的日志 zookeeper.out 顯示以下內(nèi)容:

INFO adding SASL authorization for authorizationID: zkclient (org.apache.zookeeper.server.ZooKeeperServer)

代表 ZooKeeper 的 SASL 認(rèn)證已經(jīng)配置成功。

五、部署 Kafka

5.1. 配置 Kafka Broker

進(jìn)入 config 目錄,修改 server.properties 配置文件增加以下內(nèi)容:

listeners=SASL_PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://localhost:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin
  • authorizer.class.name 開啟 ACL 授權(quán)機(jī)制并指定實(shí)現(xiàn)類;
  • allow.everyone.if.no.acl.found 如果沒有找到ACL(訪問控制列表)配置,是否允許任何操作;這里設(shè)置為 false 指除了超級管理員,其他用戶必須配置 ACL 才能訪問資源;
  • super.users 超級管理員,無需配置 ACL 擁有所有權(quán)限的用戶。

5.2. 配置 JAAS

在 config 目錄下創(chuàng)建 kafka_server_jaas.conf 文件,內(nèi)容如下:

KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username="admin"
    password="admin";
};
Client{
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="zkclient"
    password="zkclient";
};
  • KafkaServer 中的 username,password 用于 Kafka 集群 Broker 節(jié)點(diǎn)之間通信用的賬號密碼;
  • KafkaServer 中的 user_test="test" 用于 Kafka 客戶端(producer,consumer)連接broker時(shí),用該配置下user_[username]=[password]結(jié)構(gòu)配置的賬號密碼登錄;
  • Client 用于 broker 和 zookeeper 之間的認(rèn)證,對應(yīng) zk_jaas.conf 中的 【user_zkclient="zkclient"】 配置;
  • user_admin="admin" 的結(jié)構(gòu)是 user_[username]=[password] 定義 kafka-broker(zookeeper客戶端)連接到 zookeeper 時(shí)用的用戶名和密碼。

5.3. 修改啟動(dòng)文件

進(jìn)入 bin 目錄,修改 kafka-server-start.sh 文件;

在 export KAFKA_HEAP_OPTS= 配置項(xiàng)的參數(shù)后添加 JAAS 的配置:

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=../config/kafka_server_jaas.conf"

5.4. 創(chuàng)建 SCRAM 用戶

在啟動(dòng) Kafka 之前需要先創(chuàng)建好用戶,在 bin 目錄下執(zhí)行以下內(nèi)容:

分別創(chuàng)建 admin(超級管理員) 和 test(客戶端用戶)

./kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=admin]' --entity-type users --entity-name admin
./kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=test]' --entity-type users --entity-name test

SASL/SCRAM 認(rèn)證的用戶信息是動(dòng)態(tài)創(chuàng)建存儲(chǔ)在 ZooKeeper 中, 由于上面的配置 kafka_server_jaas.conf 中 Broker 之間的通信是通過 admin 用戶的,如果該用戶不存在會(huì) 啟動(dòng)報(bào)錯(cuò)。

5.5. 啟動(dòng) Kafka

執(zhí)行命令:./kafka-server-start.sh -daemon ../config/server.properties

-daemon 參數(shù)配置后臺運(yùn)行

六、驗(yàn)證 SASL/SCRAM 鑒權(quán)

6.1. 客戶端認(rèn)證配置

6.1.1. 管理員配置

進(jìn)入 config 目錄創(chuàng)建 cmd.properties 內(nèi)容如下:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin";

配置認(rèn)證的類型以及登錄邏輯的處理類和用戶,使用超級管理員 admin

注意 最后的 ; 是必須加上的。

6.1.2. 生產(chǎn)者配置

修改 config 目錄下的 producer.properties 增加以下內(nèi)容:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin";

生產(chǎn)者也使用超級管理員 admin 來發(fā)送消息。

6.1.3. 消費(fèi)者配置

修改 config 目錄下的 consumer.properties 增加以下內(nèi)容:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="test" password="test";

消費(fèi)者使用 test 用戶來接收消息。

6.2. 創(chuàng)建topic

在 bin 目錄下執(zhí)行以下命令:

./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 1 --replication-factor 1 --command-config ../config/cmd.properties
  • bootstrap-server 配置 Kafka 服務(wù)端的地址
  • topic 指定topic名稱
  • command-config 指定命令的認(rèn)證配置,這里使用上面創(chuàng)建的 管理員配置

創(chuàng)建成功后可以通過以下命令查看存在的 topic 清單:

./kafka-topics.sh --bootstrap-server localhost:9092 --list --command-config ../config/cmd.properties

6.3. 創(chuàng)建消費(fèi)者

6.3.1. 執(zhí)行 kafka-console-consumer

在 bin 目錄下執(zhí)行以下命令:

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --consumer.config ../config/consumer.properties

執(zhí)行命令后會(huì)發(fā)現(xiàn)以下 報(bào)錯(cuò) 信息:

ERROR Error processing message, terminating consumer process:  (kafka.tools.ConsoleConsumer$)
org.apache.kafka.common.errors.SaslAuthenticationException: Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256
Processed a total of 0 messages

Authentication failed 認(rèn)證失敗,由于消費(fèi)者的認(rèn)證使用的是 test 用戶,而該用戶還未配置任何 ACL 權(quán)限。

6.3.2. 配置用戶 ACL 權(quán)限

Kafka 的 ACL (Access Control Lists) 允許你定義哪些用戶可以訪問哪些主題,并且可以執(zhí)行哪些操作(如讀、寫、創(chuàng)建、刪除等)。

執(zhí)行以下命令:

./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:test --operation Read --topic test --group test-consumer-group

BASH 復(fù)制 全屏

為 test 用戶在資源 topic[test] 下分配只讀權(quán)限

執(zhí)行成功,可以通過以下命令查看資源所分配的所有 ACL 清單:

./kafka-acls.sh --bootstrap-server localhost:9092 --topic test --list --command-config ../config/cmd.properties

重新創(chuàng)建消費(fèi)者:

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --consumer.config ../config/consumer.properties

執(zhí)行成功后該 shell 窗口會(huì)一直阻塞等待消息。

6.4. 創(chuàng)建生產(chǎn)者

新開一個(gè) shell 窗口 在 bin 目錄下執(zhí)行以下命令:

./kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test --producer.config ../config/producer.properties

由于生產(chǎn)者的認(rèn)證使用的是 admin 為 超級管理員 所以無需配置 ACL 權(quán)限。

執(zhí)行成功后會(huì)出現(xiàn) > 符號,輸入內(nèi)容之后,切換到 消費(fèi)者 窗口就可以看到了。

到此這篇關(guān)于基于 SASL/SCRAM 讓 Kafka 實(shí)現(xiàn)動(dòng)態(tài)授權(quán)認(rèn)證的文章就介紹到這了,更多相關(guān)Kafka動(dòng)態(tài)授權(quán)認(rèn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud Zuul添加過濾器過程解析

    Spring Cloud Zuul添加過濾器過程解析

    這篇文章主要介紹了Spring Cloud Zuul添加過濾器過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Quartz集群原理以及配置應(yīng)用的方法詳解

    Quartz集群原理以及配置應(yīng)用的方法詳解

    Quartz是Java領(lǐng)域最著名的開源任務(wù)調(diào)度工具。Quartz提供了極為廣泛的特性如持久化任務(wù),集群和分布式任務(wù)等,下面這篇文章主要給大家介紹了關(guān)于Quartz集群原理以及配置應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2018-05-05
  • SpringBoot構(gòu)建ORM框架的方法步驟

    SpringBoot構(gòu)建ORM框架的方法步驟

    本文主要介紹了SpringBoot構(gòu)建ORM框架的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • spring Security的自定義用戶認(rèn)證過程詳解

    spring Security的自定義用戶認(rèn)證過程詳解

    這篇文章主要介紹了spring Security的自定義用戶認(rèn)證過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java簡單工廠模式實(shí)例及講解

    java簡單工廠模式實(shí)例及講解

    這篇文章主要為大家詳細(xì)介紹了java簡單工廠模式實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java HashSet集合存儲(chǔ)遍歷學(xué)生對象代碼實(shí)例

    Java HashSet集合存儲(chǔ)遍歷學(xué)生對象代碼實(shí)例

    這篇文章主要介紹了Java HashSet集合存儲(chǔ)遍歷學(xué)生對象代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Spring MVC實(shí)現(xiàn)一次簡單的CRUD示例

    Spring MVC實(shí)現(xiàn)一次簡單的CRUD示例

    這篇文章主要介紹了Spring MVC實(shí)現(xiàn)一次簡單的CRUD示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • += 和 ++ 操作符區(qū)別簡單介紹

    += 和 ++ 操作符區(qū)別簡單介紹

    這篇文章主要介紹了+= 和 ++ 操作符區(qū)別簡單介紹的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • Ubuntu環(huán)境下JDK環(huán)境變量配置過程詳解(適用于?JDK?1.8)

    Ubuntu環(huán)境下JDK環(huán)境變量配置過程詳解(適用于?JDK?1.8)

    在Ubuntu系統(tǒng)中設(shè)置Java環(huán)境變量是一個(gè)常見的任務(wù),它對于Java應(yīng)用的開發(fā)和運(yùn)行至關(guān)重要,這篇文章主要介紹了Ubuntu環(huán)境下JDK環(huán)境變量配置的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-04-04
  • 深入了解Spring中的依賴注入DI

    深入了解Spring中的依賴注入DI

    這篇文章主要介紹了Spring?中的依賴注入,包括注入的方式,寫法,該選擇哪個(gè)注入方式以及可能出現(xiàn)的循環(huán)依賴問題等內(nèi)容,需要的可以參考一下
    2023-06-06

最新評論

嘉鱼县| 乌拉特前旗| 静乐县| 溧水县| 剑阁县| 杭锦后旗| 库尔勒市| 黔南| 青龙| 应用必备| 横山县| 府谷县| 民乐县| 扎鲁特旗| 封丘县| 重庆市| 乌拉特中旗| 祁门县| 师宗县| 高雄市| 蕲春县| 赤水市| 平塘县| 洛隆县| 南华县| 陵川县| 泾川县| 新野县| 抚远县| 方山县| 五大连池市| 睢宁县| 英山县| 府谷县| 车致| 新宾| 定远县| 临澧县| 长治县| 开化县| 务川|