Esercitazione: Configurare i criteri Apache Kafka in HDInsight con Enterprise Security Package

Informazioni su come configurare i criteri di Apache Ranger per i cluster Apache Kafka Enterprise Security Package (ESP). Gli ESP cluster sono connessi a un dominio che consente agli utenti di eseguire l'autenticazione con le credenziali di dominio. In questa esercitazione vengono creati due criteri di Ranger per limitare l'accesso a sales e marketingspend.

In questa esercitazione apprenderai a:

  • Creare utenti di dominio.
  • Creare criteri ranger.
  • Creare argomenti in un cluster Kafka.
  • Testare i criteri di Ranger.

Prerequisito

Un cluster HDInsight Kafka con Enterprise Security Package.

Connettersi all'interfaccia utente di amministrazione di Apache Ranger

  1. Da un browser connettersi all'interfaccia utente dell'amministratore ranger usando l'URL https://ClusterName.azurehdinsight.net/Ranger/. Ricordarsi di modificare ClusterName con il nome del cluster Kafka. Le credenziali di Ranger non corrispondono alle credenziali del cluster Hadoop. Per evitare che i browser usino credenziali memorizzate nella cache di Hadoop, usare una nuova finestra del browser InPrivate per connettersi all'interfaccia utente di Ranger Admin.

  2. Accedere usando le credenziali di amministratore di Microsoft Entra. Le credenziali di amministratore di Microsoft Entra non corrispondono alle credenziali SSH del cluster HDInsight o al nodo Linux HDInsight.

    Screenshot che mostra l'interfaccia utente di amministrazione di Apache Ranger di HDInsight.

Creare utenti del dominio

Per informazioni su come creare gli utenti di dominio sales_user e marketing_user , vedere Creare un cluster HDInsight con Enterprise Security Package. In uno scenario di produzione, gli utenti di dominio provengono dal tenant di Microsoft Entra ID.

Creare un criterio ranger

Creare un criterio di Ranger per sales_user e marketing_user.

  1. Aprire l’interfaccia utente di amministrazione di Ranger.

  2. In Kafka selezionare <ClusterName>_kafka. È possibile elencare un criterio preconfigurato.

  3. Selezionare Aggiungi nuovo criterio e immettere i valori seguenti:

    Impostazione Valore suggerito
    Nome criteri Criteri di vendita di HDInsight*
    Argomento sales*
    Seleziona utente sales_user1
    Autorizzazioni publish, consume, create

    I seguenti caratteri jolly possono essere inclusi nel nome dell'argomento:

    • * indica zero o più occorrenze di caratteri.
    • ? indica un singolo carattere.

    Screenshot che mostra l'interfaccia utente di amministrazione di Apache Ranger Create Policy 1.

    Attendere alcuni istanti affinché Ranger si sincronizzi con Microsoft Entra ID se un utente di dominio non viene popolato automaticamente per Select User.

  4. Selezionare Aggiungi per salvare il criterio.

  5. Selezionare Aggiungi nuovo criterio e quindi immettere i valori seguenti:

    Impostazione Valore suggerito
    Nome criteri Criteri di marketing di HDInsight
    Argomento marketingspend
    Seleziona utente marketing_user1
    Autorizzazioni publish, consume, create

    Screenshot che mostra l'interfaccia utente di amministrazione di Apache Ranger Create Policy 2.

  6. Selezionare Aggiungi per salvare il criterio.

Creare argomenti in un cluster Kafka con ESP

Per creare due argomenti salesevents e marketingspend:

  1. Usare il comando seguente per aprire una connessione Secure Shell (SSH) al cluster:

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    Sostituire DOMAINADMIN con l'utente amministratore per il cluster configurato durante la creazione del cluster. Sostituire CLUSTERNAME con il nome del cluster. Quando richiesto, immettere la password per l'account utente amministratore. Per altre informazioni sull'uso di SSH con HDInsight, vedere Use SSH with HDInsight (Uso di SSH con HDInsight).

  2. Per salvare il nome del cluster in una variabile e installare un'utilità di analisi JSON jq, usare i comandi seguenti. Quando richiesto, immettere il nome del cluster Kafka.

    sudo apt -y install jq
    read -p 'Enter your Kafka cluster name:' CLUSTERNAME
    
  3. Per ottenere gli host del broker Kafka, usare i comandi seguenti. Quando richiesto, immettere la password dell'account amministratore del cluster.

    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`; \
    

    Prima di procedere, potrebbe essere necessario configurare l'ambiente di sviluppo, se non è già stato fatto. Sono necessari componenti come Java JDK, Apache Maven e un client SSH con secure copy (SCP). Per altre informazioni, vedere Istruzioni di installazione.

  4. Scaricare gli esempi di producer e consumer Apache Kafka aggiunti a dominio.

  5. Seguire i passaggi 2 e 3 in Compilare e distribuire l'esempio in Esercitazione: Usare le API Producer e Consumer apache Kafka.

    Nota

    Per questa esercitazione, usare kafka-producer-consumer.jar nel DomainJoined-Producer-Consumer progetto. Non usare quello nel Producer-Consumer progetto, che è per gli scenari non aggiunti a un dominio.

  6. Eseguire i comandi seguenti:

    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
    

Testare i criteri di Ranger

In base ai criteri ranger configurati, sales_user può produrre/utilizzare l'argomento salesevents , ma non l'argomento marketingspend. Al contrario, marketing_user può produrre/utilizzare l'argomento marketingspend , ma non l'argomento salesevents.

  1. Aprire una nuova connessione SSH al cluster. Eseguire questo comando per accedere come sales_user1:

    ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Usare i nomi dei broker della sezione precedente per impostare le variabili di ambiente seguenti:

    export KAFKABROKERS=<brokerlist>:9092
    

    Esempio: export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092

  3. Seguire il passaggio 3 in Compilare e distribuire l'esempio in Esercitazione: Usare le API Apache Kafka Producer e Consumer per assicurarsi che kafka-producer-consumer.jar sia disponibile anche per sales_user.

    Nota

    Per questa esercitazione, usare kafka-producer-consumer.jar nel progetto "DomainJoined-Producer-Consumer". Non usare quello nel progetto "Producer-Consumer", ovvero per scenari non aggiunti a un dominio.

  4. Verificare che sales_user1 possa produrre in argomento salesevents eseguendo il comando seguente:

    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. Eseguire il comando seguente per utilizzare dall'argomento 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
    

    Verificare di poter leggere i messaggi.

  6. Verificare che il sales_user1 non possa produrre per l'argomento marketingspend eseguendo il comando seguente nella stessa finestra SSH:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
    

    Si verifica un errore di autorizzazione che può essere ignorato.

  7. Si noti che marketing_user1 non può usare dall'argomento salesevents.

    Ripetere i passaggi precedenti da 1 a 3, ma questa volta come marketing_user1.

    Eseguire il comando seguente per utilizzare dall'argomento 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
    

    I messaggi precedenti non possono essere visualizzati.

  8. Visualizzare gli eventi di accesso di controllo dall'interfaccia utente di Ranger.

    Screenshot che mostra gli eventi di accesso ai criteri di controllo dell'interfaccia utente di Ranger.

Creare e utilizzare argomenti in ESP Kafka con la console

Nota

Non è possibile usare i comandi della console per creare argomenti. È invece necessario usare il codice Java illustrato nella sezione precedente. Per altre informazioni, vedere Creare argomenti in un cluster Kafka con ESP.

Per creare e utilizzare argomenti in ESP Kafka con la console:

  1. Usare kinit specificando il nome utente dell'utente. Immettere la password quando richiesto.

    kinit sales_user1
    
  2. Impostare le variabili di ambiente:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. Generare messaggi all'argomento salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. Utilizzare messaggi dall'argomento salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
    

Produrre e utilizzare argomenti per una sessione a esecuzione prolungata in ESP Kafka

La cache dei ticket Kerberos presenta una limitazione di scadenza. Per una sessione a esecuzione prolungata, usare un keytab anziché rinnovare manualmente la cache dei ticket.

Per usare una scheda chiave in una sessione con esecuzione prolungata senza kinit:

  1. Creare una nuova scheda chiave per l'utente di dominio:

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. Creare /home/sshuser/kafka_client_jaas.conf. Dovrebbe includere le righe seguenti:

    KafkaClient {
     com.sun.security.auth.module.Krb5LoginModule required
     useKeyTab=true
     storeKey=true
     keyTab="/tmp/<user>.keytab"
     useTicketCache=false
     serviceName="kafka"
     principal="<user@domain>";
    };
    
  3. Sostituire java.security.auth.login.config con /home/sshuser/kafka_client_jaas.conf e produrre o usare l'argomento usando la console o l'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
    

Pulire le risorse

Se non si intende continuare a usare questa applicazione, eliminare il cluster Kafka creato:

  1. Accedere al portale di Azure.
  2. Nella casella Cerca nella parte superiore immettere HDInsight.
  3. In Servizi selezionare Cluster HDInsight.
  4. Nell'elenco di cluster HDInsight visualizzato selezionare ... accanto al cluster creato per questa esercitazione.
  5. Selezionare Elimina>.

Risoluzione dei problemi

Se kafka-producer-consumer.jar non funziona in un cluster aggiunto a un dominio, assicurarsi di usare kafka-producer-consumer.jar nel DomainJoined-Producer-Consumer progetto. Non usare quello nel Producer-Consumer progetto, che è per gli scenari non aggiunti a un dominio.

Passaggi successivi