當E-MapReduce(簡稱EMR)的DataFlow叢集沒有安裝Ranger Kafka外掛程式,或當前叢集中的Ranger Kafka外掛程式版本與實際使用的Ranger服務不相容時,您需要進行手動整合。本文介紹如何手動安裝Ranger Kafka外掛程式以及配置生效Ranger Kafka外掛程式。
前提條件
已建立DataFlow叢集。具體操作,請參見建立叢集。
叢集已啟用SASL登入認證功能。開啟功能的具體操作,請參見使用SASL登入認證Kafka服務。
重要配置SASL時,您需要確保Kafka服務內部通訊使用的使用者具有所有Resource的許可權,內部組件使用的Client使用者具有相應的許可權(建議您內部組件Client與Kafka服務使用相同的使用者)。
已建立外部Ranger服務。
已在Ranger中建立了Kafka系統管理使用者,並且系統管理使用者擁有所有Kafka Resource的許可權。
說明建議系統管理使用者的名稱為kafka。
使用限制
本文僅適用於EMR 3.45.0及以下版本(3.x系列)的EMR叢集。
由於EMR 5.x系列的Kafka不支援Ranger鑒權,所以本文檔不適用於5.x系列的EMR叢集。
操作步驟
本文樣本中的Ranger程式碼封裝以Ranger 2.1.0為例,實際情境請您根據對應的Ranger服務以及Kafka版本選取相應Ranger版本的程式碼封裝。
建議Ranger Kafka外掛程式選擇與Ranger服務相同的版本。
通過SSH方式串連叢集,詳情請參見登入叢集。
執行以下命令,下載Ranger外掛程式。
wget https://dlcdn.apache.org/ranger/2.1.0/apache-ranger-2.1.0.tar.gz您也可以從Ranger官網下載所需版本的Ranger程式碼封裝。
執行以下命令,構建Ranger Kafka外掛程式安裝包。
tar xvf apache-ranger-2.1.0.tar.gz cd apache-ranger-2.1.0 mvn clean compile package assembly:assembly install -DskipTests -Drat.skip=true cd target ls -lrt ranger-2.1.0-kafka-plugin.tar.gz上傳Ranger Kafka外掛程式安裝包到所有Kafka Broker節點的固定安裝目錄,本文安裝根目錄以
/opt/apps/ranger-plugin為例。準備指令檔install.properties,並將該檔案放置到安裝目錄
/opt/apps/ranger-plugin/ranger-2.1.0-kafka-plugin下。請您根據實際情境來配置Ranger外掛程式的安裝設定檔install.properties。
配置項說明
參數名稱
描述
是否必填
COMPONENT_INSTALL_DIR_NAME
Kafka安裝路徑。
EMR Kafka固定安裝在/opt/apps/KAFKA/kafka-current目錄。
是
POLICY_MGR_URL
Ranger策略庫URL。
根據Ranger服務的地址配置,格式可以參見install.properties設定檔。
是
REPOSITORY_NAME
使用的策略庫名稱。
根據Ranger服務的地址配置,格式可以參見install.properties設定檔。
是
XAAUDIT.SUMMARY.ENABLE
是否啟用審計。預設值為true。
是
XAAUDIT.SOLR.ENABLE
是否啟用Solr審計。預設值為true。
是
XAAUDIT.SOLR.URL
Solr地址。
根據實際情況填寫,格式可以參見install.properties設定檔。
是
XAAUDIT.SOLR.USER
Solr訪問使用者。
是
XAAUDIT.SOLR.PASSWORD
Solr訪問密碼。
是
XAAUDIT.SOLR.ZOOKEEPER
SolrCloud ZooKeeper訪問地址。
是
XAAUDIT.SOLR.FILE_SPOOL_DIR
審計日誌儲存路徑。
根據實際情況填寫,格式可以參見install.properties設定檔。
是
程式碼範例
以下為EMR 3.43.1版本的程式碼範例。
# Location of component folder COMPONENT_INSTALL_DIR_NAME=/opt/apps/KAFKA/kafka-current # # Location of Policy Manager URL # # Example: # POLICY_MGR_URL=http://policymanager.xasecure.net:6080 # 按照實際情境修改 POLICY_MGR_URL=http://master-1-1.c-590b6062db9d****.cn-hangzhou.emr.aliyuncs.com:6080 # # This is the repository name created within policy manager # # Example: # REPOSITORY_NAME=kafkadev # 按照實際情境修改 REPOSITORY_NAME=kafkadev # AUDIT configuration with V3 properties #Should audit be summarized at source XAAUDIT.SUMMARY.ENABLE=true # Enable audit logs to Solr #Example #XAAUDIT.SOLR.ENABLE=true #XAAUDIT.SOLR.URL=http://localhost:6083/solr/ranger_audits #XAAUDIT.SOLR.ZOOKEEPER= #XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/kafka/audit/solr/spool # 按照實際情境修改 XAAUDIT.SOLR.ENABLE=true XAAUDIT.SOLR.URL=http://master-1-1.c-590b6062db9d****.cn-hangzhou.emr.aliyuncs.com:6083/solr/ranger_audits XAAUDIT.SOLR.USER=NONE XAAUDIT.SOLR.PASSWORD=NONE XAAUDIT.SOLR.ZOOKEEPER=NONE XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/taihao-apps/kafka/audit/spool # Enable audit logs to Elasticsearch #Example #XAAUDIT.ELASTICSEARCH.ENABLE=true #XAAUDIT.ELASTICSEARCH.URL=localhost #XAAUDIT.ELASTICSEARCH.INDEX=audit XAAUDIT.ELASTICSEARCH.ENABLE=false XAAUDIT.ELASTICSEARCH.URL=NONE XAAUDIT.ELASTICSEARCH.USER=NONE XAAUDIT.ELASTICSEARCH.PASSWORD=NONE XAAUDIT.ELASTICSEARCH.INDEX=NONE XAAUDIT.ELASTICSEARCH.PORT=NONE XAAUDIT.ELASTICSEARCH.PROTOCOL=NONE # Enable audit logs to HDFS #Example #XAAUDIT.HDFS.ENABLE=true #XAAUDIT.HDFS.HDFS_DIR=hdfs://node-1.example.com:8020/ranger/audit # If using Azure Blob Storage #XAAUDIT.HDFS.HDFS_DIR=wasb[s]://<containername>@<accountname>.blob.core.windows.net/<path> #XAAUDIT.HDFS.HDFS_DIR=wasb://ranger_audit_cont****@my-azure-account.blob.core.windows.net/ranger/audit #XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/kafka/audit/hdfs/spool XAAUDIT.HDFS.ENABLE=false XAAUDIT.HDFS.HDFS_DIR=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/kafka/audit/hdfs/spool # Following additional propertis are needed When auditing to Azure Blob Storage via HDFS # Get these values from your /etc/hadoop/conf/core-site.xml #XAAUDIT.HDFS.HDFS_DIR=wasb[s]://<containername>@<accountname>.blob.core.windows.net/<path> XAAUDIT.HDFS.AZURE_ACCOUNTNAME=__REPLACE_AZURE_ACCOUNT_NAME XAAUDIT.HDFS.AZURE_ACCOUNTKEY=__REPLACE_AZURE_ACCOUNT_KEY XAAUDIT.HDFS.AZURE_SHELL_KEY_PROVIDER=__REPLACE_AZURE_SHELL_KEY_PROVIDER XAAUDIT.HDFS.AZURE_ACCOUNTKEY_PROVIDER=__REPLACE_AZURE_ACCOUNT_KEY_PROVIDER #Log4j Audit Provider XAAUDIT.LOG4J.ENABLE=false XAAUDIT.LOG4J.IS_ASYNC=false XAAUDIT.LOG4J.ASYNC.MAX.QUEUE.SIZE=10240 XAAUDIT.LOG4J.ASYNC.MAX.FLUSH.INTERVAL.MS=30000 XAAUDIT.LOG4J.DESTINATION.LOG4J=true XAAUDIT.LOG4J.DESTINATION.LOG4J.LOGGER=xaaudit # End of V3 properties # # Audit to HDFS Configuration # # If XAAUDIT.HDFS.IS_ENABLED is set to true, please replace tokens # that start with __REPLACE__ with appropriate values # XAAUDIT.HDFS.IS_ENABLED=true # XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd% # XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/kafka/audit # XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/kafka/audit/archive # # Example: # XAAUDIT.HDFS.IS_ENABLED=true # XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://namenode.example.com:8020/ranger/audit/%app-type%/%time:yyyyMMdd% # XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=/var/log/kafka/audit # XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=/var/log/kafka/audit/archive # XAAUDIT.HDFS.IS_ENABLED=false XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd% XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/kafka/audit XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/kafka/audit/archive XAAUDIT.HDFS.DESTINTATION_FILE=%hostname%-audit.log XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS=900 XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS=86400 XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS=60 XAAUDIT.HDFS.LOCAL_BUFFER_FILE=%time:yyyyMMdd-HHmm.ss%.log XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS=60 XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS=600 XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT=10 #Solr Audit Provider XAAUDIT.SOLR.IS_ENABLED=false XAAUDIT.SOLR.MAX_QUEUE_SIZE=1 XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000 XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits # End of V2 properties # # SSL Client Certificate Information # # Example: # SSL_KEYSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-keystore.jks # SSL_KEYSTORE_PASSWORD=none # SSL_TRUSTSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-truststore.jks # SSL_TRUSTSTORE_PASSWORD=none # # You do not need use SSL between agent and security admin tool, please leave these sample value as it is. # SSL_KEYSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-keystore.jks SSL_KEYSTORE_PASSWORD=myKeyFilePassword SSL_TRUSTSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-truststore.jks SSL_TRUSTSTORE_PASSWORD=changeit # # Custom component user # CUSTOM_COMPONENT_USER=<custom-user> # keep blank if component user is default CUSTOM_USER=kafka # # Custom component group # CUSTOM_COMPONENT_GROUP=<custom-group> # keep blank if component group is default CUSTOM_GROUP=hadoop
執行以下命令,安裝Ranger Kafka外掛程式。
sudo su - root cd /opt/apps/ranger-plugin/ranger-2.1.0-kafka-plugin ./enable-kafka-plugin.sh ./install.properties在EMR控制台修改Kafka的設定檔server.properties。
在EMR控制台Kafka服務的配置頁簽。
單擊server.properties頁簽。
修改以下參數資訊。
kafka_server_start_cmd_addition_args:在參數值中追加內容CLASSPATH=$CLASSPATH:/opt/apps/KAFKA/kafka-current/config。
說明如果EMR控制台Kafka服務不支援kafka_server_start_cmd_addition_args配置,則無法使用該方式修改CLASSPATH變數,此時您可以在Kafka Broker執行個體執行以下命令達到添加Ranger Kafka外掛程式設定檔的目的。
cd /opt/apps/KAFKA/kafka-current/libs sudo ln -s /opt/apps/KAFKA/kafka-current/config kafka-confauthorizer.class.name:修改參數值為org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer。
修改完後,儲存配置。
單擊儲存。
在彈出的對話方塊中,輸入執行原因,單擊儲存。
在EMR控制台重啟Kafka Broker服務。
在EMR控制台Kafka服務的狀態頁面,單擊KafkaBroker操作列的重啟。
在彈出的對話方塊中,輸入執行原因,單擊確定。
在彈出的確認對話方塊中,單擊確定。
相關文檔
除了使用本文的手動整合Ranger Kafka外掛程式的方式,您還可以根據實際情況決定是否使用EMR的指令碼操作功能來大量安裝部署Ranger Kafka外掛程式。具體操作,請參見手動執行指令碼。
如果您的叢集是EMR 3.45.0及以上版本,則可以在EMR控制台直接開啟Ranger許可權控制,詳情請參見配置Kafka開啟Ranger許可權控制。