SASL(Simple Authentication and Security Layer)是一個框架,允許應用程序層選擇和實現各種認證機制。使用SASL可以對用戶進行身份驗證,確保只有擁有合法憑證的客戶端能夠連接到Kafka服務,從而顯著提升服務的安全性。本文為您介紹如何開啟SASL,并使用SASL連接Kafka。
前提條件
已在E-MapReduce控制臺創建選擇了Kafka服務的DataFlow集群(即Kafka集群),詳情請參見創建DataFlow Kafka集群。
配置SASL功能
E-MapReduce通過server.properties配置文件的kafka.sasl.config.type配置項來管理配置SASL的策略。
Kafka集群的SASL功能默認關閉,您可以執行以下步驟快速開啟SASL功能。本文以配置SASL/SCRAM-SHA-512認證機制為例。
新增用戶。
使用SSH方式連接集群的Master節點,詳情請參見登錄集群。
執行以下命令,創建admin用戶。
kafka-configs.sh --bootstrap-server core-1-1:9092 --alter --add-config 'SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]' --entity-type users --entity-name admin
說明本文示例中用戶
admin
的密碼為admin-secret
,您可以根據實際情況替換。
進入服務的配置頁面。
在頂部菜單欄處,根據實際情況選擇地域和資源組。
單擊目標集群操作列的集群服務。
在集群服務頁面,單擊Kafka服務區域的配置。
修改SASL認證機制相關的配置。
設置SASL配置項。
在Kafka服務配置頁面的server.properties頁簽,添加配置項。
單擊新增配置項。
在新增配置項對話框中,添加以下配置,單擊確定。
參數
參數值
sasl.mechanism.inter.broker.protocol
SCRAM-SHA-512
sasl.enabled.mechanisms
SCRAM-SHA-512
在彈出的對話框中,輸入執行原因,單擊保存。
修改listener配置。
在配置頁面,單擊server.properties頁簽。
修改配置項kafka.sasl.config.type的值為CUSTOM,單擊保存。
在彈出的對話框中,輸入執行原因,單擊保存。
配置服務端JAAS。
方式一:通過自定義配置項配置服務端JAAS。
在Kafka服務配置頁面,單擊server.properties頁簽。
單擊新增配置項,新增以下配置項,單擊確定。
參數
參數值
listener.name.sasl_plaintext.sasl.enabled.mechanisms
SCRAM-SHA-512
listener.name.sasl_plaintext.scram-sha-512.sasl.jaas.config
org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret" ;
在彈出的對話框中,輸入執行原因,單擊保存。
方式二:通過文本文件配置JAAS。
在Kafka服務配置頁面,修改以下配置項,單擊保存。
頁簽
參數
參數值
kafka_server_jaas.conf
kafka.server.jaas.content
KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret"; };
server.properties
kafka_opts
-Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_server_jaas.conf
在彈出的對話框中,輸入執行原因,單擊確認。
配置客戶端JAAS。
通過kafka_client_jaas.conf配置文件的kafka.client.jaas.content配置項,配置Kafka客戶端JAAS,該配置將會用于啟動Kafka Schema Registry以及Kafka Rest Proxy組件。
在Kafka服務配置頁面,修改以下配置項,單擊保存。
頁簽
參數
參數值
kafka_client_jaas.conf
kafka.client.jaas.content
KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret"; };
schema-registry.properties
schema_registry_opts
-Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf
kafka-rest.properties
kafkarest_opts
-Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf
在彈出的對話框中,輸入執行原因,單擊保存。
重啟Kafka服務。
在Kafka服務的配置頁面,選擇
。在彈出的對話框中,輸入執行原因,單擊確定。
在確認對話框中,單擊確定。
使用SASL登錄Kafka集群
本文以SASL/SCRAM-SHA-512機制為例,使用Kafka自帶的Producer和Consumer執行作業,介紹客戶端如何認證登錄Kafka服務。
使用SSH方式登錄到集群主節點,詳情請參見登錄集群。
創建管理員配置文件。
執行以下命令,創建配置文件sasl_admin.properties。
vim sasl_admin.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-secret";
執行以下命令,創建普通用戶。
kafka-configs.sh --bootstrap-server core-1-1:9092 --alter --add-config 'SCRAM-SHA-256=[password=<yourUserpassword>],SCRAM-SHA-512=[password=<yourUserpassword>]' --entity-type users --entity-name <yourUsername> --command-config /root/sasl_admin.properties
代碼中的
<yourUsername>
和<yourUserpassword>
為您新創建的用戶名和密碼,請根據實際情況替換。創建用戶配置文件。
執行以下命令,創建配置文件sasl_user.properties。
vim sasl_user.properties
在配置文件中添加以下內容。
security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-512 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="<yourUsername>" password="<yourUserpassword>";
執行以下命令,創建Topic。
kafka-topics.sh --partitions 10 --replication-factor 2 --bootstrap-server core-1-1:9092 --topic test --create --command-config /root/sasl_user.properties
本文示例中的
test
為創建的Topic的名稱,請您根據實際情況替換。執行以下命令,使用SASL配置文件產生數據。
kafka-producer-perf-test.sh --topic test --num-records 123456 --throughput 10000 --record-size 1024 --producer-props bootstrap.servers=core-1-1:9092 --producer.config sasl_user.properties
執行以下命令,使用SASL配置文件消費數據。
kafka-consumer-perf-test.sh --broker-list core-1-1:9092 --messages 100000000 --topic test --consumer.config sasl_user.properties
相關文檔
如需在客戶端和服務器之間建立加密的數據傳輸通道,詳情請參見使用SSL加密Kafka鏈接。