Condividi tramite


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 del dominio
  • Creazione dei criteri di 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 di amministrazione di Ranger usando l'URL https://ClusterName.azurehdinsight.net/Ranger/. Ricordarsi di modificare ClusterName con il nome del cluster Kafka. Le credenziali di Ranger non sono le stesse usate 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.

    HDInsight Apache Ranger Admin UI

Creare utenti del dominio

Visitare Creare un cluster HDInsight con Enterprise Security Package per informazioni su come creare gli utenti del dominio sales_user e marketing_user. In uno scenario di produzione, gli utenti del dominio provengono dal tenant di Active Directory.

Creare un criterio di Ranger

Creare un criterio di Ranger per sales_user e marketing_user.

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

  2. Selezionare <ClusterName>_kafka in Kafka. Potrebbe essere presente un criterio preconfigurato.

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

    Impostazione Valore suggerito
    Nome criteri hdi sales* policy
    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 del carattere.
    • "?" indica un carattere singolo.

    Apache Ranger Admin UI Create Policy1

    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 hdi marketing policy
    Argomento marketingspend
    Seleziona utente marketing_user1
    Autorizzazioni publish, consume, create

    Apache Ranger Admin UI Create Policy2

  6. Selezionare Aggiungi per salvare il criterio.

Creare argomenti in un cluster Kafka con ESP

Per creare due argomenti salesevents e marketingspend:

  1. Per aprire una connessione SSH al cluster, usare il comando seguente:

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    Sostituire DOMAINADMIN con l'utente amministratore per il cluster configurato durante la creazione del cluster e 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 continuare, può essere necessario configurare l'ambiente di sviluppo se non è stato ancora fatto. Saranno necessari componenti quali Java JDK, Apache Maven e un client SSH con SCP. Per altre informazioni, vedere le istruzioni di configurazione.

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

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

    Nota

    Per questa esercitazione, usare il file kafka-producer-consumer.jar nel progetto "DomainJoined-Producer-Consumer" (non quello nel progetto Producer-Consumer, che serve 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 di Ranger configurati, sales_user può creare o utilizzare risorse per l'argomento salesevents ma non per l'argomento marketingspend. Al contrario, marketing_user può creare o utilizzare risorse per l'argomento marketingspend ma non per 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 il file kafka-producer-consumer.jar nel progetto "DomainJoined-Producer-Consumer" (non quello nel progetto Producer-Consumer, che serve per gli scenari non aggiunti a un dominio).

  4. Verificare che sales_user1 possa creare risorse nell'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 risorse 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 che sia possibile leggere i messaggi.

  6. Verificare che sales_user1 possa creare risorse nell'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ò utilizzare risorse dall'argomento salesevents.

    Ripetere i passaggi da 1 a 3 di cui sopra, ma questa volta come marketing_user1.

    Eseguire il comando seguente per utilizzare risorse 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.

    Ranger UI policy audit access events

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. Creare messaggi nell'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 i messaggi dell'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, è preferibile usare keytab anziché rinnovare manualmente la cache dei ticket. Per usare keytab nella sessione a 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 e avere 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 utilizzare 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, eseguire questa procedura per eliminare il cluster Kafka creato:

  1. Accedi al portale di Azure.
  2. Nella casella Ricerca in alto digitare HDInsight.
  3. Selezionare Cluster HDInsight in Servizi.
  4. Nell'elenco di cluster HDInsight visualizzato, fare clic su ... accanto al cluster creato per questa esercitazione.
  5. Fare clic su Elimina. Fare clic su .

Risoluzione dei problemi

Se kafka-producer-consumer.jar non funziona in un cluster aggiunto a dominio, assicurarsi di usare il file kafka-producer-consumer.jar nel progetto "DomainJoined-Producer-Consumer" (non quello nel progetto Producer-Consumer, che serve per gli scenari non aggiunti a un dominio).

Passaggi successivi