Fondamentaux de la sécurité des clusters
La sécurisation d'un environnement TongSearch en production repose sur une stratégie multicouche. Il ne suffit pas de restreindre l'accès réseau ; il est impératif d'intégrer le chiffrement des flux, une authentification forte et un contrôle granulaire des accès (RBAC). Les piliers de cette configuration sont :
- Chiffrement TLS : Protection des données en transit entre les nœuds et vers les clients.
- Authentification : Identification rigoureuse des utilisateurs et des services.
- Autorisation : Définition précise des droits via des rôles.
- Audit : Suivi des activités pour détecter les anomalies.
Mise en œuvre du chiffrement TLS
Le protocole TLS (Transport Layer Secuirty) garantit l'intégrité et la confidentialité des échanges. TongSearch intègre l'utilitaire tongsearch-certutil pour simplifier la gestion des certificats.
Génération de l'autorité de certification (CA)
Pour signer les certificats du cluster, commencez par créer votre propre autorité de certification :
bin/tongsearch-certutil ca --out autorite-certification-tong.p12
Ce fichier .p12 servira de racine de confiance pour l'ensemble du déploiement.
Création des certificats de nœuds
Utilisez ensuite la CA pour générer les certificats spécifiques à chaque instance :
bin/tongsearch-certutil cert --ca autorite-certification-tong.p12 --out certificats-noeuds-tong.p12
Ce fichier contient la clé privée, le cetrificat signé et la chaîne de confiance de l'autorité.
Configuration du chiffrement de la couche transport
La communication interne au cluster (entre les nœuds) doit impérativement être sécurisée. Éditez le fichier tongsearch.yml :
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: "/etc/tongsearch/securite/certificats-noeuds-tong.p12"
xpack.security.transport.ssl.truststore.path: "/etc/tongsearch/securite/certificats-noeuds-tong.p12"
Le mode de vérification certificate valide l'authenticité de la chaîne, tandis que le mode full vérifie également la correspondance avec le nom d'hôte (recommandé pour une sécurité maximale en production).
Sécurisation des accès HTTP
Pour protéger l'interface API REST exposée aux clients externes, activez TLS sur la couche HTTP :
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: "/etc/tongsearch/securite/certificats-noeuds-tong.p12"
xpack.security.http.ssl.truststore.path: "/etc/tongsearch/securite/certificats-noeuds-tong.p12"
Une fois activé, l'accès au cluster se fera exclusivement via https://.
Contrôle d'accès basé sur les rôles (RBAC)
Le contrôle granulaire permet de limiter les privilèges au strict nécessaire. Les rôles sont définis dans roles.yml ou via l'API.
Définition d'un administrateur système
role_super_admin:
cluster: [ "all" ]
indices:
- names: [ "*" ]
privileges: [ "all" ]
Restriction pour les utilisateurs en lecture seule
role_lecteur_specifique:
cluster: [ "monitor" ]
indices:
- names: [ "archives-2023-*", "donnees-publiques-*" ]
privileges: [ "read", "view_index_metadata" ]
Diagnostic et résolution des problèmes de sécurité
La mise en place de la sécurité peut engendrer des erreurs de configuration complexes. Voici comment les aborder méthodiquement.
Échecs d'authentification
Si un utilisateur ne peut pas se connecter, vérifiez d'abord son existence locale :
./bin/tongsearch-users list
Pour réinitialiser ou ajouter un utilisateur avec un rôle spécifique :
./bin/tongsearch-users useradd identifiant_test -p motdepasse123 -r role_lecteur_specifique
Consultez les logs pour identifier les rejets :
grep "AuthenticationService" /var/log/tongsearch/tongsearch.log
Problèmes liés au protocole SSL/TLS
Les erreurs de type SSLHandshakeException indiquent souvent une discordance entre les certificats ou une autorité de certification non reconnue. Testez la connexion avec curl en spécifiant explicitement le certificat CA :
curl -u admin_user:secret --cacert /etc/tongsearch/securite/ca.crt -X GET "https://127.0.0.1:9200/_cluster/health"
Analyse des autorisations
Lorsqu'un utilisateur reçoit un message d'erreur de type "action forbidden", analysez les logs d'autorisation pour identifier le privilège manquant :
tail -n 100 /var/log/tongsearch/tongsearch.log | grep "AuthorizationService"
Cela permet de voir précisément quelle action (ex: indices:data/write/index) a été refusée sur quel index.