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.
Un cluster HDInsight Kafka con Enterprise Security Package.
Da un browser connettersi all'interfaccia utente dell'amministratore ranger usando l'URL
https://ClusterName.azurehdinsight.net/Ranger/
. Ricordarsi di modificareClusterName
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.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.
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 di Ranger per sales_user e marketing_user.
Aprire l’interfaccia utente di amministrazione di Ranger.
In Kafka selezionare <ClusterName>_kafka. È possibile elencare un criterio preconfigurato.
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.
Attendere alcuni istanti affinché Ranger si sincronizzi con Microsoft Entra ID se un utente di dominio non viene popolato automaticamente per Select User.
Selezionare Aggiungi per salvare il criterio.
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 Selezionare Aggiungi per salvare il criterio.
Per creare due argomenti salesevents
e marketingspend
:
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. SostituireCLUSTERNAME
con il nome del cluster. Quando richiesto, immettere la password per l'account utente amministratore. Per altre informazioni sull'uso diSSH
con HDInsight, vedere Use SSH with HDInsight (Uso di SSH con HDInsight).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
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.
Scaricare gli esempi di producer e consumer Apache Kafka aggiunti a dominio.
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
nelDomainJoined-Producer-Consumer
progetto. Non usare quello nelProducer-Consumer
progetto, che è per gli scenari non aggiunti a un dominio.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
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
.
Aprire una nuova connessione SSH al cluster. Eseguire questo comando per accedere come sales_user1:
ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
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
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.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
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.
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.
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.
Visualizzare gli eventi di accesso di controllo dall'interfaccia utente di Ranger.
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:
Usare
kinit
specificando il nome utente dell'utente. Immettere la password quando richiesto.kinit sales_user1
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
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
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
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
:
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
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>"; };
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
Se non si intende continuare a usare questa applicazione, eliminare il cluster Kafka creato:
- Accedere al portale di Azure.
- Nella casella Cerca nella parte superiore immettere HDInsight.
- In Servizi selezionare Cluster HDInsight.
- Nell'elenco di cluster HDInsight visualizzato selezionare ... accanto al cluster creato per questa esercitazione.
- Selezionare Elimina>Sì.
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.