Tutoriel : Configurer des stratégies Apache Kafka dans HDInsight avec le Pack Sécurité Entreprise

Découvrez comment configurer des stratégies Apache Ranger pour des clusters Apache Kafka avec le Pack Sécurité Entreprise. Les clusters ESP sont connectés à un domaine permettant aux utilisateurs de s’authentifier avec les informations d’identification du domaine. Dans ce tutoriel, vous créez deux stratégies Ranger pour restreindre l’accès aux rubriques sales et marketingspend.

Dans ce tutoriel, vous allez apprendre à :

  • Créez des utilisateurs du domaine.
  • Création de stratégies Ranger.
  • Créez des rubriques dans un cluster Kafka.
  • Testez des stratégies Ranger.

Prérequis

Un cluster Kafka HDInsight avec le Pack Sécurité Entreprise.

Connexion à l’interface utilisateur Apache Ranger

  1. À partir d’un navigateur, connectez-vous à l’Interface utilisateur (IU) d’administration Ranger avec l’URL https://ClusterName.azurehdinsight.net/Ranger/. N’oubliez pas de remplacer ClusterName par le nom de votre cluster Kafka. Les informations d’identification de Ranger ne sont pas les mêmes que celles du cluster Hadoop. Pour empêcher les navigateurs d’utiliser les informations d’identification Hadoop mises en cache, utilisez une nouvelle fenêtre de navigation InPrivate pour vous connecter à l’interface utilisateur administrateur de Ranger.

  2. Connectez-vous avec vos informations d’identification d’administrateur Microsoft Entra. Les informations d’identification de l’administrateur Microsoft Entra ne sont pas les mêmes que les informations d’identification du cluster HDInsight ou les informations d’identification SSH du nœud Linux HDInsight.

    Screenshot that shows the HDInsight Apache Ranger Admin UI.

Créer des utilisateurs du domaine

Pour découvrir comment créer les utilisateurs du domaine sales_user et marketing_user, consultez Créer un cluster HDInsight avec le Pack Sécurité Entreprise. Dans un scénario de production, les utilisateurs de domaine viennent de votre locataire Microsoft Entra ID.

Créer une stratégie Ranger

Créez une stratégie Ranger pour sales_user et marketing_user.

  1. Ouvrez l’interface utilisateur de l’administrateur Ranger.

  2. Sous Kafka, sélectionnez <ClusterName>_kafka. Il est possible qu’une stratégie préconfigurée figure dans la liste.

  3. Sélectionnez Ajouter une nouvelle stratégie, puis entrez les valeurs suivantes :

    Paramètre Valeur suggérée
    Nom de la stratégie hdi sales* policy
    Rubrique sales*
    Sélectionner un utilisateur sales_user1
    Autorisations publier, consommer, créer

    Les caractères génériques suivants peuvent être inclus dans le nom de la rubrique :

    • * indique zéro, une ou plusieurs occurrences des caractères.
    • ? indique n’importe quel caractère individuel.

    Screenshot that shows the Apache Ranger Admin UI Create Policy1.

    Attendez quelques instants que Ranger se synchronise avec Microsoft Entra ID si un utilisateur de domaine n’est pas automatiquement renseigné pour Sélectionnez un utilisateur.

  4. Sélectionnez Ajouter pour enregistrer la stratégie.

  5. Sélectionnez Ajouter une nouvelle stratégie, puis entrez les valeurs suivantes :

    Paramètre Valeur suggérée
    Nom de la stratégie hdi marketing policy
    Rubrique marketingspend
    Sélectionner un utilisateur marketing_user1
    Autorisations publier, consommer, créer

    Screenshot that shows the Apache Ranger Admin UI Create Policy2.

  6. Sélectionnez Ajouter pour enregistrer la stratégie.

Créer des rubriques dans un cluster Kafka avec ESP

Pour créer les deux rubriques, salesevents et marketingspend :

  1. Utilisez la commande suivante pour ouvrir une connexion Secure Shell (SSH) avec le cluster :

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    Remplacez DOMAINADMIN par l’utilisateur administrateur de votre cluster qui a été configuré pendant la création du cluster. Remplacez CLUSTERNAME par le nom de votre cluster. Si vous y êtes invité, entrez le mot de passe du compte de l’utilisateur administrateur. Pour en savoir plus sur l’utilisation de SSH avec HDInsight, voir Utiliser SSH avec Hadoop - Azure HDInsight.

  2. Utilisez les commandes suivantes pour enregistrer le nom du cluster dans une variable et pour installer un utilitaire d’analyse JSON jq. Quand vous y êtes invité, entrez le nom du cluster Kafka.

    sudo apt -y install jq
    read -p 'Enter your Kafka cluster name:' CLUSTERNAME
    
  3. Utilisez les commandes suivantes pour obtenir les hôtes du répartiteur Kafka. Quand vous y êtes invité, entrez le mot de passe du compte de l’administrateur du 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`; \
    

    Avant de continuer, il vous faut peut-être configurer votre environnement de développement, si vous ne l’avez pas déjà fait. Vous avez besoin de composants comme JDK Java, Apache Maven et d’un client SSH avec Secure Copy (SCP). Pour plus d’informations, consultez la section relative aux Instructions de configuration.

  4. Téléchargez les exemples de producteur et consommateur joints au domaine Apache Kafka.

  5. Suivez les étapes 2 et 3 sous Générer et déployer l’exemple dans le Didacticiel : Utiliser les API de producteur et de consommateur Apache Kafka.

    Remarque

    Pour ce tutoriel, utilisez-le kafka-producer-consumer.jar sous le projet DomainJoined-Producer-Consumer. N’utilisez pas celui sous le projet Producer-Consumer, qui concerne les scénarios non joints à un domaine.

  6. Exécutez les commandes suivantes :

    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
    

Tester les stratégies Ranger

En fonction des stratégies Ranger configurées, sales_user peut produire/consommer la rubrique salesevents, mais pas la rubrique marketingspend. À l’inverse, marketing_user peut produire/consommer la rubrique marketingspend, mais pas la rubrique salesevents.

  1. Ouvrez une connexion SSH avec le cluster. Utilisez la commande suivante pour vous connecter en tant que sales_user1 :

    ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Utiliser les noms du répartiteur de la section précédente pour définir les variables d’environnement suivantes :

    export KAFKABROKERS=<brokerlist>:9092
    

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

  3. Suivez l’étape 3 de la section Générer et déployer l’exemple dans Tutoriel : Utiliser les API de producteur et de consommateur Apache Kafka pour vérifier que kafka-producer-consumer.jar est également accessible à sales_user.

    Remarque

    Pour ce tutoriel, utilisez kafka-producer-consumer.jar sous le projet « DomainJoined-Producer-Consumer ». N’utilisez pas celui sous le projet « Producer-Consumer », qui concerne les scénarios non joints à un domaine.

  4. Vérifiez que sales_user1 peut produire à destination de la rubrique salesevents en exécutant la commande suivante :

    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. Exécutez la commande suivante pour consommer ce qui provient de la rubrique 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
    

    Vérifiez que vous pouvez lire les messages.

  6. Vérifiez que le sales_user1 ne peut pas produire dans la rubrique marketingspend en exécutant la commande suivante dans la même fenêtre 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
    

    Une erreur d’autorisation se produit et elle peut être ignorée.

  7. Notez que marketing_user1 ne peut pas consommer ce qui provient de la rubrique salesevents.

    Répétez les étapes 1 à 3 précédentes, mais cette fois en tant que marketing_user1.

    Exécutez la commande suivante pour consommer ce qui provient de la rubrique 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
    

    Les messages précédents ne sont pas visibles.

  8. Consultez les événements d’accès de l’audit à partir de l’interface utilisateur de Ranger.

    Screenshot that shows the Ranger UI policy audit access events.

Produire et consommer des rubriques dans ESP Kafka en utilisant la console

Notes

Vous ne pouvez pas utiliser des commandes de console pour créer des rubriques. Vous devez plutôt utiliser le code Java présenté dans la section précédente. Pour plus d’informations, consultez Créer des rubriques dans un cluster Kafka avec ESP.

Pour produire et consommer des rubriques dans ESP Kafka en utilisant la console :

  1. Utilisez kinit avec le nom d’utilisateur de l’utilisateur. Entrez le mot de passe quand vous y êtes invité.

    kinit sales_user1
    
  2. Définissez des variables d’environnement :

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. Produisez des messages dans la rubrique salesevents :

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. Consommez des messages provenant de la rubrique salesevents :

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

Produire et consommer des rubriques pour une session durable dans ESP Kafka

Le cache de tickets Kerberos a une limite d’expiration. Pour une session de longue durée, utilisez un keytab au lieu de renouveler le cache de tickets manuellement.

Pour utiliser un keytab dans une session durable sans kinit :

  1. Créer un keytab pour l’utilisateur de votre domaine :

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. Créez /home/sshuser/kafka_client_jaas.conf. Il doit contenir les lignes suivantes :

    KafkaClient {
     com.sun.security.auth.module.Krb5LoginModule required
     useKeyTab=true
     storeKey=true
     keyTab="/tmp/<user>.keytab"
     useTicketCache=false
     serviceName="kafka"
     principal="<user@domain>";
    };
    
  3. Remplacez java.security.auth.login.config par /home/sshuser/kafka_client_jaas.conf et produisez ou consommez la rubrique à l’aide de la console ou de 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
    

Nettoyer les ressources

Si vous ne souhaitez pas continuer à utiliser cette application, supprimez le cluster Kafka que vous avez créé :

  1. Connectez-vous au portail Azure.
  2. Dans la zone Rechercher située en haut, entrez HDInsight.
  3. Sous Services, sélectionnez Clusters HDInsight.
  4. Dans la liste des clusters HDInsight qui s’affiche, sélectionnez les points de suspension ... à côté du cluster que vous avez créé pour ce tutoriel.
  5. Sélectionnez Supprimer>Oui.

Dépannage

Si kafka-producer-consumer.jar ne fonctionne pas dans un cluster joint à un domaine, vérifiez que vous utilisez kafka-producer-consumer.jar sous le projet DomainJoined-Producer-Consumer. N’utilisez pas celui sous le projet Producer-Consumer, qui concerne les scénarios non joints à un domaine.

Étapes suivantes