Kafka SCRAM和PLAIN實戰

1.概述

目前Kafka ACL支持多種權限認證,今天筆者給你們介紹一下SCRAM和PLAIN的權限認證。驗證環境以下:html

  • JDK:1.8
  • Kafka:2.3.0
  • Kafka Eagle:1.3.8

2.內容

2.1 PLAIN認證

首先,在$KAFAK_HOME/config目錄新建一個文本文件,名爲kafka_server_plain_jaas.conf,配置內容以下:java

KafkaServer {
   org.apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin-secret"
   user_admin="admin-secret"
   user_ke="ke";
};

接着,將腳本文件kafka-server-start.sh重命名爲kafka-server-plain-start.sh,並修改最後一行的內容爲:apache

# 添加鑑權文件
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$base_dir/../config/kafka_server_plain_jaas.conf  kafka.Kafka "$@"

而後,複製server.properties文件並重命名爲plain.properties,接着修改服務端配置文件plain.properties,內容以下:oop

# Protocol
listeners=SASL_PLAINTEXT://127.0.0.1:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

# ACL
allow.everyone.if.no.acl.found=false
super.users=User:admin
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

最後,建立客戶端用戶認證文件,kafka_client_plain_jaas.conf內容以下:學習

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

2.2 啓動PLAIN認證集羣

2.2.1 啓動Zookeeper

# Zookeeper的配置比較簡單,這裏很少作介紹
zkServer.sh start

2.2.2 啓動Kafka集羣

# 進入到Kafka安裝bin目錄
./kafka-server-plain-start.sh ../config/plain.properties &

2.2.3 建立Topic

./kafka-topics.sh --create --zookeeper 127.0.0.1:2181/plain --replication-factor 1 --partitions 3 --topic test_plain 

2.2.4 添加讀寫權限

# 添加讀權限
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --add --allow-principal User:ke --operation Read --topic test_plain 
# 添加寫權限
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --add --allow-principal User:ke --operation Write --topic test_plain
# 添加消費者組權限
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --add --allow-principal User:ke --operation Read --group g_plain_test
# 查看權限列表
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --list

2.2.5 執行結果

2.3 SCRAM認證

PLAIN認證有個問題,就是不能動態新增用戶,每次添加用戶後,須要重啓正在運行的Kafka集羣才能生效。爲此,在生產環境,這種認證方式不符合實際業務場景。而SCRAM不同,使用SCRAM認證,能夠動態新增用戶,添加用戶後,能夠不用重啓正在運行的Kafka集羣便可進行鑑權。大數據

新增kafka_server_scram_jaas.conf,配置內容以下:ui

KafkaServer {
  org.apache.kafka.common.security.scram.ScramLoginModule required
  username="admin"
  password="admin-secret";
};

接着,將腳本文件kafka-server-start.sh重命名爲kafka-server-scram-start.sh,並修改最後一行的內容爲:spa

# 添加鑑權文件
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$base_dir/../config/kafka_server_scram_jaas.conf  kafka.Kafka "$@"

而後在$KAFKA_HOME/config目錄中,複製server.properties文件並重命名爲scram.properties,接着修改服務端配置文件scram.properties,內容以下:3d

# Protocol
listeners=SASL_PLAINTEXT://dn1:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256

# ACL
allow.everyone.if.no.acl.found=false
super.users=User:admin
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

2.3.1 啓動Zookeeper

# Zookeeper的配置比較簡單,這裏很少作介紹
zkServer.sh start

2.3.2 添加管理員權限和普通用戶

# 添加管理員
./kafka-configs.sh --zookeeper 127.0.0.1:2181/scram --alter --add-config 'SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]' --entity-type users --entity-name admin
# 添加普通用戶(ke)
./kafka-configs.sh --zookeeper 127.0.0.1:2181/scram --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=ke],SCRAM-SHA-512=[password=ke]' --entity-type users --entity-name ke

2.3.3 啓動SCRAM認證集羣

./kafka-server-scram-start.sh ../config/scram.properties &

2.3.4 建立Topic

./kafka-topics.sh --create --zookeeper 127.0.0.1:2181/scram --replication-factor 1 --partitions 3 --topic test_scram

2.3.5 添加權限

# 添加讀權限
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --add --allow-principal User:ke --operation Read --topic test_scram
# 添加寫權限 .
/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --add --allow-principal User:ke --operation Write --topic test_scram
# 添加消費者組權限 .
/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --add --allow-principal User:ke --operation Read --group g_scram_test
# 查看權限列表 ./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --list

2.3.6 執行結果

3.Kafka權限級別

Kafka權限級別包含Topic、Group、Cluster、TransactionalId,每一個維度涉及的權限內容以下:code

Resource Operations
Topic Read,Write,Describe,Delete,DescribeConfigs,AlterConfigs,All
Group Read,Describe,All
Cluster Create,ClusterAction,DescribeConfigs,AlterConfigs,IdempotentWrite,Alter,Describe,All
TransactionalId Describe,Write,All

例如,統計Topic的Capacity大小時,若是拋出異常「Cluster authorization failed」,這是因爲沒有開啓Cluster級別的Describe權限,執行以下命令便可:

./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --add --allow-principal User:ke --operation Describe --cluster 

4.Kafka Eagle集成SCRAM認證

那麼如何使用Kafka Eagle來集成有SCRAM認證的Kafka集羣,進行監控呢?訪問http://www.kafka-eagle.org/,下載安裝包,解壓並配置以下內容:

# 這裏對啓動一個擁有SCRAM認證的Kafka集羣(別名爲cluster1)進行配置
cluster1.kafka.eagle.sasl.enable=true
cluster1.kafka.eagle.sasl.protocol=SASL_PLAINTEXT
cluster1.kafka.eagle.sasl.mechanism=SCRAM-SHA-256
cluster1.kafka.eagle.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="ke" password="ke";
# 這裏ClientId若是不須要,能夠不用配置
cluster1.kafka.eagle.sasl.client.id=

而後,執行ke.sh start進行啓動Kafka Eagle監控系統。

4.1 Topic預覽

4.2 使用KSQL查詢Topic

執行以下SQL語句,代碼以下:

select * from "test_scram" where "partition" in (0) limit 1

執行結果以下:

5.總結

生產環境中,用戶可能隨着業務須要,增長或者刪除,此時動態控制用戶時頗有必要的。並且,生產環境Kafka集羣不可能隨隨便便重啓,所以採用SCRAM來進行Kafka鑑權很是適合。

6.結束語

這篇博客就和你們分享到這裏,若是你們在研究學習的過程中有什麼問題,能夠加羣進行討論或發送郵件給我,我會盡我所能爲您解答,與君共勉!

另外,博主出書了《Kafka並不難學》和《Hadoop大數據挖掘從入門到進階實戰》,喜歡的朋友或同窗, 能夠在公告欄那裏點擊購買連接購買博主的書進行學習,在此感謝你們的支持。關注下面公衆號,根據提示,可免費獲取書籍的教學視頻。

相關文章
相關標籤/搜索