基於ranger的kafka許可權控制

語言: CN / TW / HK

上一篇文章講到了kafka中的ACL,也提到了是以外掛式的形式實現的,本文就來聊聊基於ranger的kafka訪問控制。

【ranger外掛安裝】


要使用ranger外掛,首先需要對ranger的kafka外掛包進行解壓縮,然後進入解壓縮後的目錄,修改安裝的配置檔案`install.properties`,具體修改的配置項包括:

# 外掛安裝位置(通常就是kafka的安裝位置)
COMPONENT_INSTALL_DIR_NAME=/opt/kafka
# ranger服務端的地址(拉取策略的URL)
POLICY_MGR_URL=http://192.168.3.31:6080
# kafka服務的名稱
REPOSITORY_NAME=hncscwc-kafka
CUSTOM_USER=kafka
CUSTOM_GROUP=kafka

注:CUSTOM_USER和CUSTOM_GROUP是執行指令碼的系統使用者及使用者組,也就是說對應的使用者與使用者組必須存在。

完成配置後,執行`enable-kafka-plugin.sh`指令碼,將ranger外掛需要的配置檔案及jar包拷貝到kafka安裝目錄的正確位置中。

對於ranger也開啟kerberos的場景下,即外掛需要通過https的方式從ranger服務端拉取策略。

可以先直接修改外掛目錄下`install/conf.templates/enable/ranger-kafka-secruity-changes.cfg`檔案中的配置項`ranger.plugin.kafka.policy.rest.ssl.config.file`的值,例如:

ranger.plugin.kafka.policy.rest.ssl.config.file    %REST_SSL_CONFIG_FILE_PATH% mod create-if-not-exists

同樣在上面的install.properties中也新增對應的配置項:

# https的配置資訊
REST_SSL_CONFIG_FILE_PATH=/opt/kafka/config/ranger-policymgr-ssl.xml

這樣,執行完`enable-kafka-plugin.sh`後,配置檔案`ranger-policymgr-ssl.xml`會拷貝到正確的位置中,同時配置檔案`ranger-kafka-security.xml`中對應的配置項的值也是正確的。

<property>
    <name>ranger.plugin.kafka.policy.rest.ssl.config.file</name>
    <value>/opt/kafka/config/ranger-policymgr-ssl.xml</value>
    <description>
        Path to the file containing SSL details to contact Ranger Admin
    </description>
</property>

否則,需要手動修改該配置檔案的值(預設值為`/etc/kafka/conf/ranger-policymgr-ssl.xml`),或者將配置檔案拷貝到對應路徑中

最後,還需要修改配置檔案`server.properties`,指定鑑權類為ranger外掛中對應的實現類。

authorizer.class.name=org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer

完成這些操作後,重啟kafka服務程。

【服務端配置】


這裡主要就是新增一個kafka的服務,如下圖所示

 

對於ranger本身也開啟kerberos的情況下,需要增加配置項`policy.download.auth.users`並正確配置kafka服務使用的kerberos的使用者。

之後重啟kafka服務後,在ranger的管理介面就可以看到對應的外掛模組來拉取策略的日誌資訊了。

配置注意事項:

  • 配置檔案載入失敗問題

按照上面的步驟配置操作後,重啟服務後可能有如下的錯誤資訊:

[2022-08-15 19:25:35,779] ERROR addResourceIfReadable(ranger-kafka-audit.xml): couldn't find resource file location (org.apache.ranger.authorization.hadoop.config.RangerConfiguration)
[2022-08-15 19:25:35,781] ERROR addResourceIfReadable(ranger-kafka-security.xml): couldn't find resource file location (org.apache.ranger.authorization.hadoop.config.RangerConfiguration)
[2022-08-15 19:25:35,781] ERROR addResourceIfReadable(ranger-kafka-policymgr-ssl.xml): couldn't find resource file location (org.apache.ranger.authorization.hadoop.config.RangerConfiguration)
[2022-08-15 19:25:35,783] INFO PolicyEngineOptions: { evaluatorType: auto, evaluateDelegateAdminOnly: false, disableContextEnrichers: false, disableCustomConditions: false, disableTagPolicyEvaluation: false, enableTagEnricherWithLocalRefresher: false, disableTrieLookupPrefilter: false, optimizeTrieForRetrieval: false, cacheAuditResult: false } (org.apache.ranger.authorization.hadoop.config.RangerPluginConfig)
[2022-08-15 19:25:35,804] INFO Calling plugin.init() (org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer)

出現該錯誤意味著沒有正確載入到外掛所需要的配置檔案,這樣也就無法正確到ranger服務端完成策略資訊的拉取。

之所以會出現這個錯誤,是因為外掛中的配置類`RangerConfiguration`實際上是繼承了hadoop中的配置類`org.apache.hadoop.conf.Configuration`,添加了對應的配置檔案(資源後),預設會從CLASSPATH指定的路徑中查詢配置檔案並讀取,而實際kafka啟動時的CLASSPATH並未指定配置檔案的路徑,因此會存在這樣的錯誤資訊。

可以通過在啟動指令碼`kafka-run-class.sh`指令碼中給CLASSPATH新增對應的路徑即可

  • ranger開啟kerberos情況下,客戶端拉取策略失敗問題

ranger服務端也開啟kerberos的情況下,外掛去拉取策略的方式不再是http,而是https。而外掛中的rest客戶端延用hadoop中的機制,從配置檔案中讀取`hadoop.security.authentication`的認證方式以決定使用http還是https。而這個配置項是存在於配置檔案`core-site.xml`中的。

未正確配置的話,會有如下錯誤:

[2022-08-15 19:37:10,883] WARN Error getting policies. secureMode=false, user=kafka/hdp-kafka-hdp-kafka-0@BIGDATA.COM (auth:KERBEROS), response={"httpStatusCode":400,"statusCode":0}, serviceName=hncscwc-kafka (org.apache.ranger.admin.client.RangerAdminRESTClient)

因此,需要手動在kafka服務的配置檔案目錄下,新增`core-site.xml`配置檔案,並增加對應的配置項:

<configuration>
    <property>
        <name>hadoop.security.authorization</name>
        <value>true</value>
    </property>
    <property>
        <name>hadoop.security.authentication</name>
        <value>kerberos</value>
    </property>
</configuration>

【外掛使用與驗證】


在ranger服務端可以看到外掛成功拉取到策略後,剩下的就是策略的配置與具體的驗證工作了。

對於策略的配置,也就是對不同的資源,設定不同使用者在不同IP下的可操作許可權,對我們而言,最常見的還是topic的生產消費了,新增允許指定使用者生產消費的策略如下所示:

在服務端通過命令進行生產消費的驗證如下所示:

使用過程中,也還有一些需要注意的地方。例如:topic中的生產和消費操作,這實際上對應於原生許可權中的write+describe和read+describe因此拒絕其中的一個操作而允許另外一個操作,其實連帶describe許可權也就拒絕了,那麼實際上兩個操作都不能正確執行(不管生產或消費都需要describe操作許可權);另外,topic中的消費許可權不像原生命令中"--consumer"的操作會同時設定topic和consumergroup的許可權,ranger中需要分別進行許可權的設定才行。

【總結】


本文介紹了kafka中如何正確配置ranger外掛,並基於ranger進行許可權控制,以及安裝部署使用中容易踩坑的地方。

 

好了,這就是本文的全部內容,如果覺得本文對您有幫助,請多多轉發,也歡迎加我微信交流~

本文分享自微信公眾號 - hncscwc(gh_383bc7486c1a)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。