kafka topic acl授權
阿新 • • 發佈:2019-01-02
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。