Zelfstudie: Apache Kafka-beleid configureren in HDInsight met Enterprise Security Package
Leer hoe u Apache Ranger-beleidsregels configureert voor Apache Kafka-clusters met Enterprise Security Package (ESP). ESP-clusters worden verbonden met een domein zodat gebruikers zich kunnen verifiëren met domeinreferenties. In deze zelfstudie maakt u twee Ranger-beleidsregels om de toegang tot de onderwerpen sales
en marketingspend
te beperken.
In deze zelfstudie leert u het volgende:
- Domeingebruikers maken.
- Ranger-beleid maken.
- Onderwerpen maken in een Kafka-cluster.
- Ranger-beleid testen.
Vereiste
Een HDInsight Kafka-cluster met Enterprise Security Package.
Verbinding maken met de beheerinterface van Apache Ranger
Maak vanuit een browser verbinding met de gebruikersinterface van Ranger Admin (UI) met behulp van de URL
https://ClusterName.azurehdinsight.net/Ranger/
. Vergeet niet omClusterName
te wijzigen in de naam van uw Kafka-cluster. Ranger-referenties zijn niet hetzelfde als hadoop-clusterreferenties. Gebruik een nieuw InPrivate-browservenster om verbinding te maken met de beheerinterface van Ranger om te voorkomen dat browsers Hadoop-referenties in de cache gebruiken.Meld u aan met uw Microsoft Entra-beheerdersreferenties. De microsoft Entra-beheerdersreferenties zijn niet hetzelfde als de referenties van het HDInsight-cluster of de SSH-referenties van het Linux HDInsight-knooppunt.
Domeingebruikers maken
Zie Een HDInsight-cluster maken met Enterprise Security Package voor meer informatie over het maken van de sales_user en marketing_user domeingebruikers. In een productiescenario komen domeingebruikers uit uw Microsoft Entra ID-tenant.
Een Ranger-beleid maken
Maak een Ranger-beleid voor sales_user en marketing_user.
Open de beheerinterface van Ranger.
Selecteer <clusternaam> onder Kafka_kafka. Er kan één vooraf geconfigureerd beleid worden vermeld.
Selecteer Nieuw beleid toevoegen en voer de volgende waarden in:
Instelling Voorgestelde waarde Policy Name HDInsight-verkoopbeleid* Onderwerp sales* Select User sales_user1 Machtigingen Publish, Consume, Create U kunt de volgende jokertekens gebruiken in de onderwerpnaam:
- Gebruik
*
om nul of meer tekens aan te geven. - Gebruik
?
om één teken aan te geven.
Wacht even tot Ranger is gesynchroniseerd met Microsoft Entra ID als een domeingebruiker niet automatisch wordt ingevuld voor Select User.
- Gebruik
Selecteer Toevoegen om het beleid op te slaan.
Selecteer Nieuw beleid toevoegen en voer de volgende waarden in:
Instelling Voorgestelde waarde Policy Name HDInsight-marketingbeleid Onderwerp marketingspend
Select User marketing_user1 Machtigingen Publish, Consume, Create Selecteer Toevoegen om het beleid op te slaan.
Onderwerpen maken in een Kafka-cluster met ESP
Twee onderwerpen, salesevents
en marketingspend
, maken:
Gebruik de volgende opdracht om een SSH-verbinding (Secure Shell) met het cluster te openen:
ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
Vervang
DOMAINADMIN
door de gebruiker met beheerdersrechten voor uw cluster die is geconfigureerd tijdens het maken van het cluster. VervangCLUSTERNAME
door de naam van uw cluster. Voer het wachtwoord voor het beheerdersaccount in wanneer hierom wordt gevraagd. Zie SSH gebruiken met HDInsight voor meer informatie over het gebruik vanSSH
met HDInsight.Gebruik de volgende opdrachten om de clusternaam op te slaan in een variabele en een hulpprogramma voor het parseren van JSON (
jq
) te installeren. Wanneer u daarom wordt gevraagd, geeft u de naam van het Kafka-cluster op.sudo apt -y install jq read -p 'Enter your Kafka cluster name:' CLUSTERNAME
Gebruik de volgende opdrachten om de Kafka-brokerhosts op te vragen. Geef desgevraagd het wachtwoord voor het beheerdersaccounts voor het cluster op.
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`; \
Voordat u doorgaat, moet u mogelijk uw ontwikkelomgeving instellen als u dit nog niet hebt gedaan. U hebt onderdelen nodig, zoals de Java JDK, Apache Maven en een SSH-client met SCP (Secure Copy). Zie De installatie-instructies voor meer informatie.
Download de voorbeelden voor aan een domein gekoppelde Apache Kafka voor producer/consumer.
Volg stap 2 en 3 onder Build en implementeer het voorbeeld in Zelfstudie: Gebruik de Producer- en Consumer-API's van Apache Kafka.
Notitie
Gebruik voor deze zelfstudie
kafka-producer-consumer.jar
onder hetDomainJoined-Producer-Consumer
project. Gebruik de optie niet onder hetProducer-Consumer
project. Dit geldt voor scenario's die niet aan een domein zijn toegevoegd.Voer de volgende opdrachten uit:
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-beleidsregels testen
Op basis van het geconfigureerde Ranger-beleid kan sales_user het onderwerp salesevents
produceren/gebruiken, maar niet het onderwerpmarketingspend
. Omgekeerd kan marketing_user het onderwerp marketingspend
produceren/gebruiken, maar niet het onderwerp salesevents
.
Open een nieuwe SSH-verbinding met het cluster. Gebruik de volgende opdracht om u als sales_user1 aan te melden:
ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
Gebruik de brokernamen uit de vorige sectie om de volgende omgevingsvariabele in te stellen:
export KAFKABROKERS=<brokerlist>:9092
Voorbeeld:
export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092
Volg stap 3 onder Build en implementeer het voorbeeld in Zelfstudie: Gebruik de Producer- en Consumer-API's van Apache Kafka om ervoor te zorgen dat deze
kafka-producer-consumer.jar
ook beschikbaar is voor sales_user.Notitie
Gebruik voor deze zelfstudie
kafka-producer-consumer.jar
het project DomainJoined-Producer-Consumer. Gebruik het project niet onder het project Producer-Consumer. Dit is bedoeld voor scenario's die niet aan een domein zijn toegevoegd.Controleer of sales_user1 naar het onderwerp
salesevents
kan produceren door de volgende opdracht uit te voeren:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
Voer de volgende opdracht uit om het onderwerp
salesevents
te gebruiken:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
Controleer of u de berichten kunt lezen.
Controleer of de sales_user1 het onderwerp
marketingspend
niet kan produceren door de volgende opdracht uit te voeren in hetzelfde SSH-venster:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
Er treedt een autorisatiefout op, maar die kunt u negeren.
U ziet dat marketing_user1 het onderwerp
salesevents
niet kan gebruiken.Herhaal de voorgaande stappen 1 tot en met 3, maar deze keer als marketing_user1.
Voer de volgende opdracht uit om het onderwerp
salesevents
te gebruiken:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
Eerdere berichten kunnen niet worden weergegeven.
Bekijk de controlegebeurtenissen voor toegang vanuit de gebruikersinterface van Ranger.
Onderwerpen in ESP Kafka maken en gebruiken met behulp van de console
Notitie
U kunt geen console-opdrachten gebruiken om onderwerpen te maken. In plaats daarvan moet u de Java-code gebruiken die in de voorgaande sectie wordt getoond. Raadpleeg Onderwerpen maken in een Kafka-cluster met ESP voor meer informatie.
Onderwerpen in ESP Kafka maken en gebruiken met behulp van de console:
Gebruik
kinit
met de gebruikersnaam van de gebruiker. Geef het wachtwoord op wanneer u daarom wordt gevraagd.kinit sales_user1
Omgevingsvariabelen instellen:
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf" export KAFKABROKERS=<brokerlist>:9092
Berichten naar het onderwerp
salesevents
produceren:/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
Berichten uit het onderwerp gebruiken
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
Onderwerpen produceren en gebruiken voor een langlopende sessie in ESP Kafka
De Kerberos-ticketcache heeft een vervaldatumlimiet. Voor een langdurige sessie gebruikt u een keytab in plaats van de ticketcache handmatig te vernieuwen.
Een keytab gebruiken in een langlopende sessie zonder kinit
:
Maak een nieuwe keytab voor uw domeingebruiker:
ktutil addent -password -p <user@domain> -k 1 -e RC4-HMAC wkt /tmp/<user>.keytab q
/home/sshuser/kafka_client_jaas.conf
maken. De regel moet de volgende regels bevatten:KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/tmp/<user>.keytab" useTicketCache=false serviceName="kafka" principal="<user@domain>"; };
Vervang door
/home/sshuser/kafka_client_jaas.conf
het onderwerp en produceerjava.security.auth.login.config
of verbruik het met behulp van de console of 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
Resources opschonen
Als u deze toepassing niet meer gaat gebruiken, verwijdert u het Kafka-cluster dat u hebt gemaakt:
- Meld u aan bij het Azure-portaal.
- Voer HDInsight in het zoekvak bovenaan in.
- Selecteer onder Services HDInsight-clusters.
- Selecteer in de lijst met HDInsight-clusters die wordt weergegeven, de ... naast het cluster dat u voor deze zelfstudie hebt gemaakt.
- Selecteer Verwijderen>Ja.
Probleemoplossing
Als kafka-producer-consumer.jar
dit niet werkt in een cluster dat lid is van een domein, moet u ervoor zorgen dat u onder het DomainJoined-Producer-Consumer
project werktkafka-producer-consumer.jar
. Gebruik de optie niet onder het Producer-Consumer
project. Dit geldt voor scenario's die niet aan een domein zijn toegevoegd.