Delen via


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

  1. Maak vanuit een browser verbinding met de Ranger Beheer gebruikersinterface (UI) met behulp van de URLhttps://ClusterName.azurehdinsight.net/Ranger/. Vergeet niet om ClusterName 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.

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

    Screenshot that shows the HDInsight Apache Ranger Admin UI.

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.

  1. Open de beheerinterface van Ranger.

  2. Selecteer <clusternaam> onder Kafka_kafka. Er kan één vooraf geconfigureerd beleid worden vermeld.

  3. Selecteer Nieuw beleid toevoegen en voer de volgende waarden in:

    Instelling Voorgestelde waarde
    Policy Name hdi sales* policy
    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.

    Screenshot that shows the Apache Ranger Admin UI Create Policy1.

    Wacht even tot Ranger is gesynchroniseerd met Microsoft Entra ID als een domeingebruiker niet automatisch wordt ingevuld voor Select User.

  4. Selecteer Toevoegen om het beleid op te slaan.

  5. Selecteer Nieuw beleid toevoegen en voer de volgende waarden in:

    Instelling Voorgestelde waarde
    Policy Name hdi marketing policy
    Onderwerp marketingspend
    Select User marketing_user1
    Machtigingen Publish, Consume, Create

    Screenshot that shows the Apache Ranger Admin UI Create Policy2.

  6. Selecteer Toevoegen om het beleid op te slaan.

Onderwerpen maken in een Kafka-cluster met ESP

Twee onderwerpen, salesevents en marketingspend, maken:

  1. 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. Vervang CLUSTERNAME 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 van SSH met HDInsight.

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

  4. Download de voorbeelden voor aan een domein gekoppelde Apache Kafka voor producer/consumer.

  5. 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 het DomainJoined-Producer-Consumer project. Gebruik de optie niet onder het Producer-Consumer project. Dit geldt voor scenario's die niet aan een domein zijn toegevoegd.

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

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

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

  4. 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
    
  5. Voer de volgende opdracht uit om het onderwerp saleseventste 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.

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

  7. U ziet dat marketing_user1 het onderwerp saleseventsniet 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 saleseventste 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.

  8. Bekijk de controlegebeurtenissen voor toegang vanuit de gebruikersinterface van Ranger.

    Screenshot that shows the Ranger UI policy audit access events.

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:

  1. Gebruik kinit met de gebruikersnaam van de gebruiker. Geef het wachtwoord op wanneer u daarom wordt gevraagd.

    kinit sales_user1
    
  2. Omgevingsvariabelen instellen:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. Berichten naar het onderwerp saleseventsproduceren:

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. 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:

  1. Maak een nieuwe keytab voor uw domeingebruiker:

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. /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>";
    };
    
  3. Vervang door /home/sshuser/kafka_client_jaas.conf het onderwerp en produceer java.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:

  1. Meld u aan bij het Azure-portaal.
  2. Voer HDInsight in het zoekvak bovenaan in.
  3. Selecteer onder Services HDInsight-clusters.
  4. Selecteer in de lijst met HDInsight-clusters die wordt weergegeven, de ... naast het cluster dat u voor deze zelfstudie hebt gemaakt.
  5. Selecteer Ja verwijderen>.

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.

Volgende stappen