1. 程式人生 > >kafka topic acl授權

kafka topic acl授權

1.修改server.properties

authorizer.class.name = kafka.security.auth.SimpleAclAuthorizer

#設定超級使用者
super.users=User:admin

allow.everyone.if.no.acl.found引數,預設是false。如果一個資源R沒有任何acl設定,那麼預設是除了超級使用者之外,其他使用者都不可見。設定為true可以改變這個情況。

2.授權方法

Principal P is [Allowed/Denied] Operation O From Host H On Resource R

需要說明的是,Principal是根據之前的kafka認證中的主體,比如我上篇使用的是SASL/PLAIN,則acl授權體系中 Principal=PLAIN中的使用者名稱。我剛開始打算單獨使用kafka acl而不啟用kafka authentication,結果是Principal並不是我想象中的linux使用者名稱,而是基於kafka authentication體系中的使用者名稱,這樣才能生效。另外,可以通過重寫principal.builder.class引數的類,來實現單獨使用acl。

以上一篇中的例子來說明,plain中配置了兩個使用者,admin和alice。
現在授權給aclie使用者topic:test的生產者和消費者的許可權,沒有限定ip。

授權使用者alice在任何ip上有topic:test的生產者許可權

./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:alice   --producer  --topic test

授權使用者alice在任何ip上有topic:test的消費者許可權,並且group是任意名字

./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --
add --allow-principal User:alice --consumer --group=* --topic test

檢視kafka叢集所有的acl授權資訊

./kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list

另外需要注意的是,由於acl資訊儲存在zookeeper中,所以在沒有啟用zookeeper許可權體系的情況下,任何使用者理論上都可以執行/kafka-acls.sh。