Kafka SCRAM和PLAIN权限认证
目前Kafka ACL支持多種權(quán)限認(rèn)證,今天筆者給大家介紹一下SCRAM和PLAIN的權(quán)限認(rèn)證。驗證環(huán)境如下:
?
-
JDK:
1.8
-
Kafka:
2.3.0
-
Kafka Eagle:
1.3.8
?
2.1?PLAIN認(rèn)證
首先,在$KAFAK_HOME/config目錄新建一個文本文件,名為kafka_server_plain_jaas.conf,配置內(nèi)容如下:
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,并修改最后一行的內(nèi)容為:
# 添加鑒權(quán)文件 exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$base_dir/../config/kafka_server_plain_jaas.conf kafka.Kafka "$@"然后,復(fù)制server.properties文件并重命名為plain.properties,接著修改服務(wù)端配置文件plain.properties,內(nèi)容如下:
# Protocollisteners=SASL_PLAINTEXT://127.0.0.1:9092security.inter.broker.protocol=SASL_PLAINTEXTsasl.mechanism.inter.broker.protocol=PLAINsasl.enabled.mechanisms=PLAIN # ACLallow.everyone.if.no.acl.found=falsesuper.users=User:adminauthorizer.class.name=kafka.security.auth.SimpleAclAuthorizer最后,創(chuàng)建客戶端用戶認(rèn)證文件,kafka_client_plain_jaas.conf內(nèi)容如下:
KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required username="ke" password="ke";};?
2.2 啟動PLAIN認(rèn)證集群
2.2.1 啟動Zookeeper
# Zookeeper的配置比較簡單,這里不多做介紹 zkServer.sh start?
2.2.2 啟動Kafka集群
?
# 進(jìn)入到Kafka安裝bin目錄 ./kafka-server-plain-start.sh ../config/plain.properties &?
2.2.3 創(chuàng)建Topic
./kafka-topics.sh --create --zookeeper 127.0.0.1:2181/plain --replication-factor 1 --partitions 3 --topic test_plain?
2.2.4 添加讀寫權(quán)限
# 添加讀權(quán)限./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 # 添加寫權(quán)限./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# 添加消費(fèi)者組權(quán)限./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# 查看權(quán)限列表./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/plain --list?
2.2.5 執(zhí)行結(jié)果
?
2.3?SCRAM認(rèn)證
PLAIN認(rèn)證有個問題,就是不能動態(tài)新增用戶,每次添加用戶后,需要重啟正在運(yùn)行的Kafka集群才能生效。為此,在生產(chǎn)環(huán)境,這種認(rèn)證方式不符合實際業(yè)務(wù)場景。而SCRAM不一樣,使用SCRAM認(rèn)證,可以動態(tài)新增用戶,添加用戶后,可以不用重啟正在運(yùn)行的Kafka集群即可進(jìn)行鑒權(quán)。
新增kafka_server_scram_jaas.conf,配置內(nèi)容如下:
KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-secret";};接著,將腳本文件kafka-server-start.sh重命名為kafka-server-scram-start.sh,并修改最后一行的內(nèi)容為:
# 添加鑒權(quán)文件 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目錄中,復(fù)制server.properties文件并重命名為scram.properties,接著修改服務(wù)端配置文件scram.properties,內(nèi)容如下:
# Protocollisteners=SASL_PLAINTEXT://dn1:9092security.inter.broker.protocol=SASL_PLAINTEXTsasl.mechanism.inter.broker.protocol=SCRAM-SHA-256sasl.enabled.mechanisms=SCRAM-SHA-256 # ACLallow.everyone.if.no.acl.found=falsesuper.users=User:adminauthorizer.class.name=kafka.security.auth.SimpleAclAuthorizer2.3.1 啟動Zookeeper
# Zookeeper的配置比較簡單,這里不多做介紹 zkServer.sh start?
2.3.2 添加管理員權(quán)限和普通用戶
# 添加管理員 ./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認(rèn)證集群
./kafka-server-scram-start.sh ../config/scram.properties &?
2.3.4 創(chuàng)建Topic
?
./kafka-topics.sh --create --zookeeper 127.0.0.1:2181/scram --replication-factor 1 --partitions 3 --topic test_scram?
2.3.5 添加權(quán)限
# 添加讀權(quán)限 ??? ./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 # 添加寫權(quán)限 ?????? ./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 # 添加消費(fèi)者組權(quán)限 ./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 # 查看權(quán)限列表 ./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=127.0.0.1:2181/scram --list?
2.3.6 執(zhí)行結(jié)果
Kafka權(quán)限級別包含Topic、Group、Cluster、TransactionalId,每個維度涉及的權(quán)限內(nèi)容如下:
| 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 |
?
例如,統(tǒng)計Topic的Capacity大小時,如果拋出異?!癈luster authorization failed”,這是由于沒有開啟Cluster級別的Describe權(quán)限,執(zhí)行如下命令即可:
./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那么如何使用Kafka Eagle來集成有SCRAM認(rèn)證的Kafka集群,進(jìn)行監(jiān)控呢?訪問http://www.kafka-eagle.org/,下載安裝包,解壓并配置如下內(nèi)容:
# 這里對啟動一個擁有SCRAM認(rèn)證的Kafka集群(別名為cluster1)進(jìn)行配置cluster1.kafka.eagle.sasl.enable=truecluster1.kafka.eagle.sasl.protocol=SASL_PLAINTEXTcluster1.kafka.eagle.sasl.mechanism=SCRAM-SHA-256cluster1.kafka.eagle.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="ke" password="ke";# 這里ClientId如果不需要,可以不用配置cluster1.kafka.eagle.sasl.client.id=然后,執(zhí)行ke.sh start進(jìn)行啟動Kafka Eagle監(jiān)控系統(tǒng)。
4.1 Topic預(yù)覽
?
4.2 使用KSQL查詢Topic
執(zhí)行如下SQL語句,代碼如下:
select * from "test_scram" where "partition" in (0) limit 1執(zhí)行結(jié)果如下:
生產(chǎn)環(huán)境中,用戶可能隨著業(yè)務(wù)需要,增加或者刪除,此時動態(tài)控制用戶時很有必要的。而且,生產(chǎn)環(huán)境Kafka集群不可能隨隨便便重啟,因此采用SCRAM來進(jìn)行Kafka鑒權(quán)非常適合。
總結(jié)
以上是生活随笔為你收集整理的Kafka SCRAM和PLAIN权限认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5 加入收藏夹,设为首页、添加到
- 下一篇: AI 趋势