Tutorial: Configuración de directivas de Apache Kafka en HDInsight con Enterprise Security Package
Obtenga información sobre cómo configurar directivas de Apache Ranger para los clústeres de Apache Kafka de Enterprise Security Package (ESP). Los clústeres de ESP se conectan a un dominio, lo que permite a los usuarios autenticarse con credenciales de dominio. En este tutorial, creará dos directivas de Ranger para restringir el acceso a los temas sales
y marketingspend
.
En este tutorial, aprenderá a:
- Crear usuarios de dominio.
- Creación de directivas de Ranger.
- Crear temas en un clúster de Kafka.
- Probar directivas de Ranger.
Requisito previo
Un clúster de Kafka de HDInsight con Enterprise Security Package.
Conexión a la interfaz de usuario administrador de Apache Ranger
En un explorador, conéctese a la interfaz de usuario administrador de Ranger desde la dirección URL
https://ClusterName.azurehdinsight.net/Ranger/
. No olvide cambiarClusterName
por el nombre del clúster de Kafka. Las credenciales del guardabosques no son las mismas que las del cluster Hadoop. Para evitar que los exploradores usen credenciales almacenadas en caché de Hadoop, use una nueva ventana del explorador InPrivate para conectarse a la interfaz de usuario administrador de Ranger.Inicie sesión con sus credenciales de administrador de Microsoft Entra. Las credenciales de administrador de Microsoft Entra no son las mismas que las credenciales del clúster de HDInsight ni las credenciales SSH del nodo de HDInsight Linux.
Crear usuarios de dominio
Visite Create a HDInsight cluster with Enterprise Security Package (Creación de un clúster de HDInsight con Enterprise Security Package) para aprender a crear los usuario del dominio sales_user y marketing_user. En un escenario de producción, los usuarios del dominio proceden de su inquilino de Microsoft Entra ID.
Creación de directiva de Ranger
Cree una directiva de Ranger para sales_user y marketing_user.
Abra la Interfaz de usuario administrador de Ranger.
En Kafka, seleccione <ClusterName>_kafka. Puede aparecer una directiva configurada previamente.
Seleccione Agregar nueva directiva y escriba los siguientes valores:
Configuración Valor sugerido Nombre de directiva Directiva de ventas de HDInsight* Tema sales* Seleccionar usuario sales_user1 Permisos publicar, consumir, crear Los siguientes caracteres comodín se pueden incluir en el nombre del tema:
*
indica ninguna o más repeticiones de caracteres.?
indica cualquier carácter individual.
Si un usuario del dominio no se rellena automáticamente en Seleccionar usuario, espere unos instantes a que Ranger se sincronice con Microsoft Entra ID.
Seleccione Agregar para guardar la directiva.
Seleccione Agregar nueva directiva y escriba los siguientes valores:
Configuración Valor sugerido Nombre de directiva Directiva de marketing de HDInsight Tema marketingspend
Seleccionar usuario marketing_user1 Permisos publicar, consumir, crear Seleccione Agregar para guardar la directiva.
Creación de temas en un clúster de Kafka con ESP
Para crear dos temas salesevents
y marketingspend
:
Utilice el siguiente comando para abrir una conexión Secure Shell (SSH) con el cluster:
ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
Reemplace a
DOMAINADMIN
por el usuario administrador de su clúster configurado durante la creación del clúster. ReemplaceCLUSTERNAME
por el nombre del clúster. Si se le solicita, escriba la contraseña de la cuenta de usuario administrador. Para obtener más información sobre cómo usarSSH
con HDInsight, consulte Conexión a través de SSH con HDInsight.Use los siguientes comandos para guardar el nombre del clúster en una variable e instalar una utilidad de análisis de JSON
jq
. Cuando se le solicite, escriba el nombre del clúster de Kafka.sudo apt -y install jq read -p 'Enter your Kafka cluster name:' CLUSTERNAME
Use los siguientes comandos para obtener los hosts del agente de Kafka. Cuando se le solicite, escriba la contraseña de la cuenta de administrador del clúster.
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`; \
Antes de proceder, puede que necesite configurar su entorno de desarrollo si aún no lo ha hecho. Necesitará componentes como el JDK de Java, Apache Maven y un cliente SSH con copia segura (SCP). Para obtener más información, consulte las instrucciones de configuración.
Descargue los ejemplos de consumidor de productor unido al dominio de Apache Kafka.
Siga los pasos 2 y 3 de Compilación e implementación del ejemplo en Tutorial: Uso de Producer API y Consumer API de Apache Kafka.
Nota:
Para este tutorial, utilice
kafka-producer-consumer.jar
bajo el proyectoDomainJoined-Producer-Consumer
. No use el que se encuentra en el proyecto deProducer-Consumer
, que es para escenarios que no están unidos a un dominio.Ejecute los comandos siguientes:
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
Prueba de las directivas de Ranger
Según las directivas de Ranger configuradas, sales_user puede producir o consumir el tema salesevents
, pero no el tema marketingspend
. Por el contrario, marketing_user puede producir/consumir el tema marketingspend
pero no el tema salesevents
.
Abra una nueva conexión SSH al clúster. Use el siguiente comandos para iniciar sesión como sales_user1:
ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
Use los nombres de agente de la sección anterior para establecer la siguiente variable de entorno:
export KAFKABROKERS=<brokerlist>:9092
Ejemplo:
export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092
Siga el paso 3 de Compilación e implementación de ejemplo en Tutorial: Uso de las API Apache Kafka Producer y Consumer para asegurarse de que
kafka-producer-consumer.jar
también está disponible para sales_user.Nota:
Para este tutorial, use
kafka-producer-consumer.jar
en el proyecto "DomainJoined-Producer-Consumer". No utilice el que se encuentra bajo el proyecto "Productor-Consumidor", que es para escenarios sin unión de dominios.Compruebe que sales_user1 puede producir en el tema
salesevents
ejecutando el comando siguiente:java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
Ejecute el siguiente comando para consumir del tema
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
Compruebe que puede leer los mensajes.
Verifique que el sales_user1 no puede producir al tema
marketingspend
ejecutando el siguiente comando en la misma ventana 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
Se produce un error de autorización y se puede omitir.
Observe que marketing_user1 no puede consumir del tema
salesevents
.Repita los pasos anteriores de 1 a 3, pero esta vez como marketing_user1.
Ejecute el siguiente comando para consumir del tema
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
No se pueden ver los mensajes anteriores.
Vea los eventos de acceso de auditoría desde la interfaz de usuario de Ranger.
Producción y consumo de temas en Kafka de ESP mediante la consola
Nota
No puede usar comandos de consola para crear temas; debe usar el código Java que se muestra en la sección anterior. Para obtener más información, consulte Creación de temas en un clúster de Kafka con ESP.
Para producir y consumir temas en Kafka de ESP mediante la consola:
Use
kinit
con el nombre de usuario del usuario. Escriba la contraseña cuando se le solicite.kinit sales_user1
Establezca variables de entorno:
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf" export KAFKABROKERS=<brokerlist>:9092
Produzca mensajes para el tema
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
Consumir mensajes del tema
salesevents
:/usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
Producir y consumir pistas de sesión de larga duración en ESP Kafka
La caché de tickets de Kerberos tiene una limitación de caducidad. Para una sesión de larga duración, utilice un keytab en lugar de renovar manualmente la caché de tickets.
Para usar keytab en una sesión de larga duración sin kinit
:
Cree un archivo keytab para el nombre de usuario del dominio:
ktutil addent -password -p <user@domain> -k 1 -e RC4-HMAC wkt /tmp/<user>.keytab q
Cree
/home/sshuser/kafka_client_jaas.conf
. Debe tener las siguientes líneas:KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/tmp/<user>.keytab" useTicketCache=false serviceName="kafka" principal="<user@domain>"; };
Reemplace
java.security.auth.login.config
por/home/sshuser/kafka_client_jaas.conf
y genere o consuma un tema mediante la consola o la 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
Limpieza de recursos
Si no va a seguir utilizando esta aplicación, elimine el cluster Kafka que creó:
- Inicie sesión en Azure Portal.
- En el cuadro Buscar de la parte superior, escriba HDInsight.
- En Servicios, seleccione Clústeres de HDInsight.
- En la lista de clústeres de HDInsight que aparece, seleccione el signo ... situado junto al clúster que ha creado para este tutorial.
- Seleccione Eliminar>Sí.
Solución de problemas
Si kafka-producer-consumer.jar
no funciona en un clúster unido a un dominio, asegúrese de que usa kafka-producer-consumer.jar
en el proyecto de DomainJoined-Producer-Consumer
. No use el que se encuentra en el proyecto de Producer-Consumer
, que es para escenarios que no están unidos a un dominio.