Introduction
Apache Kafka prend en charge divers protocoles de sécurité et flux de travail d’authentification pour garantir que seuls le personnel et les applications autorisés peuvent se connecter au cluster. Dans sa configuration par défaut, Kafka permet l’accès à tous mais n’a pas de contrôles de sécurité activés. Bien que cela soit utile pour explorer et développer, les déploiements de production doivent être correctement sécurisés avant d’être exposés au monde extérieur. De plus, de tels environnements doivent être surveillés pour assurer un fonctionnement sans encombre et prévenir les éventuelles pannes.
Dans ce tutoriel, vous renforcerez votre installation Kafka en configurant le cryptage du trafic TLS et l’authentification SASL pour fournir un flux de connexion standard avec nom d’utilisateur et mot de passe. Vous découvrirez comment configurer les scripts producteur et consommateur fournis pour se connecter à un cluster sécurisé. Ensuite, vous apprendrez comment exporter les métriques Kafka et les visualiser dans Grafana. Vous apprendrez également comment accéder aux nœuds et aux sujets de votre cluster via une interface web facile à utiliser fournie par AKHQ.
Prérequis
Pour compléter ce tutoriel, vous aurez besoin :
- Une goutte avec au moins 4Go de RAM et 2 CPU. Dans le cas d’un serveur Ubuntu, suivez la procédure Initial Server Setup pour les instructions de configuration.
- Apache Kafka est installé et configuré sur votre goutte. Pour les instructions de configuration, suivez le tutoriel Introduction to Kafka. Vous devez seulement compléter Étape 1 et Étape 2.
- Une compréhension de la manière dont Java gère les clés et les certificats. Pour plus d’informations, visitez le tutoriel Java Keytool Essentials : Working with Java Keystores.
- Grafana installé sur votre serveur ou machine locale. Veuillez consulter le tutoriel How To Install and Secure Grafana on Ubuntu pour les instructions. Vous avez seulement besoin de compléter les quatre premières étapes.
- Un nom de domaine entièrement enregistré est pointé vers votre goutte. Ce tutoriel utilisera
your_domain
tout au long et se référera au même nom de domaine que le prérequis Grafana. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement sur Freenom, ou utiliser le registraire de domaine de votre choix.
Étape 1 – Configurer les protocoles de sécurité de Kafka
Dans sa configuration standard, Kafka permet à tous de se connecter à lui sans vérifier l’origine de la requête. Cela signifie que votre cluster est accessible à tous par défaut. Si c’est acceptable pour le test, car il réduit la charge de maintenance sur les machines locales et les installations privées, les installations de production et celles exposées au public doivent avoir des fonctionnalités de sécurité activées pour empêcher l’accès non autorisé.
Dans cette étape, vous configurerez votre broker Kafka pour utiliser l’encryptage TLS pour le trafic entre le broker et les consommateurs. Vous configurerez également SASL en tant que cadre d’authentification pour vérifier les informations d’identification lors de la connexion au cluster.
Génération de certificats TLS et de magasins
Pour générer les certificats et clés requises pour configurer TLS, vous utiliserez le script du référentiel Outils de sécurité de la plateforme Confluent. Premièrement, clonez-le dans votre répertoire personnel en exécutant la commande suivante :
Naviguez dessus :
Le script que vous utiliserez s’appelle kafka-generate-ssl-automatic.sh
, et il vous faut fournir votre pays, état, organisation et ville en tant que variables d’environnement. Ces paramètres sont utilisés pour créer les certificats, mais leur contenu n’a pas d’importance. Vous devrez également fournir un mot de passe, utilisé pour sécuriser le dépôt de clés et la base de confiance Java qui seront générés.
Exécutez les commandes suivantes pour configurer les variables d’environnement nécessaires, en remplaçant your_tls_password
par la valeur souhaitée :
Notez que le PASSWORD
doit comporter au moins six caractères.
Donnez au script les permissions d’exécution en exécutant :
Ensuite, exécutez-le pour générer les fichiers requis :
Il y aura beaucoup de sortie. Une fois terminé, liste les fichiers dans le répertoire :
La sortie devrait ressembler à ceci :
Vous verrez que le certificat, le dépôt de confiance et le dépôt de clés ont été créés avec succès.
Configuration de Kafka pour TLS et SASL
Maintenant que vous avez les fichiers nécessaires pour activer le cryptage TLS, vous configurerez Kafka pour les utiliser et authentifier les utilisateurs avec SASL.
Vous modifierez le fichier server.properties
situé sous config/kraft
dans le répertoire d’installation. Vous l’avez installé sous kafka
dans votre répertoire personnel dans le cadre des prérequis. Naviguez jusqu’à lui en exécutant :
Ouvrez le fichier de configuration principal pour l’éditer :
nano config/kraft/server.properties
Trouvez les lignes suivantes :
Modifiez-les pour qu’elles ressemblent à ceci, en remplaçant PLAINTEXT
par BROKER
:
Puis, trouvez la ligne listener.security.protocol.map
:
Mappez BROKER
à SASL_SSL
en préfixant la définition à la valeur :
Voici la traduction demandée :
Ici, vous avez ajouté la définition pour l’alias BROKER
que vous avez utilisé dans les listeners et l’avez mappé à SASL_SSL
, ce qui signifie que tanto le SSL (un ancien nom pour TLS) que SASL doivent être utilisés.
Puis, naviguez jusqu’à la fin du fichier et ajoutez les lignes suivantes :
Vous définissez d’abord les emplacements et les mots de passe pour les magasins de confiance et de clés générés. Vous réglez le paramètre ssl.client.auth
sur required
, indiquant à Kafka de refuser toute connexion qui ne présente pas un certificat TLS valide. Ensuite, vous configurez le mécanisme SASL sur PLAIN
, ce qui l’active. PLAIN
est différent de PLAINTEXT
car il nécessite l’utilisation d’une connexion chiffrée, et les deux utilisent une combinaison d’identifiant et de mot de passe.
Finalement, vous définissez StandardAuthorizer
comme classe d’autorisation, qui vérifie les informations d’identification par rapport à un fichier de configuration que vous allez créer bientôt. Ensuite, vous réglez le paramètre allow.everyone.if.no.acl.found
sur false
, restreignant l’accès aux connexions avec des informations d’identification inappropriées. Vous définissez également l’utilisateur admin
comme superutilisateur, car il doit y en avoir au moins un pour effectuer des tâches administratives dans le cluster.
N’oubliez pas de remplacer votre_mot_de_passe_tls
par le mot de passe que vous avez passé au script dans la section précédente, puis enregistrez et fermez le fichier.
Maintenant que vous avez configuré Kafka, vous devrez créer un fichier qui définit les identifiants autorisés pour la connexion. Kafka supporte le Java Authentication and Authorization Service (JAAS), un framework pour implémenter des flux d’authentification, et accepte les définitions d’identifiants dans le format JAAS.
Vous le stockerez dans un fichier nommé kafka-server-jaas.conf
sous config/kraft
. Créez-le et ouvrez-le pour l’édition en exécutant :
Ajoutez les lignes suivantes :
Les username
et password
définissent les identifiants principaux utilisés pour la communication inter-broker dans le cluster lorsque plusieurs nœuds sont présents. La ligne user_admin
définit un utilisateur dont le nom d’utilisateur est admin
et le mot de passe admin
, qui peut se connecter au broker depuis l’extérieur. Enregistrez et fermez le fichier lorsque vous êtes terminé.
Kafka doit connaître le fichier kafka-server-jaas.conf
car il complète la configuration principale. Vous devrez modifier la configuration du service kafka
systemd et passer une référence à ce fichier. Exécutez la commande suivante pour ouvrir le service pour l’édition :
En passant en --full
, vous avez accès au contenu complet du service. Recherchez la ligne ExecStart
:
Ajoutez la ligne suivante au-dessus, de sorte qu’elle ressemble à ceci :
Avec cela, vous définissez le paramètre java.security.auth.login.config
dans le fichier de configuration sur le chemin vers le fichier de configuration JAAS, le déconnectant de la configuration principale de Kafka. Une fois terminé, enregistrez et fermez le fichier. Rechargez la définition du service en exécutant :
Ensuite, redémarrez Kafka :
Vous avez maintenant configuré à la fois le chiffrement TLS et l’authentification SASL pour votre installation de Kafka, et vous allez apprendre comment vous connecter à elle en utilisant les scripts de console fournis.
Étape 2 – Connexion à un Cluster sécurisé
Dans cette étape, vous apprendrez comment vous connecter à un cluster Kafka sécurisé en utilisant des fichiers de configuration JAAS avec les scripts de console fournis.
Les scripts fournis pour manipuler les topics, produisant et consommant des messages, utilisent également Java internement, et acceptent ainsi une configuration JAAS détaillant les emplacements des magasins de certificats de confiance et de clés, ainsi que les informations d’authentification SASL.
Vous stockeriez cette configuration dans un fichier nommé client-jaas.conf
dans votre répertoire personnel. Créez-le et ouvrez-le pour l’édition :
Ajoutez les lignes suivantes :
Vous configurez le protocole à SASL_SSL
et fournissez les chemins et le mot de passe pour les magasins de clés et de confiance que vous avez créés. Ensuite, vous définissez le mécanisme SASL à PLAIN
et fournissez les informations d’identification pour l’utilisateur admin
. Vous effacez explicitement le paramètre ssl.endpoint.identification.algorithm
pour empêcher les problèmes de connexion, car les scripts initiaux définissent le nom d’hôte de la machine sur laquelle ils sont exécutés comme le point de terminaison du certificat, ce qui peut ne pas être correct.
Remplacez your_tls_password
par la valeur appropriée, puis enregistrez et fermez le fichier.
Pour passer ce fichier aux scripts, vous pouvez utiliser le paramètre --command-config
. Essayez de créer un nouveau sujet dans le cluster avec la commande suivante :
La commande devrait s’exécuter avec succès :
Pour vérifier qu’il a été créé, listez tous les sujets dans le cluster en exécutant :
La sortie montrera que new_topic
est présent :
Dans cette section, vous avez configuré votre installation Kafka pour utiliser le cryptage TLS pour le trafic et SASL pour l’authentification avec des combinaisons d’un nom d’utilisateur et d’un mot de passe. Vous apprendrez maintenant comment exporter divers métriques Kafka via JMX en utilisant Prometheus.
Étape 3 – Surveillance des métriques JMX Kafka à l’aide de Prometheus
Dans cette section, vous utiliserez Prometheus pour collecter des métriques Kafka et les rendre exploitable dans Grafana. Cela implique de configurer l’exporteur JMX pour Kafka et de le connecter à Prometheus.
[Les Java Management Extensions (JMX) sont une plateforme pour les applications Java qui permet aux développeurs de collecter des métriques générales et personnalisées sur l’operation de l’application en temps réel dans un format standardisé. Comme Kafka est écrit en Java, il supporte le protocole JMX et expose ses métriques personnalisées à travers celui-ci, telles que l’état des topics et des brokers.
Configurer Kafka et Prometheus
Avant de continuer, vous devez installer Prometheus. Sur les machines Ubuntu, vous pouvez utiliser apt
. Mettez à jour ses dépôts en exécutant :
Ensuite, installez Prometheus :
Pour d’autres plateformes, veuillez suivre les instructions d’installation sur le site officiel.
Une fois installé, vous devrez ajouter la bibliothèque JMX exporter pour Prometheus à votre installation Kafka. Naviguez vers la page des versions et sélectionnez la dernière version avec javaagent
dans le nom. Au moment de l’écriture, la dernière version disponible était 0.20.0
. Utilisez la commande suivante pour la télécharger dans le répertoire libs/
où Kafka est installé :
La bibliothèque JMX exporter sera maintenant détectée par Kafka.
Avant d’activer l’exporter, vous devez définir les métriques qu’il rapportera à Prometheus, et vous stockerez cette configuration dans un fichier nommé jmx-exporter.yml
sous config/
de votre installation Kafka. Le projet JMX exporter fournit une configuration par défaut adéquate, donc exécutez la commande suivante pour la stocker sous le nom jmx-exporter.yml
dans config/
de votre installation Kafka :
Ensuite, pour activer l’exporter, vous devrez modifier le service systemd de Kafka. Vous devrez modifier la variable d’environnement KAFKA_OPTS
pour inclure l’exporter, ainsi que sa configuration. Exécutez la commande suivante pour modifier le service :
Modifiez la ligne Environment
pour qu’elle ressemble à ceci :
Ici, vous utilisez l’argument -javaagent
pour initialiser JMX exporter avec sa configuration.
Enregistrez et fermez le fichier lorsque vous avez terminé, puis redémarrez Kafka en exécutant :
Après un minute, vérifiez que JMX exporter fonctionne en demandant si le port 7075
est utilisé :
Voici la traduction demandée :
Cette ligne montre que le port 7075
est utilisé par un processus Java lancé par le service Kafka, ce qui fait référence à l’exportateur JMX.
Vous allez maintenant configurer Prometheus pour surveiller les métriques JMX exportées. Son fichier de configuration principal est situé à /etc/prometheus/prometheus.yml
, ouvrez-le pour l’éditer :
Trouvez les lignes suivantes :
Sous scrape_configs
, qui spécifie les points de terminaison que Prometheus doit surveiller, ajoutez une nouvelle section pour extraire les métriques Kafka :
Le job kafka
a un seul cible, qui pointe vers le point de terminaison de l’exportateur JMX.
N’oubliez pas de remplacer votre_domaine
par votre nom de domaine, puis enregistrez et fermez le fichier. Ensuite, redémarrez Prometheus en exécutant :
Dans votre navigateur, naviguez vers le port 9090
de votre domaine. Vous accéderez à l’interface utilisateur de Prometheus. Sous État, appuyez sur Cibles pour lister les jobs :
Remarquez que Prometheus a accepté le job kafka
et a commencé à balayer ses métriques. Vous apprendrez maintenant comment y accéder dans Grafana.
Interroger les métriques dans Grafana
Comme partie des prérequis, vous avez installé Grafana sur votre Droplet et l’avez exposé à your_domain
. Naviguez jusqu’à celui-ci dans votre navigateur, et dans la barre latérale, sous Connections, cliquez sur Ajouter une nouvelle connexion, puis tapez Prometheus dans le champ de recherche.
Cliquez sur Prometheus, ensuite cliquez sur le bouton Ajouter une nouvelle source de données en haut à droite. Vous serez invité à entrer l’adresse d’une instance de Prometheus :
Entrez http://your_domain_name:9090
, remplacez-y votre nom de domaine réel, puis défiler vers le bas et cliquez sur Enregistrer & tester. Vous devriez recevoir un message de succès :
La connexion Prometheus a été ajoutée à Grafana. Cliquez sur Explorer dans la barre latérale, et vous serez invité à sélectionner une métrique. Vous pouvez entrer kafka_
pour lister toutes les métriques liées au cluster, comme illustré :
Par exemple, sélectionnez la métrique kafka_log_log_size
, qui montre la taille de la log interne sur disque par partition, ensuite cliquez sur Exécuter la requête en haut à droite. Vous verrez les tailles résultantes au fil du temps pour chacun des topics disponibles :
Dans cette étape, vous avez configuré l’exportation des métriques JMX que Kafka fournit et configurez Prometheus pour les scraper. Ensuite, vous vous êtes connecté à Grafana et avez exécuté une requête sur les métriques de Kafka. Vous allez maintenant apprendre comment gérer un cluster Kafka à l’aide d’une interface Web.
Étape 4 – Gestion de clusters Kafka avec AKHQ
Dans cette étape, vous apprendrez comment installer et utiliser AKHQ, une application Web pour gérer les clusters Kafka. Elle vous permet de lister et de manipuler les topics, les partitions, les groupes de consommateurs et les paramètres de configuration, ainsi que de produire et de consommer des messages à partir de topics en un seul endroit.
Vous stockerez l’exécutable et sa configuration dans un répertoire nommé akhq
. Créez-le dans votre répertoire personnel en exécutant :
Allez-y :
Dans votre navigateur, visitez la page des versions officielles et copiez le lien vers le fichier JAR de la dernière version. Au moment de l’écriture, la dernière version était la 0.24.0
. Exécutez la commande suivante pour le télécharger vers votre répertoire personnel :
Vous avez maintenant téléchargé AKHQ et êtes prêt à définir sa configuration pour vous connecter à votre cluster. Vous allez stocker cela dans un fichier nommé akhq-config.yml
. Créez-le et ouvrez-le en édition en exécutant :
Ajoutez les lignes suivantes :
Ceci est une configuration de base d’AKHQ, spécifiant un cluster à localhost:9092
avec les paramètres SASL et TLS correspondants spécifiés. Plusieurs clusters simultanés sont également pris en charge car vous pouvez définir autant de connexions que vous le souhaitez. Cela rend AKHQ polyvalent pour gérer Kafka. Quand vous aurez terminé, enregistrez et fermez le fichier.
Ensuite, vous devrez définir un service systemd
pour exécuter AKHQ en arrière-plan. Les services systemd
peuvent être démarrés, arrêtés et redémarrés de manière cohérente.
Vous stockerarez la configuration du service dans un fichier nommé code-server.service
, dans le répertoire /lib/systemd/system
, où systemd stocke ses services. Créez-le en utilisant votre éditeur de texte :
Ajoutez les lignes suivantes :
Vous définissez d’abord la description du service. Ensuite, dans la section [Service]
, vous définissez le type de service (simple
signifie que la commande doit simplement s’exécuter) et fournissez la commande qui sera exécutée. Vous spécifiez également que le service s’exécute en tant que utilisateur kafka
et que le service doit être redémarré automatiquement s’il se termine.
La section [Install]
ordonne à systemd de démarrer ce service lorsque vous pouvez vous connecter à votre serveur. Enregistrez et fermez le fichier lorsque vous aurez terminé.
Chargez la configuration du service en exécutant :
Démarrez le service AKHQ en exécutant la commande suivante :
Ensuite, vérifiez qu’il est démarré correctement en observant son état :
La sortie devrait ressembler à cela :
AKHQ fonctionne désormais en arrière-plan. Par défaut, il est exposé au port 8080
. Dans votre navigateur, naviguez vers votre domaine avec ce port pour y accéder. Vous verrez la vue par défaut, affichant la liste des sujets :
Vous pouvez double-cliquer sur la ligne correspondante du sujet dans le tableau pour y accéder et obtenir une vue détaillée :
AKHQ vous permet de voir les messages du sujet, ainsi que les partitions, les groupes de consommateurs et leur configuration. Vous pouvez également vider ou copier le sujet à l’aide des boutons en bas à droite.
Puisque le sujet new_topic
est vide, appuyez sur le bouton Produire pour le sujet, ce qui ouvrira l’interface pour sélectionner les paramètres du nouveau message :
AKHQ remplira automatiquement le nom du sujet pour vous. Dans le champ Valeur, entrez Hello World !
, puis appuyez sur Produire. Le message sera envoyé à Kafka et vous le verrez dans l’onglet Données :
Comme le contenu d’un message peut être très volumineux, AKHQ n’affiche que la première ligne. Pour voir le message complet, appuyez sur la zone sombre après la ligne pour le révéler.
Dans la barre latérale de gauche, vous pouvez également lister les courtiers du cluster en appuyant sur Noeuds. Actuellement, le cluster ne consiste qu’en un seul nœud :
En double-cliquant sur un nœud, vous ouvrirez sa configuration, ce qui vous permet de modifier tous les paramètres à distance :
Une fois les modifications effectuées, vous pouvez les appliquer en appuyant sur le bouton Mettre à jour les configurations situé en bas à droite. De même, vous pouvez afficher et modifier la configuration de n’importe lequel des sujets en y accédant et en passant à l’onglet Configurations.
Dans cette section, vous avez configuré AKHQ, une application Web offrant une interface utilisateur facile à utiliser pour gérer et observer les nœuds et les sujets Kafka à distance. Il vous permet de produire et consommer des messages dans les sujets et de mettre à jour les paramètres de configuration des sujets et des nœuds en direct.
Conclusion
Dans ce tutoriel, vous avez sécurisé votre installation Kafka en configurant TLS pour l’encryption et SASL pour l’authentification des utilisateurs. Vous avez également configuré l’exportation de métriques à l’aide de Prometheus et les visualisées dans Grafana. Ensuite, vous avez appris à utiliser AKHQ, une application Web pour gérer les clusters Kafka.
L’auteur a choisi la Fondation Apache pour recevoir une donation dans le cadre du programme Write for DOnations..
Source:
https://www.digitalocean.com/community/developer-center/how-to-secure-and-monitor-kafka