教學課程:使用企業安全性套件在 HDInsight 中設定 Apache Kafka 原則
了解如何對企業安全性套件 (ESP) Apache Kafka 叢集設定 Apache Ranger 原則。 ESP 叢集連線到網域,讓使用者使用網域認證進行驗證。 在此教學課程中,您會建立兩個 Ranger 原則來限制 sales
和 marketingspend
主題的存取權。
在本教學課程中,您會了解如何:
- 建立網域使用者。
- 建立 Ranger 原則。
- 在 Kafka 叢集中建立主題。
- 測試 Ranger 原則。
必要條件
使用企業安全性套件的 HDInsight Kafka 叢集。
連線到 Apache Ranger 系統管理 UI
從瀏覽器中,使用 URL
https://ClusterName.azurehdinsight.net/Ranger/
連線到 Ranger 管理使用者介面 (UI)。 請記得將ClusterName
變更為 Kafka 叢集的名稱。 Ranger 認證與 Hadoop 叢集認證並非相同。 若要避免瀏覽器使用快取的 Hadoop 認證,請使用新的 InPrivate 瀏覽器視窗連線至 Ranger 管理員 UI。使用您的 Microsoft Entra 管理員認證登入。 Microsoft Entra 管理員認證與 HDInsight 叢集認證或 Linux HDInsight 節點 SSH 認證並不相同。
建立網域使用者
如需了解如何建立 sales_user 和 marketing_user 網域使用者,請參閱使用企業安全性套件建立 HDInsight 叢集。 在生產情節中,網域使用者來自 Microsoft Entra ID 租用戶。
建立 Ranger 原則
為 sales_user 和 marketing_user 建立 Ranger 原則。
開啟 Ranger 管理員 UI。
在 Kafka 底下,選取 <ClusterName>_kafka。 可能會列出一個預先設定的原則。
選取 [新增原則],並輸入下列值︰
設定 建議的值 原則名稱 HDInsight 銷售* 原則 主題 銷售* 選取使用者 sales_user1 權限 發佈、取用、建立 主題名稱可以包含下列萬用字元:
*
表示出現零次以上的字元。?
表示單一字元。
如果 [選取使用者] 的網域使用者未自訂填入,請稍後,讓 Ranger 與 Microsoft Entra ID 同步處理。
選取 [新增] 以儲存規則。
選取 [新增原則],並輸入下列值︰
設定 建議的值 原則名稱 HDInsight 營銷原則 主題 marketingspend
選取使用者 marketing_user1 權限 發佈、取用、建立 選取 [新增] 以儲存規則。
在 Kafka 叢集中使用 ESP 建立主題
建立兩個主題,salesevents
和 marketingspend
:
下列命令可用來開啟與叢集的安全殼層 (SSH) 連線:
ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
將
DOMAINADMIN
取代為叢集建立期間設定的叢集管理使用者。 將CLUSTERNAME
取代為您的叢集名稱。 出現提示時,請輸入管理使用者帳戶的密碼。 如需搭配 HDInsight 使用SSH
的詳細資訊,請參閱搭配 HDInsight 使用 SSH。下列命令可用來將叢集名稱儲存到變數,並安裝 JSON 剖析公用程式
jq
。 出現提示時,請輸入 Kafka 叢集名稱。sudo apt -y install jq read -p 'Enter your Kafka cluster name:' CLUSTERNAME
下列命令可用來取得 Kafka 訊息代理程式主機。 出現提示時,輸入叢集管理員帳戶的密碼。
export KAFKABROKERS=`curl -sS -u admin -G https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/services/KAFKA/components/KAFKA_BROKER | jq -r '["\(.host_components[].HostRoles.host_name):9092"] | join(",")' | cut -d',' -f1,2`; \
繼續操作之前,您可能需要設定開發環境 (如果您尚未設定)。 您需要 Java JDK、Apache Maven 和具有 Secure Copy (SCP) 的 SSH 用戶端等元件。 如需詳細資訊,請參閱設定指示。
請遵循教學課程:使用 Apache Kafka Producer 和 Consumer API 中的建置和部署範例下方的步驟 2 和 3。
注意
針對本教學課程,請使用
DomainJoined-Producer-Consumer
專案底下的kafka-producer-consumer.jar
。 請勿使用Producer-Consumer
專案底下的專案,這是針對未加入網域的案例。執行下列命令:
java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar create salesevents $KAFKABROKERS java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar create marketingspend $KAFKABROKERS
測試 Ranger 原則
根據設定的 Ranger 原則,sales_user 可以產生/取用主題 salesevents
,但是無法產生/取用主題 marketingspend
。 相反地,marketing_user 可以產生/取用主題 marketingspend
,而無法產生/取用主題 salesevents
。
對於叢集開啟新的 SSH 連線。 下列命令可用來以 sales_user1 身分登入:
ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
上一節中的訊息代理程式名稱可用來設定下列環境變數:
export KAFKABROKERS=<brokerlist>:9092
範例:
export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092
請遵循教學課程:使用 Apache Kafka Producer 和 Consumer API 中的建置和部署範例下方的步驟 3,確保
kafka-producer-consumer.jar
也可供 sales_user 使用。注意
在本教學課程中,請使用 "DomainJoined-Producer-Consumer" 專案底下的
kafka-producer-consumer.jar
。 請勿使用 "Producer-Consumer" 專案底下的專案,這是針對未加入網域的案例。藉由執行下列命令,確認 sales_user1 可產生至主題
salesevents
:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
執行下列命令可用來取用主題
salesevents
:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
請確認您能夠讀取訊息。
藉由在相同 SSH 視窗中執行下列命令,確認 sales_user1 無法產生至主題
marketingspend
:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
發生授權錯誤,可予以忽略。
請注意,無法從主題
salesevents
取用 marketing_user1。重複上述步驟 1 到 3,但這次是 marketing_user1。
執行下列命令可用來取用主題
salesevents
:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
先前的訊息不會出現。
從 Ranger UI 檢視稽核存取事件。
使用主控台產生和取用 ESP Kafka 中的主題
注意
您無法使用主控台命令來建立主題。 相反地,您必須使用上一節示範的 Java 程式碼。 如需詳細資訊,請參閱在 Kafka 叢集中使用 ESP 建立主題。
若要使用主控台產生和取用 ESP Kafka 中的主題:
使用
kinit
與使用者的使用者名稱。 請在系統提示時輸入密碼。kinit sales_user1
設定環境變數:
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf" export KAFKABROKERS=<brokerlist>:9092
產生訊息至主題
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
取用主題
salesevents
中的訊息:/usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
產生和取用 ESP Kafka 中的主題以用於長時間執行的工作階段
Kerberos 票證快取有到期限制。 若是長時間執行的工作階段,請使用金鑰表,而不是手動更新票證快取。
若要在長時間執行的工作階段中使用金鑰表,而不使用 kinit
:
為您的網域使用者建立新的金鑰表:
ktutil addent -password -p <user@domain> -k 1 -e RC4-HMAC wkt /tmp/<user>.keytab q
建立
/home/sshuser/kafka_client_jaas.conf
。 應該具有下列幾行:KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/tmp/<user>.keytab" useTicketCache=false serviceName="kafka" principal="<user@domain>"; };
將
java.security.auth.login.config
取代為/home/sshuser/kafka_client_jaas.conf
,然後使用主控台或 API 產生或取用主題:export KAFKABROKERS=<brokerlist>:9092 # console tool export KAFKA_OPTS="-Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf" /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT # API java -jar -Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS java -jar -Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
清除資源
如果您不打算繼續使用此應用程式,請刪除所建立的 Kafka 叢集:
- 登入 Azure 入口網站。
- 在頂端的 [搜尋] 方塊中,輸入 HDInsight。
- 在 [服務] 底下,選取 [HDInsight 叢集]。
- 從出現的 HDInsight 叢集清單中,在您為本教學課程建立的叢集旁選取 [...]。
- 選取 [刪除]>[是]。
疑難排解
如果 kafka-producer-consumer.jar
無法在已加入網域的叢集中運作,請確定您在 DomainJoined-Producer-Consumer
專案下使用 kafka-producer-consumer.jar
。 請勿使用 Producer-Consumer
專案底下的專案,這是針對未加入網域的案例。