Kafka Manager與Kafka SASL+ACL配置

根據需求,給 Kafka 集羣配置不使用 Kerberos 的 SASL+ACL 。Kafka 配置部分參考資料比較充足,這裏參考了胡夕老師的《Apache Kafka 實戰》中相關章節,配置過程順利。Kafka Manager監控配置了 SASL Kafka 集羣部分的資料比較少,在認證部分出現較多問題,最終配置出一個“能用”版本。Kafka_2.11-1.0.0  kafka-manager-1.3.3.23。

1. Kafka SASL+ACL

通過 producer、consumer、admin 實現了寫入、讀取和 consumer-group 控制權限的分離。沒有配置 zookeeper 的 SASL

Broker 端

1. 創建 JAAS 文件,注意結尾兩個分號,保存爲 kafka_server_jaas.conf

KafkaServer {
        org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="admin"
        user_admin="admin"
        user_producer="prod-sec"
        user_consumer="cons-sec";
};

由於 kafka-server-start.sh 只接收 server.properties 的位置,故需要修改啓動腳本,cp 一份修改最後一行爲

exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$KAFKA_HOME/config/kafka_server_jaas.conf kafka.Kafka "$@"

2. 修改 broker 啓動所需的 server.properties 文件,前五條必須

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
listeners=SASL_PLAINTEXT://ip:9092
security.inter.broker.protocol=SASL_PLAINTEXT 
sasl.enabled.mechanisms=PLAIN 
sasl.mechanism.inter.broker.protocol=PLAIN 
#設置超級用戶
super.users=User:admin
#一個參數allow.everyone.if.no.acl.found
#設置爲true,ACL機制改爲黑名單機制,只有黑名單中的用戶無法訪問
#設置爲false,ACL機制改爲白名單機制,只有白名單中的用戶可以訪問,默認值爲false

3. 使用新腳本啓動 broker

啓動zookeeper
kafka-server-start-sasl.sh config/server.properties

console-producer 腳本

1. 創建 kafka-prod-jaas.conf 認證文件

KafkaClient {
    org.apache.kafka.common.security.plain.PlainLoginModele required
    username="producer"
    password="ur password"
};

2. cp 一份腳本,修改最後一行

exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=$KAFKA_HOME/config/kafka_prod_jaas.conf kafka.tools.ConsoleProducer "$@"

3. 使用 ACL 配置 producer 寫入授權

kafka-acls.sh --authorizer Kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:producer --operation Write --topic *

4. 使用修改後的 console-producer 腳本發送消息

kafka-console-producer-sasl.sh --broker-list localhost:9092 --topic test --producer-property security.protocol=SASL_PLAINTEXT --producer-property sasl.mechanism=PLAIN

 

console-cosnumer 腳本

1. 創建 kafka-cons-jaas.conf 認證文件

KafkaClient {
    org.apache.kafka.common.security.plain.PlainLoginModele required
    username="consumer"
    password="ur password"
};

2. cp 一份腳本,修改最後一行

exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=$KAFKA_HOME/config/kafka_cons_jaas.conf kafka.tools.ConsoleConsumer "$@"

3. 創建 consumer.config 文件或修改 /config/consumer.properties 文件

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
#group.id=test-group
#group可以指定,也可以不指定。
#一個問題:指定group後--from-beginning不生效,consumer會從記錄的offset處繼續消費

4. 使用 ACL 配置 consumer 讀取授權

kafka-acls.sh --authorizer Kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:consumer --operation Read --topic * --group *

5. 使用修改後的 console-consumer 腳本接收消息

kafka-console-consumer-sasl.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config consumer.properties

consumer-groups 腳本

1. 創建 admin_jaas.conf 認證文件

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

2. cp 一份腳本,修改最後一行

exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=$KAFKA_HOME/config/admin_jaas.conf kafka.admin.ConsumerGroupCommand "$@"

3. 創建 admin_sasl.config 文件

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

4. 使用修改後的 kafka-consumer-groups-sasl.sh 腳本 

kafka-consumer-groups-sasl.sh --bootstrap-server localhost:9092 --group test-group --describe --command-config $KAFAK_HOME/config/admin_sasl.config 

總結

SASL+ACL 是認證+授權的過程,除超級用戶外的用戶在認證後還應授予相應的權限

2. kafka-manager

在 Kafka 配置 SASL 後,需要對 kafka-manager 增加相應配置,監控 offset 等指標

無 SASL zookeeper ,在勾選 poll consumer info 後注意以下三個選項對應 broker 的配置即可

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章