kafka kerberos 認證訪問與非認證訪問共存下的ACL問題

在一個正在運行的kafka集羣中添加kerberos認證和ACL權限控制,同時保證以前所有的producer\consumer服務不中斷

解決方式: 使kafka集羣監聽兩個端口,一個爲無認證連接,另一個爲kerberos的認證連接

這時候在配置ACL的時候出了問題:

假如我以kerberos認證的方式連接kafka集羣,那麼我的用戶名是principal的primary部分。例如principal是  kafka/[email protected] ,那麼我的用戶名就是kafka。 這時候我只要給kafka這個用戶配置相應的權限就可以了。

但是當我以非認證的方式連接kafka集羣的時候,我會得到以下的錯誤:

[WARN ]16:06:55,440, [Class]NetworkClient, Error while fetching metadata with correlation id 1 : {test=UNKNOWN_TOPIC_OR_PARTITION}
org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test]


或者在console-producer中的錯誤如下:

[2017-08-22 15:17:27,576] WARN Error while fetching metadata with correlation id 2 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2017-08-22 15:17:27,685] WARN Error while fetching metadata with correlation id 4 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2017-08-22 15:17:27,787] WARN Error while fetching metadata with correlation id 6 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2017-08-22 15:17:27,890] WARN Error while fetching metadata with correlation id 7 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2017-08-22 15:17:27,993] WARN Error while fetching metadata with correlation id 8 : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)


原因: 一旦爲kerberos的用戶針對某個資源(比如topic)配置ACL之後,那麼對於非認證方式訪問的時候因爲沒有權限所以訪問不到對應的數據。

解決方法: 將kafka集羣的日誌設爲debug級別後重啓,可以看到非認證方式訪問kafka集羣時的用戶爲ANONYMOUS


                  1、給 ANONYMOUS配置相應的權限即可

                  2、每一個topic都要爲 ANONYMOUS設置權限畢竟不方便, 可以將ANONYMOUS設爲super.users


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