Kafka安全認證技術:SASL/SCRAM-ACL方案詳解

#作者 :張桐瑞

文章目錄

  • 1Kafka安全認證技術介紹
  • 2基礎設置
  • 3 配置SASL/SCRAM認證
    • 3.1編寫server.properties配置
    • 3.2編寫kafka.conf密碼文件
    • 3.3編寫user.properties配置文件
    • 3.4編寫kafka-run-class.sh腳本文件
    • 3.5Zk中增加kafka用戶
    • 3.6啟動kafka進程

1Kafka安全認證技術介紹

Kafka作為一款高吞吐量的分布式消息系統,在數據傳輸和存儲過程中的安全性至關重要。目前,Kafka支持多種認證方式,每種方式都有其獨特的特點和適用場景,在生產環境中常見應用的SASL相關認證方式如下:
SSL/TLS認證:基于SSL/TLS加密技術,通過SSL/TLS證書對客戶端和服務器進行雙向身份驗證。在數據傳輸過程中,利用證書加密通道,確保數據在傳輸層的安全性和完整性,有效防止數據被竊取或篡改。這種認證方式廣泛應用于對數據安全和隱私要求極高的場景,例如金融行業的數據傳輸。
SASL/PLAIN認證:簡單身份驗證和授權層應用程序接口(Simple Authentication and Security Layer Application Programming Interface)的PLAIN認證,是一種極為簡單的用戶名和密碼認證方式。其優勢在于配置和維護簡單,易于在Kafka與其他應用程序之間建立認證機制,適用于對安全性要求相對較低、部署和維護希望簡便的場景,如一些小型企業的內部系統。
SASL/SCRAM認證:包括SCRAM-SHA-256、SCRAM-SHA-512等認證方式。該認證過程需要客戶端和服務器密切協同完成,涉及到多次交互驗證。雖然使用和維護相對復雜,但它具備動態增加用戶的顯著優勢,無需重啟Kafka組件服務端即可完成用戶的添加,為系統的用戶管理提供了極大的靈活性,適合對用戶管理靈活性要求較高的企業。
SASL/GSSAPI認證(Kerberos認證):主要適用于大型企業的生產環境,通常與Kerberos協議結合使用。通過集成目錄服務(如Active Directory,AD),實現用戶身份的統一管理和認證。這種認證機制不僅提供了卓越的安全性,還能為用戶帶來良好的體驗,例如實現單點登錄(SSO)功能,方便用戶在多個相關系統間無縫切換。
Kafka自帶ACL訪問控制方式:Kafka提供的ACL(Access Control Lists,訪問控制列表)功能,可針對特定的Topic或Topic Partition精細控制用戶的訪問權限,如讀、寫、刪除等操作權限。通過合理配置ACL,可以有效保障業務數據的安全性,確保敏感數據僅被授權用戶訪問。
企業在選擇認證方式時,需要綜合考慮多方面因素。既要確保業務數據的安全性,又要權衡部署后的性能影響和部署復雜度。在實際生產部署過程中,應根據企業的安全政策、網絡架構、對系統性能的要求等因素,謹慎選擇最適合的認證方式,以確保所選的認證機制與企業的實際需求完美契合。

2基礎設置

Zookeeper版本:apache-zookeeper-3.6.3-bin。
Kafka版本:kafka_2.13-3.5.1。

3 配置SASL/SCRAM認證

3.1編寫server.properties配置

listeners=SASL_PLAINTEXT://kafkaip:9092
advertised.listeners=SASL_PLAINTEXT://kafkaip:9092
super.users=User:admin
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
security.inter.broker.protocol=SASL_PLAINTEXT
authorizer.class.name=kafka.security.authorizer.AclAuthorizer

配置說明:
listeners:指定Kafka服務器監聽的地址和協議,這里使用SASL_PLAINTEXT協議,監聽在kafkaip:9092地址上。
advertised.listeners:用于告知客戶端連接Kafka服務器的地址和協議,確保客戶端能夠正確連接。
super.users:設置超級用戶,這里定義了admin為超級用戶,超級用戶擁有更高的權限,可進行一些特殊操作。
sasl.enabled.mechanisms:啟用SCRAM-SHA-512認證機制,確保Kafka服務器支持該認證方式。
sasl.mechanism.inter.broker.protocol:指定Kafka集群內部節點間通信使用的認證機制為SCRAM-SHA-512。
security.inter.broker.protocol:明確集群內部節點間通信的安全協議為SASL_PLAINTEXT。
authorizer.class.name:配置Kafka的訪問控制授權器,這里使用kafka.security.authorizer.AclAuthorizer來實現基于ACL的訪問控制。

3.2編寫kafka.conf密碼文件

KafkaServer {org.apache.kafka.common.security.scram.ScramLoginModule requiredusername="admin"password="admin";
};  #kafka用戶名密碼;
Client {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername="user1"password="user1";
};  #zookeeper連接;

配置說明:
KafkaServer部分:配置Kafka服務器認證所需的用戶名和密碼,這里設置用戶名為admin,密碼為admin,使用org.apache.kafka.common.security.scram.ScramLoginModule模塊進行認證。
Client部分:用于配置連接Zookeeper時所需的用戶名和密碼,設置用戶名為user1,密碼為user1,使用org.apache.zookeeper.server.auth.DigestLoginModule模塊進行認證。

3.3編寫user.properties配置文件

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

配置說明:
security.protocol:指定客戶端與Kafka服務器通信的安全協議為SASL_PLAINTEXT。
sasl.mechanism:明確使用SCRAM-SHA-512作為認證機制。
sasl.jaas.config:配置JAAS(Java Authentication and Authorization Service)認證所需的參數,包括使用的認證模塊、用戶名和密碼。

3.4編寫kafka-run-class.sh腳本文件

if [ -z "$KAFKA_OPTS" ]; thenKAFKA_OPTS="-Djava.security.auth.login.config=/kafka/config/kafka.conf"
Fi
…

配置說明:
在kafka-run-class.sh腳本中,添加上述代碼片段。這段代碼用于檢查KAFKA_OPTS環境變量是否為空,如果為空,則設置KAFKA_OPTS環境變量,指定Kafka服務器啟動時使用的JAAS配置文件路徑為/tmp/kafka/config/kafka.conf,確保Kafka服務器能夠正確加載認證配置。

3.5Zk中增加kafka用戶

./kafka/bin/kafka-configs.sh --zookeeper zookeeperip:/kafka --alter --add-config 'SCRAM-SHA-512=[password=admin]' --entity-type users --entity-name admin

命令說明:
上述命令用于在Zookeeper中為Kafka添加用戶。通過kafka-configs.sh腳本,連接到指定的Zookeeper服務器,為名為admin的用戶添加SCRAM-SHA-512認證方式的密碼配置。
啟動kafka后可使用kafka命令進行創建用戶

./bin/kafka-configs.sh --bootstrap-server kafkaip:9092 --command-config config/user.properties --alter --add-config 'SCRAM-SHA-512=[password=exporter]' --entity-type users --entity-name expoter

命令說明:
在Kafka啟動后,利用kafka-configs.sh腳本,通過指定的bootstrap-server,并依據config/user.properties配置文件中的認證信息,為名為exporter的用戶添加SCRAM-SHA-512認證方式的密碼配置。

3.6啟動kafka進程

./bin/kafka-server-start.sh ./config/server.properties
4Kafka-exporter配置監控采集
Kafka-exporter是一個用于采集Kafka監控指標的工具,為了實現對所有topic的監控數據采集,需要為其配置具有describe所有topic權限的用戶。
./kafka_exporter --kafka.server=kafkaip:9092 --sasl.enabled --sasl.mechanism=SCRAM-SHA-512 --sasl.username=exporter --sasl.password=exporter --topic.filter=topicname
–kafka.server:指定Kafka服務器的地址和端口
–sasl.enabled:啟用SASL認證
–sasl.mechanism:設置認證機制為SCRAM-SHA-512
–sasl.username和–sasl.password:指定用于認證的用戶名和密碼
–topic.filter:設置監控的topic過濾規則

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79518.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79518.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TCP/IP和UDP協議的發展歷程

TCP/IP和UDP協議的發展歷程 引言 互聯網的發展史是人類技術創新的輝煌篇章,而在這一發展過程中,通信協議發揮了奠基性的作用。TCP/IP(傳輸控制協議/互聯網協議)和UDP(用戶數據報協議)作為互聯網通信的基礎…

PhotoShop學習10

1.畫板功能的使用 使用畫板功能可以輕松針對不同的設備和屏幕尺寸設計網頁和 APP。畫板是一種容器,類似于特殊圖層組。畫板中的圖層在圖層面板中,按畫板進行分組。 使用畫板,一個文檔中可以有多個設計版面,這樣可以在畫板之間輕…

X-AnyLabeling開源程序借助 Segment Anything 和其他出色模型的 AI 支持輕松進行數據標記。

一、軟件介紹 文末提供源碼和程序下載學習 使用 X-AnyLabeling開源程序可以 導入、管理和保存數據。用戶可以通過多種方式導入圖像和視頻文件,包括快捷方式或菜單選項。此外,它還涵蓋數據刪除、圖像切換以及標簽和圖像數據的保存,以確保高效…

【深度解析】PlatformIO多環境配置實踐:ESP32/ESP32-S3/ESP32-C3適配指南

一、前言:為什么需要多環境配置? 在物聯網開發中,我們經常需要適配不同型號的硬件平臺(如ESP32系列),并且github上多數關于ESP32的都適配了多種開發板。傳統開發方式需要為每個平臺維護獨立項目,而Platfor…

React 列表渲染基礎示例

React 中最常見的一個需求就是「把一組數據渲染成一組 DOM 元素」,比如一個列表。下面是我寫的一個最小示例,目的是搞清楚它到底是怎么工作的。 示例代碼 // 定義一個靜態數組,模擬后續要渲染的數據源 // 每個對象代表一個前端框架&#xf…

NHANES指標推薦:CMI

文章題目:Association between cardiometabolic index and biological ageing among adults: a population-based study DOI:10.1186/s12889-025-22053-3 中文標題:成年人心臟代謝指數與生物衰老之間的關系:一項基于人群的研究 發…

QT調用ffmpeg庫實現視頻錄制

可以通過QProcess調用ffmpeg命令行,也可以直接調用ffmpeg庫,方便。 調用庫 安裝ffmpeg ffmpeg -version 沒裝就裝 sudo apt-get update sudo apt-get install ffmpeg sudo apt-get install ffmpeg libavdevice-dev .pro引入庫路徑,引入庫 LIBS += -L/usr/lib/aarch64-l…

消息中間件——RocketMQ(二)

前言:此篇文章系本人學習過程中記錄下來的筆記,里面難免會有不少欠缺的地方,誠心期待大家多多給予指教。 RocketMQ(一) 接上期內容:上期完成了RocketMQ單機部署知識。下面學習RocketMQ集群相關知識&#xf…

pyqt環境配置

文章目錄 1 概述2 PyQt6和PySide6區別3 環境配置4 配置PySide65 配置PyQt66 配置外部工具7 添加模板8 使用pyside6-project構建工程9 常見錯誤10 相關地址 更多精彩內容👉內容導航 👈👉Qt開發 👈👉python開發 &#x1…

金融數據庫轉型實戰讀后感

榮幸收到老友太保科技有限公司數智研究院首席專家林春的簽名贈書。 這是國內第一本關于OceanBase數據庫實際替換過程總結的的實戰書。打個比方可以說是從戰場上下來分享戰斗經驗。讀后感受頗深。我在這里講講我的感受。 第三章中提到的應用改造如何降本。應用改造是國產化替換…

旅游資源網站登錄(jsp+ssm+mysql5.x)

旅游資源網站登錄(jspssmmysql5.x) 旅游資源網站是一個為旅游愛好者提供全面服務的平臺。網站登錄界面簡潔明了,用戶可以選擇以管理員或普通用戶身份登錄。成功登錄后,用戶可以訪問個人中心,進行修改密碼和個人信息管理。用戶管理模塊允許管…

STM32 HAL庫之WDG示例代碼

獨立看門狗(IWDG) 在規定時間內按按鍵喂狗并將LED關閉,若產生看門狗復位則LED打開 初始化獨立看門狗,在main.c中的 MX_IWDG_Init();,也就是iwdg.c中的初始化代碼 void MX_IWDG_Init(void) {/* USER CODE BEGIN IWDG…

【第47節】windows程序的其他反調試手段下篇

目錄 一、利用Hardware Breakpoints Detection 二、PatchingDetection - CodeChecksumCalculation 補丁檢測,代碼檢驗和 三、block input 封鎖鍵盤、鼠標輸入 四、使用EnableWindow 禁用窗口 五、利用ThreadHideFromDebugger 六、使用Disabling Breakpoints 禁…

【筆記ing】AI大模型-03深度學習基礎理論

神經網絡:A neural network is a network or circuit of neurons,or in a modern sense,an artificial neural network,composed of artificial neurons or nodes.神經網絡是神經元的網絡或回路,或者在現在意義上來說,是一個由人工神經元或節…

基于Djiango實現中藥材數據分析與可視化系統

中藥材數據分析與可視化系統 項目截圖 登錄 注冊 首頁 藥材Top20 藥材價格 產地占比 歷史價格 新聞資訊 后臺管理 一、項目概述 中藥材數據分析與可視化系統是一個基于Django框架開發的專業Web應用,致力于對各類中藥材數據進行全面、系統的采集、分析和可視化展示…

【AI飛】AutoIT入門七(實戰):python操控autoit解決csf視頻批量轉換(有點難,AI都不會)

背景: 終極目標:通過python調用大模型,獲得結果,然后根據返回信息,控制AutoIT操作電腦軟件,執行具體工作。讓AI更具有執行力。 已完成部分: 關于python調用大模型的,可以參考之前的…

leetcode 188. Best Time to Buy and Sell Stock IV

目錄 題目描述 第一步,明確并理解dp數組及下標的含義 第二步,分析明確并理解遞推公式 1.求dp[i][j].holding 2.求dp[i][j].sold 第三步,理解dp數組如何初始化 第四步,理解遍歷順序 代碼 題目描述 這道題把第123題推廣為一…

【筆記】【C++】【基礎語法】作用域(scope)、持續時間(duration)和鏈接(linkage)

【筆記】【C】【基礎語法】作用域(scope)、持續時間(duration)和鏈接(linkage) 最近正在復習學習C(查漏補缺ing)。記錄一下學習所得。希望能將所學都整理成一系列的筆記和博客。優先…

Yarn的安裝及環境配置

### Yarn 安裝教程及環境配置步驟 #### 1. 檢查 Node.js 是否已安裝 在安裝 Yarn 前,需確認系統中已經安裝了 Node.js。可以通過以下命令驗證其是否存在并獲取版本號: bash node -v 如果未安裝,則需要先完成 Node.js 的安裝。 --- #### 2…

day2-小白學習JAVA---java第一個程序

java第一個程序 1、新建一個文件,以.java為結尾2、用編輯器打開后寫入代碼(本人寫前端,所以用vscode,也可用其他)3、編譯文件4、運行文件5、HelloWorld代碼解釋6、文檔注釋 1、新建一個文件,以.java為結尾 …