共用方式為


教學課程:使用企業安全性套件在 HDInsight 中設定 Apache Kafka 原則

了解如何對企業安全性套件 (ESP) Apache Kafka 叢集設定 Apache Ranger 原則。 ESP 叢集連線到網域,讓使用者使用網域認證進行驗證。 在此教學課程中,您會建立兩個 Ranger 原則來限制 salesmarketingspend 主題的存取權。

在本教學課程中,您會了解如何:

  • 建立網域使用者。
  • 建立 Ranger 原則。
  • 在 Kafka 叢集中建立主題。
  • 測試 Ranger 原則。

必要條件

使用企業安全性套件的 HDInsight Kafka 叢集

連線到 Apache Ranger 系統管理 UI

  1. 從瀏覽器中,使用 URL https://ClusterName.azurehdinsight.net/Ranger/ 連線到 Ranger 管理使用者介面 (UI)。 請記得將 ClusterName 變更為 Kafka 叢集的名稱。 Ranger 認證與 Hadoop 叢集認證並非相同。 若要避免瀏覽器使用快取的 Hadoop 認證,請使用新的 InPrivate 瀏覽器視窗連線至 Ranger 管理員 UI。

  2. 使用您的 Microsoft Entra 管理員認證登入。 Microsoft Entra 管理員認證與 HDInsight 叢集認證或 Linux HDInsight 節點 SSH 認證並不相同。

    顯示 HDInsight Apache Ranger 管理員 UI 的螢幕快照。

建立網域使用者

如需了解如何建立 sales_usermarketing_user 網域使用者,請參閱使用企業安全性套件建立 HDInsight 叢集。 在生產情節中,網域使用者來自 Microsoft Entra ID 租用戶。

建立 Ranger 原則

sales_usermarketing_user 建立 Ranger 原則。

  1. 開啟 Ranger 管理員 UI

  2. Kafka 底下,選取 <ClusterName>_kafka。 可能會列出一個預先設定的原則。

  3. 選取 [新增原則],並輸入下列值︰

    設定 建議的值
    原則名稱 HDInsight 銷售* 原則
    主題 銷售*
    選取使用者 sales_user1
    權限 發佈、取用、建立

    主題名稱可以包含下列萬用字元:

    • * 表示出現零次以上的字元。
    • ? 表示單一字元。

    顯示 Apache Ranger 系統管理 UI 建立原則 1 的螢幕快照。

    如果 [選取使用者] 的網域使用者未自訂填入,請稍後,讓 Ranger 與 Microsoft Entra ID 同步處理。

  4. 選取 [新增] 以儲存規則。

  5. 選取 [新增原則],並輸入下列值︰

    設定 建議的值
    原則名稱 HDInsight 營銷原則
    主題 marketingspend
    選取使用者 marketing_user1
    權限 發佈、取用、建立

    顯示 Apache Ranger 系統管理 UI 建立原則 2 的螢幕快照。

  6. 選取 [新增] 以儲存規則。

在 Kafka 叢集中使用 ESP 建立主題

建立兩個主題,saleseventsmarketingspend

  1. 下列命令可用來開啟與叢集的安全殼層 (SSH) 連線:

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    DOMAINADMIN 取代為叢集建立期間設定的叢集管理使用者。 將 CLUSTERNAME 取代為您的叢集名稱。 出現提示時,請輸入管理使用者帳戶的密碼。 如需搭配 HDInsight 使用 SSH 的詳細資訊,請參閱搭配 HDInsight 使用 SSH

  2. 下列命令可用來將叢集名稱儲存到變數,並安裝 JSON 剖析公用程式 jq。 出現提示時,請輸入 Kafka 叢集名稱。

    sudo apt -y install jq
    read -p 'Enter your Kafka cluster name:' CLUSTERNAME
    
  3. 下列命令可用來取得 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 用戶端等元件。 如需詳細資訊,請參閱設定指示

  4. 下載已加入 Apache Kafka 網域的產生者/取用者範例

  5. 請遵循教學課程:使用 Apache Kafka Producer 和 Consumer API 中的建置和部署範例下方的步驟 2 和 3。

    注意

    針對本教學課程,請使用 DomainJoined-Producer-Consumer 專案底下的 kafka-producer-consumer.jar。 請勿使用 Producer-Consumer 專案底下的專案,這是針對未加入網域的案例。

  6. 執行下列命令:

    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

  1. 對於叢集開啟新的 SSH 連線。 下列命令可用來以 sales_user1 身分登入:

    ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. 上一節中的訊息代理程式名稱可用來設定下列環境變數:

    export KAFKABROKERS=<brokerlist>:9092
    

    範例: export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092

  3. 請遵循教學課程:使用 Apache Kafka Producer 和 Consumer API 中的建置和部署範例下方的步驟 3,確保 kafka-producer-consumer.jar 也可供 sales_user 使用。

    注意

    在本教學課程中,請使用 "DomainJoined-Producer-Consumer" 專案底下的 kafka-producer-consumer.jar。 請勿使用 "Producer-Consumer" 專案底下的專案,這是針對未加入網域的案例。

  4. 藉由執行下列命令,確認 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
    
  5. 執行下列命令可用來取用主題 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
    

    請確認您能夠讀取訊息。

  6. 藉由在相同 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
    

    發生授權錯誤,可予以忽略。

  7. 請注意,無法從主題 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
    

    先前的訊息不會出現。

  8. 從 Ranger UI 檢視稽核存取事件。

    顯示 Ranger UI 原則稽核存取事件的螢幕快照。

使用主控台產生和取用 ESP Kafka 中的主題

注意

您無法使用主控台命令來建立主題。 相反地,您必須使用上一節示範的 Java 程式碼。 如需詳細資訊,請參閱在 Kafka 叢集中使用 ESP 建立主題

若要使用主控台產生和取用 ESP Kafka 中的主題:

  1. 使用 kinit 與使用者的使用者名稱。 請在系統提示時輸入密碼。

    kinit sales_user1
    
  2. 設定環境變數:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. 產生訊息至主題 salesevents

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. 取用主題 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

  1. 為您的網域使用者建立新的金鑰表:

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. 建立 /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>";
    };
    
  3. 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 叢集:

  1. 登入 Azure 入口網站
  2. 在頂端的 [搜尋] 方塊中,輸入 HDInsight
  3. 在 [服務] 底下,選取 [HDInsight 叢集]
  4. 從出現的 HDInsight 叢集清單中,在您為本教學課程建立的叢集旁選取 [...]
  5. 選取 [刪除]>[是]

疑難排解

如果 kafka-producer-consumer.jar 無法在已加入網域的叢集中運作,請確定您在 DomainJoined-Producer-Consumer 專案下使用 kafka-producer-consumer.jar。 請勿使用 Producer-Consumer 專案底下的專案,這是針對未加入網域的案例。

下一步