Configuration de l'authentification Kerberos
Kerberos est le fondement de la sécurité ODP. Chaque principal de service, chaque accès à un bloc HDFS et chaque connexion JDBC passe par des tickets Kerberos. Ce guide couvre la mise en place de bout en bout, des prérequis d'infrastructure jusqu'à la vérification d'un realm fonctionnel.
Prérequis
DNS — obligatoire, sans exception
Kerberos repose sur les noms de domaine complets (FQDN) pour les résolutions directes et inverses. Avant de toucher à un KDC ou à l'assistant Ambari :
- Chaque nœud doit résoudre tous les autres nœuds par leur FQDN.
- Les enregistrements PTR inverses doivent correspondre aux enregistrements A directs.
- Les noms d'hôte doivent être cohérents :
hostname -fsur chaque nœud doit retourner le FQDN utilisé dans la zone DNS.
Tester depuis chaque nœud avant de continuer :
# Direct
dig +short master01.dev01.hadoop.clemlab.com
# Inverse
dig +short -x 192.168.10.11
Si l'une des résolutions échoue ou retourne un nom différent, arrêtez-vous et corrigez le DNS d'abord.
NTP — le décalage d'horloge détruit les tickets Kerberos
Les tickets Kerberos ont des fenêtres de validité. Par défaut, une différence d'horloge supérieure à 5 minutes entre le client et le KDC provoque un échec d'authentification avec KRB5KRB_AP_ERR_SKEW.
# RHEL 9 / Rocky 9 — chrony est le démon NTP par défaut
timedatectl status
chronyc tracking
Tous les nœuds doivent se synchroniser sur la même source NTP. Configurez /etc/chrony.conf si nécessaire et redémarrez chronyd.
Choix du KDC : MIT KDC vs FreeIPA
| Critère | MIT KDC | FreeIPA |
|---|---|---|
| Périmètre | KDC uniquement | KDC + LDAP + DNS + CA + interface web |
| Recommandation ODP | Déploiements minimaux | Recommandé pour ODP |
| Annuaire utilisateurs | LDAP externe requis pour la synchronisation Ranger | 389-DS LDAP intégré |
| Autorité de certification | Manuelle | Dogtag CA (intégré) |
| DNS | Manuel | BIND intégré |
| Support de l'assistant Ambari | Oui | Oui |
ODP recommande FreeIPA car il élimine le besoin de déployer et d'intégrer séparément un serveur LDAP (requis par Ranger pour la synchronisation utilisateurs/groupes), une CA (requise pour les certificats TLS) et un serveur DNS — le tout dans un seul package éprouvé.
Installation du serveur FreeIPA
Un serveur FreeIPA dédié (non co-localisé avec les services Hadoop) est la topologie recommandée.
# RHEL 9 / Rocky 9
dnf install -y freeipa-server freeipa-server-dns
# Lancer l'installateur — adapter le realm, le domaine et les IPs à votre environnement
ipa-server-install \
--realm=DEV01.HADOOP.CLEMLAB.COM \
--domain=dev01.hadoop.clemlab.com \
--ds-password=<directory-manager-password> \
--admin-password=<ipa-admin-password> \
--hostname=ipa01.dev01.hadoop.clemlab.com \
--ip-address=192.168.10.5 \
--setup-dns \
--forwarder=8.8.8.8 \
--no-ntp \
--mkhomedir \
--unattended
Après l'installation, enrôler chaque nœud Hadoop en tant que client IPA :
# Sur chaque nœud Hadoop
dnf install -y freeipa-client
ipa-client-install \
--server=ipa01.dev01.hadoop.clemlab.com \
--domain=dev01.hadoop.clemlab.com \
--realm=DEV01.HADOOP.CLEMLAB.COM \
--principal=admin \
--password=<ipa-admin-password> \
--mkhomedir \
--unattended
Création du realm Hadoop
Avec FreeIPA, le realm est créé automatiquement lors de ipa-server-install. Le nom du realm doit être la version en majuscules du domaine :
- Domaine :
dev01.hadoop.clemlab.com - Realm :
DEV01.HADOOP.CLEMLAB.COM
Vérifier la configuration Kerberos sur chaque nœud :
cat /etc/krb5.conf
# Doit afficher [libdefaults] default_realm = DEV01.HADOOP.CLEMLAB.COM
Assistant Kerberos Ambari (création automatique de principals)
Ambari inclut un assistant Kerberos qui automatise la création de tous les principals de service et keytabs. C'est la méthode recommandée pour les clusters ODP.
Étapes
- Dans l'interface Ambari (
https://<hôte-ambari>:8442), aller dans Admin → Kerberos. - Cliquer sur Enable Kerberos.
- Sélectionner Existing IPA (ou Existing MIT KDC selon le cas).
- Saisir l'hôte KDC, le realm et les identifiants administrateur.
- Ambari vérifie la connectivité, puis génère tous les principals et distribue les keytabs automatiquement.
- Examiner la liste des principals et cliquer sur Suivant jusqu'à la fin de l'assistant.
- Ambari redémarre tous les services après la distribution des keytabs.
Ambari crée les principals selon le schéma <service>/<fqdn>@REALM et stocke les keytabs dans /etc/security/keytabs/ sur chaque nœud.
Création manuelle de principals (kadmin)
Pour créer des principals en dehors de l'assistant (par exemple, pour des comptes de service applicatifs) :
# Se connecter à kadmin — depuis une session admin IPA ou un admin KDC MIT
kadmin -p admin@DEV01.HADOOP.CLEMLAB.COM
# Dans l'invite kadmin :
addprinc -randkey hdfs/master01.dev01.hadoop.clemlab.com@DEV01.HADOOP.CLEMLAB.COM
addprinc -randkey HTTP/master01.dev01.hadoop.clemlab.com@DEV01.HADOOP.CLEMLAB.COM
addprinc -randkey yarn/master01.dev01.hadoop.clemlab.com@DEV01.HADOOP.CLEMLAB.COM
# Exporter le keytab
ktadd -k /etc/security/keytabs/hdfs.headless.keytab \
hdfs/master01.dev01.hadoop.clemlab.com@DEV01.HADOOP.CLEMLAB.COM
quit
Avec FreeIPA, utiliser les commandes ipa pour les opérations en masse :
ipa service-add hdfs/master01.dev01.hadoop.clemlab.com
ipa-getkeytab -s ipa01.dev01.hadoop.clemlab.com \
-p hdfs/master01.dev01.hadoop.clemlab.com@DEV01.HADOOP.CLEMLAB.COM \
-k /etc/security/keytabs/hdfs.headless.keytab
Distribution des keytabs
Les keytabs sont des fichiers binaires sensibles qui agissent comme des équivalents de mots de passe. Les manipuler avec précaution :
# Définir la propriété et les permissions correctes après distribution
chown hdfs:hadoop /etc/security/keytabs/hdfs.headless.keytab
chmod 400 /etc/security/keytabs/hdfs.headless.keytab
# Vérifier le contenu du keytab
klist -kt /etc/security/keytabs/hdfs.headless.keytab
Ambari gère les permissions des keytabs automatiquement lors de l'utilisation de l'assistant Kerberos. Pour les keytabs créés manuellement, s'assurer que le fichier appartient à l'utilisateur OS du service avec les droits 0400.
Vérification de Kerberos avec kinit
Après la configuration, vérifier que l'authentification fonctionne de bout en bout :
# Tester avec un principal utilisateur
kinit user@DEV01.HADOOP.CLEMLAB.COM
klist
# Tester avec un keytab de service
kinit -kt /etc/security/keytabs/hdfs.headless.keytab \
hdfs/master01.dev01.hadoop.clemlab.com@DEV01.HADOOP.CLEMLAB.COM
klist
# Vérifier l'accès HDFS sous Kerberos
hdfs dfs -ls /
Pour la vérification du principal NameNode HDFS :
hdfs dfsadmin -report
Dépannage
Erreur de décalage d'horloge
KrbException: KDC has no support for encryption type (14) - PREAUTH_FAILED
# ou
KRB5KRB_AP_ERR_SKEW Clock skew too great
Correction : synchroniser immédiatement les horloges sur tous les nœuds et le KDC.
chronyc makestep # Forcer une synchronisation NTP immédiate
timedatectl status
Problème DNS
KrbException: Cannot locate KDC for requested realm
Correction : vérifier que /etc/resolv.conf pointe vers le serveur FreeIPA/DNS. Vérifier que hostname -f sur chaque nœud retourne un FQDN qui se résout directement et inversement.
Incompatibilité de principal keytab
KrbException: Client not found in Kerberos database
Correction : exécuter klist -kt <keytab> pour confirmer le nom du principal. S'assurer qu'il correspond exactement à ce qui est dans la configuration du service Ambari.
Ticket expiré
GSSException: No valid credentials provided (Mechanism level: Fail to create credential)
Correction : renouveler ou réacquérir le ticket :
kinit -R # Renouveler dans la fenêtre de renouvellement
# ou
kinit -kt /etc/security/keytabs/hdfs.headless.keytab \
hdfs/<fqdn>@REALM
Le cron kinit_cmd d'Ambari s'exécute automatiquement pour les keytabs de service lorsque le cluster est géré par Ambari.