Självstudie: Konfigurera Apache Kafka-principer i HDInsight med Enterprise Security Package
Lär dig hur du konfigurerar Apache Ranger-principer för Apache Kafka-kluster med Enterprise Security Package (ESP). ESP-kluster är anslutna till en domän så att användare kan autentisera med autentiseringsuppgifter för domänen. I den här självstudien skapar du två Ranger-principer för att begränsa åtkomsten till sales
- och marketingspend
-ämnen.
I den här självstudien lär du dig att:
- Skapa domänanvändare.
- Skapa Ranger-principer.
- Skapa ämnen i ett Kafka-kluster.
- Testa Ranger-principer.
Förutsättningar
Ett HDInsight Kafka-kluster med Enterprise Security Package.
Anslut till Apache Ranger Admin-gränssnittet
Från en webbläsare ansluter du till Ranger Admin-användargränssnittet (UI) med hjälp av URL:en
https://ClusterName.azurehdinsight.net/Ranger/
. Kom ihåg att ändraClusterName
till namnet på ditt Kafka-kluster. Ranger-autentiseringsuppgifter är inte samma som autentiseringsuppgifter för Hadoop-kluster. Om du vill förhindra att webbläsare använder cachade Hadoop-autentiseringsuppgifter använder du ett nytt InPrivate-webbläsarfönster för att ansluta till Ranger-administratörsgränssnittet.Logga in med dina autentiseringsuppgifter för Microsoft Entra-administratör. Autentiseringsuppgifterna för Microsoft Entra-administratören är inte samma som HDInsight-klusterautentiseringsuppgifter eller SSH-autentiseringsuppgifter för Linux HDInsight-noden.
Skapa domänanvändare
Information om hur du skapar sales_user och marketing_user domänanvändare finns i Skapa ett HDInsight-kluster med Enterprise Security Package. I ett produktionsscenario kommer domänanvändare från din Microsoft Entra-ID-klientorganisation.
Skapa en Ranger-princip
Skapa en Ranger-princip för sales_user och marketing_user.
Öppna Ranger-administratörsanvändargränssnittet.
Under Kafka väljer du <ClusterName>_kafka. En förkonfigurerad princip kan visas.
Välj Lägg till ny princip och ange följande värden:
Inställning Föreslaget värde Principnamn HDInsight-försäljning* princip Område sales* Välj användare sales_user1 Behörigheter publish, consume, create Följande jokertecken kan användas i ämnesnamnet:
*
anger noll eller flera förekomster av tecken.?
anger ett enskilt tecken.
Vänta en stund tills Ranger synkroniserar med Microsoft Entra-ID om en domänanvändare inte fylls i automatiskt för Välj användare.
Välj Lägg till för att spara principen.
Välj Lägg till ny princip och ange sedan följande värden:
Inställning Föreslaget värde Principnamn HDInsight-marknadsföringsprincip Område marketingspend
Välj användare marketing_user1 Behörigheter publish, consume, create Välj Lägg till för att spara principen.
Skapa ämnen i ett Kafka-kluster med ESP
Så här skapar du de två avsnitten salesevents
och marketingspend
:
Använd följande kommando för att öppna en SSH-anslutning (Secure Shell) till klustret:
ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
Ersätt
DOMAINADMIN
med administratörsanvändaren för klustret som konfigurerades när klustret skapades. ErsättCLUSTERNAME
med namnet på klustret. Ange lösenordet för administratörsanvändarkontot om du uppmanas till det. Mer information om hur du använderSSH
med HDInsight finns i Använda SSH med HDInsight.Använd följande kommandon för att spara klustrets namn som en variabel och installera ett JSON-parsningsverktyg,
jq
. Ange Kafka-klustrets namn när du uppmanas till detta.sudo apt -y install jq read -p 'Enter your Kafka cluster name:' CLUSTERNAME
Använd följande kommandon för att hämta värdarna för Kafka-koordinatortjänsterna. När du blir ombedd att göra det anger du lösenordet till klusteradministratörskontot.
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`; \
Innan du fortsätter kan du behöva konfigurera utvecklingsmiljön om du inte redan har gjort det. Du behöver komponenter som Java JDK, Apache Maven och en SSH-klient med Säker kopia (SCP). Mer information finns i Installationsanvisningar.
Ladda ned exemplen på Apache Kafka-domänansluten producent/konsument.
Följ steg 2 och 3 under Skapa och distribuera exemplet i Självstudie: Använd Apache Kafka-producent- och konsument-API:er.
Kommentar
I den här självstudien använder du
kafka-producer-consumer.jar
DomainJoined-Producer-Consumer
under projektet. Använd inte den underProducer-Consumer
projektet, som gäller för scenarier som inte är domänanslutna.Kör följande kommandon:
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
Testa Ranger-principerna
Baserat på de konfigurerade Ranger-principerna kan sales_user producera/använda ämnet salesevents
, men inte ämnet marketingspend
. Omvänt kan marketing_user producera/använda ämnet marketingspend
men inte ämnet salesevents
.
Öppna en ny SSH-anslutning till klustret. Använd följande kommando för att logga in som sales_user1:
ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
Använd koordinatornamnen från föregående avsnitt till att ange följande miljövariabler:
export KAFKABROKERS=<brokerlist>:9092
Exempel:
export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092
Följ steg 3 under Skapa och distribuera exemplet i Självstudie: Använd Apache Kafka-producent- och konsument-API:er för att se till att
kafka-producer-consumer.jar
det också är tillgängligt för sales_user.Kommentar
I den här självstudien använder du
kafka-producer-consumer.jar
under projektet "DomainJoined-Producer-Consumer". Använd inte den under projektet "Producent-konsument", som gäller för scenarier som inte är domänanslutna.Kontrollera att sales_user1 kan producera till ämnet
salesevents
genom att köra följande kommando:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
Kör följande kommando för att använda från ämnet
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
Kontrollera att du kan läsa meddelandena.
Kontrollera att sales_user1 inte kan generera till ämnet
marketingspend
genom att köra följande kommando i samma SSH-fönster:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
Ett auktoriseringsfel inträffar och kan ignoreras.
Observera att marketing_user1 inte kan använda från ämnet
salesevents
.Upprepa föregående steg 1 till 3, men den här gången som marketing_user1.
Kör följande kommando för att använda från ämnet
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
Det går inte att visas tidigare meddelanden.
Granska åtkomsthändelserna i Ranger-användargränssnittet.
Skapa och använda ämnen i ESP Kafka med hjälp av konsolen
Kommentar
Du kan inte använda konsolkommandon för att skapa ämnen. I stället måste du använda Java-koden som visas i föregående avsnitt. Mer information finns i Skapa ämnen i ett Kafka-kluster med ESP.
Så här skapar och använder du ämnen i ESP Kafka med hjälp av konsolen:
Använd
kinit
med användarens användarnamn. Ange lösenordet när du uppmanas att göra det.kinit sales_user1
Ange miljövariabler:
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf" export KAFKABROKERS=<brokerlist>:9092
Skapa meddelanden till ämnet
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
Använda meddelanden från ämnet
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
Skapa och använda ämnen för en långvarig session i ESP Kafka
Kerberos-biljettcachen har en förfallobegränsning. För en långvarig session använder du en nyckelflik i stället för att förnya biljettcachen manuellt.
Så här använder du en nyckelflik i en långvarig session utan kinit
:
Skapa en ny nyckelflik för domänanvändaren:
ktutil addent -password -p <user@domain> -k 1 -e RC4-HMAC wkt /tmp/<user>.keytab q
Skapa
/home/sshuser/kafka_client_jaas.conf
. Den bör ha följande rader:KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/tmp/<user>.keytab" useTicketCache=false serviceName="kafka" principal="<user@domain>"; };
Ersätt
java.security.auth.login.config
med/home/sshuser/kafka_client_jaas.conf
och skapa eller använda ämnet med hjälp av konsolen eller API:et: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
Rensa resurser
Om du inte kommer att fortsätta att använda det här programmet tar du bort kafka-klustret som du skapade:
- Logga in på Azure-portalen.
- I sökrutan högst upp anger du HDInsight.
- Under Tjänster väljer du HDInsight-kluster.
- I listan över HDInsight-kluster som visas väljer du ... bredvid klustret som du skapade för den här självstudien.
- Välj Ta bort>Ja.
Felsökning
Om kafka-producer-consumer.jar
det inte fungerar i ett domänanslutet DomainJoined-Producer-Consumer
kluster kontrollerar du att du använder kafka-producer-consumer.jar
under projektet. Använd inte den under Producer-Consumer
projektet, som gäller för scenarier som inte är domänanslutna.