Share via


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ättning

Ett HDInsight Kafka-kluster med Enterprise Security Package.

Anslut till Apache Ranger Admin-gränssnittet

  1. 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 ändra ClusterName 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.

  2. 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.

    Screenshot that shows the HDInsight Apache Ranger Admin UI.

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.

  1. Öppna Ranger-administratörsanvändargränssnittet.

  2. Under Kafka väljer du <ClusterName>_kafka. En förkonfigurerad princip kan visas.

  3. Välj Lägg till ny princip och ange följande värden:

    Inställning Föreslaget värde
    Principnamn hdi sales* policy
    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.

    Screenshot that shows the Apache Ranger Admin UI Create Policy1.

    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.

  4. Välj Lägg till för att spara principen.

  5. Välj Lägg till ny princip och ange sedan följande värden:

    Inställning Föreslaget värde
    Principnamn hdi marketing policy
    Område marketingspend
    Välj användare marketing_user1
    Behörigheter publish, consume, create

    Screenshot that shows the Apache Ranger Admin UI Create Policy2.

  6. 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:

  1. 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ätt CLUSTERNAME med namnet på klustret. Ange lösenordet för administratörsanvändarkontot om du uppmanas till det. Mer information om hur du använder SSH med HDInsight finns i Använda SSH med HDInsight.

  2. 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
    
  3. 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.

  4. Ladda ned exemplen på Apache Kafka-domänansluten producent/konsument.

  5. 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.jarDomainJoined-Producer-Consumer under projektet. Använd inte den under Producer-Consumer projektet, som gäller för scenarier som inte är domänanslutna.

  6. 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.

  1. Ö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
    
  2. 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

  3. 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.

  4. 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
    
  5. 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.

  6. 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.

  7. 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.

  8. Granska åtkomsthändelserna i Ranger-användargränssnittet.

    Screenshot that shows the Ranger UI policy audit access events.

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:

  1. Använd kinit med användarens användarnamn. Ange lösenordet när du uppmanas att göra det.

    kinit sales_user1
    
  2. 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
    
  3. 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
    
  4. 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:

  1. 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
    
    
  2. 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>";
    };
    
  3. 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:

  1. Logga in på Azure-portalen.
  2. I sökrutanhögst upp anger du HDInsight.
  3. Under Tjänster väljer du HDInsight-kluster.
  4. I listan över HDInsight-kluster som visas väljer du ... bredvid klustret som du skapade för den här självstudien.
  5. 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.

Nästa steg