Tutorial: Konfigurieren von Apache Kafka-Richtlinien in HDInsight mit dem Enterprise-Sicherheitspaket

Hier erfahren Sie, wie Sie Apache Ranger-Richtlinien für Apache Kafka-Cluster mit dem Enterprise-Sicherheitspaket (ESP) konfigurieren. Es werden Verbindungen von ESP-Clustern mit einer Domäne hergestellt, sodass Benutzer sich mit Anmeldeinformationen für die Domäne authentifizieren können. In diesem Tutorial erstellen Sie zwei Ranger-Richtlinien, um den Zugriff auf die Themen sales und marketingspend einzuschränken.

In diesem Tutorial lernen Sie Folgendes:

  • Erstellen Sie Domänenbenutzer.
  • Erstellen Sie Ranger-Richtlinien.
  • Erstellen Sie Themen in einem Kafka-Cluster.
  • Testen Sie Ranger-Richtlinien.

Voraussetzungen

Ein HDInsight-Kafka-Cluster mit dem Enterprise-Sicherheitspaket.

Herstellen einer Verbindung mit der Apache Ranger-Administratoroberfläche

  1. Stellen Sie in einem Browser mit der URL https://ClusterName.azurehdinsight.net/Ranger/ eine Verbindung mit der Ranger-Administrator-Benutzeroberfläche (UI) her. Vergessen Sie nicht, ClusterName in den Namen des Kafka-Clusters zu ändern. Die Ranger-Anmeldeinformationen sind nicht identisch mit Hadoop-Clusteranmeldeinformationen. Stellen Sie die Verbindung mit der Ranger-Administratoroberfläche in einem neuen InPrivate-Browserfenster her, um zu verhindern, dass der Browser zwischengespeicherte Hadoop-Anmeldeinformationen verwendet.

  2. Melden Sie sich mit Ihren Microsoft Entra-Administratoranmeldeinformationen an. Die Microsoft Entra-Administratoranmeldeinformationen sind nicht identisch mit HDInsight-Clusteranmeldeinformationen oder Linux-HDInsight-Knoten-SSH-Anmeldeinformationen.

    Screenshot that shows the HDInsight Apache Ranger Admin UI.

Erstellen von Domänenbenutzern

Besuchen Sie Erstellen eines HDInsight-Clusters mit Enterprise-Sicherheitspaket, um zu erfahren, wie Sie die Domänenbenutzer sales_user und marketing_user erstellen. In einem Produktionsszenario kommen die Domänenbenutzer von Ihrem Microsoft Entra ID-Mandanten.

Erstellen einer Ranger-Richtlinie

Erstellen Sie eine Ranger-Richtlinie für sales_user und marketing_user.

  1. Öffnen Sie die Ranger-Administratoroberfläche.

  2. Wählen Sie unter Kafka den Wert <ClusterName>_kafka aus. Möglicherweise wird eine vorkonfigurierte Richtlinie aufgelistet.

  3. Wählen Sie Neue Richtlinie hinzufügen aus, und geben Sie die folgenden Werte ein:

    Einstellung Vorgeschlagener Wert
    Richtlinienname hdi sales*-Richtlinie
    Thema sales*
    Benutzer auswählen sales_user1
    Berechtigungen Veröffentlichen, Nutzen, Erstellen

    Die folgenden Platzhalter können im Themennamen enthalten sein:

    • * weist auf null oder mehr Vorkommen von Zeichen hin.
    • ? weist auf ein einzelnes Zeichen hin.

    Screenshot that shows the Apache Ranger Admin UI Create Policy1.

    Warten Sie kurz, bis Ranger mit Microsoft Entra ID synchronisiert ist, wenn unter Benutzer auswählen nicht automatisch ein Domänenbenutzer eingetragen wird.

  4. Wählen Sie Hinzufügen aus, um die Richtlinie zu speichern.

  5. Wählen Sie Neue Richtlinie hinzufügen aus, und geben Sie die folgenden Werte ein:

    Einstellung Vorgeschlagener Wert
    Richtlinienname hdi marketing-Richtlinie
    Thema marketingspend
    Benutzer auswählen marketing_user1
    Berechtigungen Veröffentlichen, Nutzen, Erstellen

    Screenshot that shows the Apache Ranger Admin UI Create Policy2.

  6. Wählen Sie Hinzufügen aus, um die Richtlinie zu speichern.

Erstellen von Themen in einem Kafka-Cluster mit ESP

So erstellen Sie zwei Themen, salesevents und marketingspend:

  1. Führen Sie folgenden Befehl aus, um eine SSH-Verbindung (Secure Shell) mit dem Cluster zu öffnen:

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    Ersetzen Sie DOMAINADMIN durch den Administratorbenutzer für Ihr Cluster, das Sie während der Clustererstellung konfiguriert haben. Ersetzen Sie CLUSTERNAME durch den Namen Ihres Clusters. Geben Sie bei entsprechender Aufforderung das Kennwort für das Administratorbenutzerkonto ein. Weitere Informationen zum Verwenden von SSH mit HDInsight finden Sie unter Verwenden von SSH mit HDInsight.

  2. Um den Clusternamen in einer Variablen zu speichern und ein JSON-Analysehilfsprogramm (jq) zu installieren, verwenden Sie die folgenden Befehle. Geben Sie bei entsprechender Aufforderung den Namen des Kafka-Clusters ein.

    sudo apt -y install jq
    read -p 'Enter your Kafka cluster name:' CLUSTERNAME
    
  3. Um die Kafka-Brokerhosts abzurufen, verwenden Sie die folgenden Befehle. Geben Sie bei entsprechender Aufforderung das Kennwort des Administratorkontos für den Cluster ein.

    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`; \
    

    Bevor Sie fortfahren müssen Sie unter Umständen Ihre Entwicklungsumgebung einrichten, falls Sie dies nicht bereits getan haben. Sie benötigen Komponenten wie Java JDK, Apache Maven und einen SSH-Client mit Secure Copy (SCP). Weitere Informationen finden Sie unter Einrichtungsanweisungen.

  4. Laden Sie die Apache Kafka-Producer/Consumer-Beispiele mit Domäneneinbindung herunter.

  5. Führen Sie unter Tutorial: Verwenden der Apache Kafka Producer- und Consumer-APIs die Schritte 2 und 3 im Abschnitt Erstellen und Bereitstellen des Beispiels aus.

    Hinweis

    Verwenden Sie für dieses Tutorial kafka-producer-consumer.jar im Projekt DomainJoined-Producer-Consumer. Verwenden Sie das Projekt nicht unter dem-Projekt Producer-Consumer, das sich für Szenarien eignet, die nicht in Domänen eingebunden sind.

  6. Führen Sie die folgenden Befehle aus:

    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
    

Testen der Ranger-Richtlinien

Basierend auf den konfigurierten Ranger-Richtlinien kann sales_user das Thema salesevents produzieren/nutzen, jedoch nicht das Thema marketingspend. Umgekehrt kann marketing_user das Thema marketingspend produzieren/nutzen, jedoch nicht das Thema salesevents.

  1. Stellen Sie eine neue SSH-Verbindung mit dem Cluster her. Führen Sie den folgenden Befehl aus, um sich als sales_user1 anzumelden:

    ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Verwenden Sie die Broker-Namen aus dem vorherigen Abschnitt, um die folgenden Umgebungsvariable festzulegen:

    export KAFKABROKERS=<brokerlist>:9092
    

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

  3. Führen Sie Schritt 3 im Abschnitt Erstellen und Bereitstellen des Beispiels unter Tutorial: Verwenden der Apache Kafka Producer- und Consumer-APIs aus, um sicherzustellen, dass kafka-producer-consumer.jar auch für sales_user verfügbar ist.

    Hinweis

    Verwenden Sie für dieses Tutorial kafka-producer-consumer.jar unter dem Projekt „DomainJoined-Producer-Consumer“. Verwenden Sie nicht das Projekt unter dem Projekt „Producer-Consumer“, das sich für Szenarien eignet, die nicht in Domänen eingebunden sind.

  4. Überprüfen Sie, ob sales_user1 für das Thema salesevents produzieren kann. Führen Sie dazu den folgenden Befehl aus:

    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. Führen Sie den folgenden Befehl zum Nutzen des Themas salesevents aus:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
    

    Stellen Sie sicher, dass Sie die Nachrichten lesen können.

  6. Vergewissern Sie sich, dass sales_user1 nicht das Thema marketingspend produzieren kann, indem Sie im gleichen SSH-Fenster den folgenden Befehl ausführen:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
    

    Ein Autorisierungsfehler tritt auf und kann ignoriert werden.

  7. Beachten Sie, dass marketing_user1 das Thema salesevents nicht nutzen kann.

    Wiederholen Sie die vorherigen Schritte 1 bis 3, aber dieses Mal als marketing_user1.

    Führen Sie den folgenden Befehl zum Nutzen des Themas salesevents aus:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
    

    Vorherige Meldungen werden nicht angezeigt.

  8. Zeigen Sie die Überwachungszugriffsereignisse in der Ranger-Benutzeroberfläche an.

    Screenshot that shows the Ranger UI policy audit access events.

Produzieren und Nutzen von Themen in Kafka mit ESP über die Konsole

Hinweis

Zum Erstellen von Themen können keine Konsolenbefehle verwendet werden. Stattdessen müssen Sie den im vorherigen Abschnitt gezeigten Java-Code verwenden. Weitere Informationen finden Sie unter Erstellen von Themen in einem Kafka-Cluster mit ESP.

Zum Produzieren und Nutzen von Themen in Kafka mit ESP über die Konsole gehen Sie folgendermaßen vor:

  1. Verwenden Sie kinit mit dem Benutzernamen. Geben Sie bei Aufforderung das Kennwort ein.

    kinit sales_user1
    
  2. Legen Sie Umgebungsvariablen fest:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. Produzieren Sie Meldungen für das Thema salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. Nutzen Sie Meldungen aus dem Thema salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
    

Produzieren und Nutzen von Themen für zeitintensive Sitzungen in ESP Kafka

Der Kerberos-Ticketcache verfügt über eine Ablaufbeschränkung. Für zeitintensive Sitzungen verwenden Sie besser die Schlüsseltabelle anstatt den Ticketcache manuell zu verlängern.

So verwenden Sie die Schlüsseltabelle in zeitintensiven Sitzungen ohne kinit:

  1. Erstellen Sie eine neue Schlüsseltabelle für Ihren Domänenbenutzer:

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. Erstellen Sie /home/sshuser/kafka_client_jaas.conf. Die Datei sollte folgende Zeilen enthalten:

    KafkaClient {
     com.sun.security.auth.module.Krb5LoginModule required
     useKeyTab=true
     storeKey=true
     keyTab="/tmp/<user>.keytab"
     useTicketCache=false
     serviceName="kafka"
     principal="<user@domain>";
    };
    
  3. Ersetzen Sie java.security.auth.login.config durch /home/sshuser/kafka_client_jaas.conf, und erstellen oder nutzen Sie Themen mithilfe der Konsole oder 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
    

Bereinigen von Ressourcen

Wenn Sie diese Anwendung nicht mehr benötigen, löschen Sie das erstellte Kafka-Cluster, das Sie erstellt haben:

  1. Melden Sie sich beim Azure-Portal an.
  2. Geben Sie oben im Feld Suchen den Suchbegriff HDInsight ein.
  3. Wählen Sie unter Dienste die Option HDInsight-Cluster aus.
  4. Klicken Sie in der daraufhin angezeigten Liste mit den HDInsight-Clustern neben dem Cluster, den Sie für dieses Tutorial erstellt haben, auf die Auslassungspunkte ( ... ).
  5. Wählen Sie Löschen>Ja.

Problembehandlung

Wenn kafka-producer-consumer.jar nicht in einem in eine Domäne eingebundenen Cluster funktioniert, stellen Sie sicher, dass Sie kafka-producer-consumer.jar unter dem Projekt DomainJoined-Producer-Consumer verwenden. Verwenden Sie das Projekt nicht unter dem-Projekt Producer-Consumer, das sich für Szenarien eignet, die nicht in Domänen eingebunden sind.

Nächste Schritte