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
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.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.
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.
Öffnen Sie die Ranger-Administratoroberfläche.
Wählen Sie unter Kafka den Wert <ClusterName>_kafka aus. Möglicherweise wird eine vorkonfigurierte Richtlinie aufgelistet.
Wählen Sie Neue Richtlinie hinzufügen aus, und geben Sie die folgenden Werte ein:
Einstellung Vorgeschlagener Wert Richtlinienname HDInsight 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.
Warten Sie kurz, bis Ranger mit Microsoft Entra ID synchronisiert ist, wenn unter Benutzer auswählen nicht automatisch ein Domänenbenutzer eingetragen wird.
Wählen Sie Hinzufügen aus, um die Richtlinie zu speichern.
Wählen Sie Neue Richtlinie hinzufügen aus, und geben Sie die folgenden Werte ein:
Einstellung Vorgeschlagener Wert Richtlinienname HDInsight-Marketingrichtlinie Thema marketingspend
Benutzer auswählen marketing_user1 Berechtigungen Veröffentlichen, Nutzen, Erstellen 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
:
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 SieCLUSTERNAME
durch den Namen Ihres Clusters. Geben Sie bei entsprechender Aufforderung das Kennwort für das Administratorbenutzerkonto ein. Weitere Informationen zum Verwenden vonSSH
mit HDInsight finden Sie unter Verwenden von SSH mit HDInsight.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
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.
Laden Sie die Apache Kafka-Producer/Consumer-Beispiele mit Domäneneinbindung herunter.
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 ProjektDomainJoined-Producer-Consumer
. Verwenden Sie das Projekt nicht unter dem-ProjektProducer-Consumer
, das sich für Szenarien eignet, die nicht in Domänen eingebunden sind.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
.
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
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
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.Ü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
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.
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.
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.
Zeigen Sie die Überwachungszugriffsereignisse in der Ranger-Benutzeroberfläche an.
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:
Verwenden Sie
kinit
mit dem Benutzernamen. Geben Sie bei Aufforderung das Kennwort ein.kinit sales_user1
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
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
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
:
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
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>"; };
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:
- Melden Sie sich beim Azure-Portal an.
- Geben Sie oben im Feld Suchen den Suchbegriff HDInsight ein.
- Wählen Sie unter Dienste die Option HDInsight-Cluster aus.
- 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 ( ... ).
- 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.