Aller au contenu principal
Version: 1.3.1.0

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 -f sur 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èreMIT KDCFreeIPA
PérimètreKDC uniquementKDC + LDAP + DNS + CA + interface web
Recommandation ODPDéploiements minimauxRecommandé pour ODP
Annuaire utilisateursLDAP externe requis pour la synchronisation Ranger389-DS LDAP intégré
Autorité de certificationManuelleDogtag CA (intégré)
DNSManuelBIND intégré
Support de l'assistant AmbariOuiOui

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

  1. Dans l'interface Ambari (https://<hôte-ambari>:8442), aller dans Admin → Kerberos.
  2. Cliquer sur Enable Kerberos.
  3. Sélectionner Existing IPA (ou Existing MIT KDC selon le cas).
  4. Saisir l'hôte KDC, le realm et les identifiants administrateur.
  5. Ambari vérifie la connectivité, puis génère tous les principals et distribue les keytabs automatiquement.
  6. Examiner la liste des principals et cliquer sur Suivant jusqu'à la fin de l'assistant.
  7. 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.