Utilisation de Kerberos dans le Studio Talend avec Big Data v6.x

EnrichVersion
6.5
EnrichProdName
Talend Big Data
Talend Data Fabric
Talend Open Studio for Big Data
Talend Real-Time Big Data Platform
Talend Big Data Platform
task
Création et développement > Création de Jobs > Distributions Hadoop
Gouvernance de données > Systèmes tiers > Composants d'authentication > Composants Kerberos
Création et développement > Systèmes tiers > Composants d'authentication > Composants Kerberos
Qualité et préparation de données > Systèmes tiers > Composants d'authentication > Composants Kerberos
EnrichPlatform
Studio Talend

Utilisation de Kerberos dans le Studio Talend avec Big Data v6.x

Cet article décrit comment configurer le Studio Talend afin qu'il fonctionne avec un cluster Hadoop utilisant Kerberos.

Internet est plein de risques. Les applications envoyant des mots de passe non chiffrés sont extrêmement vulnérables. Les entreprises utilisent des pare-feux mais ont tendance à penser que les "mauvaises personnes" ne sont pas dans l'entreprise, ce qui est une mauvaise manière de penser.

Kerberos est un système d'authentification créé par le MIT comme solution à ces problèmes de sécurité de réseau. Il fournit une protection mutuelle des deux côtés d'une transaction. Le protocole Kerberos utilise une cryptographie forte afin qu'un client puisse prouver son identité à un serveur (et vice versa) à travers une connexion réseau non sécurisée. Une fois qu'un client et un serveur ont utilisé Kerberos pour prouver leur identité, ils peuvent également chiffrer toutes leurs communications pour assurer la confidentialité et l'intégrité des données lors des activités de l'entreprise.

Pour plus d'informations concernant Kerberos, consultez la documentation de MIT Kerberos (en anglais).

Implémentation de Kerberos

Kerberos est mature, architecturalement sûr et répond aux besoins des systèmes distribués modernes.

Concepts

Le nom du protocole Kerberos se base sur le chien à trois têtes de la mythologie grecque, Cerbère (Kerberos en grec). Les trois têtes du protocole Kerberos comprennent :

  • le centre de distribution de clés (KDC, Key Distribution Center),

  • l'utilisateur client,

  • le serveur avec accès au service souhaité.

Le centre de distribution de clés : un centre est installé sur le réseau pour gérer la sécurité de Kerberos. Il exécute deux fonctions liées aux services : le Service d'Authentification (Authentication Service, SA) et le Service d'émission de tickets (Ticket-Granting Service, TGS).

Service d'Authentication : Un Service d'Authentification est un service accessible par le réseau s'exécutant dans le centre de distribution de clés et est utilisé pour authentifier les appelants.

Service d'émission de tickets : ce service accorde les accès aux services spécifiques.

Workflow

Le diagramme suivant illustre le workflow pour établir une session sécurisée entre le serveur et le client.

  1. L’utilisateur exécute une commande kinit depuis le client pour obtenir explicitement les tickets Kerberos.

  2. Une fois authentifié, l'utilisateur reçoit un ticket pour d'autre tickets (Ticket to Get Tickets, TGT), valide pour le domaine local (royaume, realm). Le ticket expire et doit être renouvelé par une reconnexion de l'utilisateur à la session, sans saisir à nouveau le mot de passe. Le Service d'authentification envoie le ticket chiffré avec une clé que seul le centre de distribution de clés peut déchiffrer et une clé de session chiffrée avec le hash du mot de passe utilisateur. L'utilisateur présente son ticket pour d'autres tickets à la partie d'émission de tickets du centre de distribution de clés, pour demander l'accès au serveur du service. Le service d'émission de tickets du centre de distribution de clés authentifie le ticket pour d'autres tickets de l'utilisateur et crée un ticket et une clé de session pour le client et le serveur distant.

  3. Une fois l'utilisateur client en possession du ticket de service client/serveur, l’utilisateur peut établir la session avec le service du serveur. Le serveur peut déchiffrer les informations provenant indirectement du service d'émission de tickets à l'aide de sa clé à long terme avec le centre de distribution de clés.

  4. Le ticket de service est utilisé pour authentifier l'utilisateur client et établir une session de service entre le serveur et le client. Une fois le ticket arrivé à expiration, il doit être renouvelé pour pouvoir utiliser le service.

Installation et configuration du client Kerberos

Cette section décrit comment installer Kerberos sur votre cluster et configurer les utilisateurs pour des interactions sécurisées. Dans les exemples suivants, une distribution Cloudera de Hadoop est utilisée.

Installation et configuration d'un client Kerberos sous Linux (serveur de Jobs)

Cette procédure vous montre comment installer et configurer un client Kerberos sous Linux.

Procédure

  1. Exécutez la commande yum yum install krb5-workstation pour installer le client Kerberos.
  2. Mettez à jour les politiques de sécurité de la JRE à utiliser, à l'aide du patch sur le site de téléchargement Oracle (en anglais).

    Cette mise à jour est nécessaire à cause des restrictions des États-Unis sur les importations. Pour plus d'informations, consultez le fichier README.txt dans le fichier téléchargé.

    Pour faire cette mise à jour, vous pouvez simplement copier les fichiers de politiques JCE originaux (US_export_policy.jar et local_policy.jar dans JAVA_HOME/lib/security) à des fins de sauvegarde et remplacer ces fichiers originaux par les fichiers de politiques correspondants contenu dans le fichier jce_policy-6.0.zip téléchargé.

  3. Configurez Kerberos sur une machine locale en modifiant le fichier /etc/krbf.conf.

    Vous pouvez trouver un fichier d'exemple sur le site MIT configuration doc (en anglais). Pour plus d'informations concernant les paramètres, consultez la page MIT documentation (en anglais).

Installation et configuration d'un client Kerberos sous Windows (Studio)

Cette procédure vous explique comment installer et configurer un client Kerberos sous Windows.

Procédure

  1. Téléchargez Kerberos pour Windows, version 4.0.1 et installez-le, à partir de ce site de distribution MIT.
  2. Mettez à jour les politiques de sécurité de la JRE à utiliser, à l'aide du patch sur le site de téléchargement Oracle (en anglais).

    Cette mise à jour est nécessaire à cause des restrictions des États-Unis sur les importations. Pour plus d'informations, consultez le fichier README.txt dans le fichier téléchargé.

    Pour faire cette mise à jour, vous pouvez simplement copier les fichiers de politiques JCE originaux (US_export_policy.jar et local_policy.jar dans JAVA_HOME/lib/security) à des fins de sauvegarde et remplacer ces fichiers originaux par les fichiers de politiques correspondants contenu dans le fichier jce_policy-6.0.zip téléchargé.

  3. Configurez Kerberos sur une machine locale en paramétrant le fichier krb5.ini.

    Vous pouvez trouver un fichier d'exemple sur le site MIT configuration doc (en anglais).

    L'emplacement du fichier peut être spécifié par la propriété système java.security.krb5.conf. Si cette propriété n'est pas configurée, Java va essayer de trouver ce fichier aux emplacements suivants :

    1. %JAVA_HOME%/lib/security/krb5.conf

    2. %WINDOWS_ROOT%/krb5.ini

    Vous pouvez également utiliser les propriétés système java.security.krb5.realm et java.security.krb5.kdc.

Configuration des utilisateurs de Kerberos

Une fois Kerberos installé et configuré sur le cluster, l'administrateur du Cluster doit créer les utilisateurs clients.

Procédure

Configurez les utilisateurs clients en tant que Principaux, avec des clés à long terme dans le centre de distribution de clés (KDC), à l'aide de la commande kadmin.local.

Dans l'exemple suivant, un Principal pour un utilisateur Cloudera est en cours d'ajout.

Import de métadonnées Hadoop

Avant de connecter le Studio Talend au cluster Hadoop, la bonne pratique consiste à importer les métadonnées Hadoop manuellement, ou à l'aide de l'assistant.

Pour plus d'informations détaillées, consultez Gérer les métadonnées Hadoop.

Cette procédure vous explique comment importer des métadonnées Hadoop pour Cloudera à l'aide de l'assistant d'import.

Procédure

  1. Sélectionnez l'option Retrieve configuration from Ambari or Cloudera pour ouvrir la fenêtre de configuration de Cloudera Manager.
  2. Saisissez l'URL de Cloudera Manager dans le premier champ, cliquez sur le bouton Connect, puis cliquez sur Fetch.

Connexion du Client (Studio/serveur de Jobs) au cluster

Lorsque le Studio Talend est utilisé pour interroger des services depuis une distribution Hadoop utilisant Kerberos, vous devez configurer la connexion à cette distribution Hadoop dans le Studio. Cela permet au Studio d'utiliser votre service d'émission de tickets (Kerberos Ticket Granting Ticket) pour effectuer des transactions avec cette distribution Hadoop sécurisée.

Les connexions à un cluster utilisant Kerberos peuvent être créées à l'aide de kinit ou keytab. Les sections suivantes décrivent comment effectuer chaque configuration et comment tester la connexion en écrivant des données dans le cluster.

Connexion au cluster à l'aide de kinit

Avec la méthode 'kinit', l'utilisateur exécutant le Job doit s'authentifier via Kerberos. Voici un exemple de configuration.

Configuration d'une connexion à l'aide de kinit

Procédure

  1. Sur la machine client, exécutez la commande kinit pour obtenir un ticket pour d'autres tickets (TGT). Lorsque cela vous est demandé, saisissez le mot de passe configuré lors de la création du Principal de l'utilisateur client.
    Conseil : Pour plus d'informations concernant cette commande, consultez Obtaining tickets with kinit (en anglais) dans la documentation de MIT Kerberos.

    Lorsque le mot de passe est correct, un ticket est généré et stocké sur la machine client.

  2. Dans la perspective Integration du Studio Talend, créez un Job vide.
  3. Déposez un tHDFSConnection dans l'espace de modélisation graphique, qui sera utilisé pour connecter le Studio au cluster Hadoop.
  4. Double-cliquez sur le tHDFSConnection pour ouvrir sa vue Component.
  5. Sélectionnez Repository dans la liste Property Type et cliquez sur le bouton […] pour sélectionner la connexion à HDFS créée dans l'étape précédente.

Résultats

Les champs NameNode URI et Namenode principal sont automatiquement renseignés avec les informations de connexion.

Écriture de données dans un cluster hadoop sécurisé

Pour confirmer que votre connexion est correctement configurée, essayez d'écrire dans le cluster Hadoop.

Dans l'exemple suivant, le tFixedFlowInput est utilisé pour lire des enregistrements et le tHDFSOutput est utilisé pour écrire des enregistrements dans le cluster Hadoop.

Lecture de données d'entrée

Procédure

  1. Dans le Job créé dans la section précédente, déposez un tFixedFlowInput et un tHDFSOutput.
  2. Reliez le tHDFSConnection configuré dans la section précédente au tFixedFlowInput, à l'aide d'un lien Trigger > On Subjob Ok.
  3. Reliez le tFixedFlowInput au tHDFSOutput à l'aide d'un lien Row > Main.
  4. Double-cliquez sur le tFixedFlowInput pour ouvrir sa vue Component.
  5. Sélectionnez Use Inline Content et, dans le champ Field Separator, saisissez un point-virgule (;).
  6. Dans le panneau Content, collez les enregistrements suivants comme données de test.
    1; Texas
    2; California
    3; Illinois
    4; New York
    5; Florida
  7. Cliquez sur Edit schema pour définir le schéma des données d'entrée.
  8. Cliquez deux fois sur le bouton [+] pour ajouter deux lignes à l'éditeur de schéma. Renommez ces lignes id et name, respectivement.
  9. Cliquez sur OK pour valider ces modifications et acceptez la propagation proposée par la boîte de dialogue qui s'ouvre.

Écriture de données dans Hadoop

Procédure

  1. Double-cliquez sur le tHDFSOutput pour ouvrir sa vue Component.
  2. Cochez la case Use an existing connection pour réutiliser la connexion à Hadoop définie dans la section précédente.
  3. Dans le champ File Name, saisissez le chemin d'accès, ou parcourez votre système jusqu'au répertoire HDFS dans lequel vous souhaitez écrire les données. Ce répertoire est créé s'il n'existe pas dans HDFS.

    Dans cette étape, si vous pouvez naviguer dans le système HDFS, cela signifie que la connexion sécurisée définie dans la section précédente est bien établie.

  4. Dans la liste Type, sélectionnez Text File.
  5. Dans la liste Action, sélectionnez Create.
  6. Dans le champ Field Separator, saisissez \t.
  7. Appuyez sur F6 pour exécuter le Job et regardez les résultats dans Hue, la console Web de Cloudera du service HDFS.

Connexion au cluster à l'aide de keytab

Pour une méthode alternative à celle via kinit, vous pouvez utiliser un keytab pour charger les données.

Un fichier keytab est un fichier contenant des paires de Principaux et clés chiffrées Kerberos. Ces clés sont dérivées du mot de passe Kerberos. Vous pouvez utiliser ce fichier pour vous connecter à Kerberos sans qu'un mot de passe vous soit demandé. L'utilisation la plus courante des fichiers keytab est de permettre aux scripts l'authentification via Kerberos sans interaction humaine, ou de stocker un mot de passe dans un fichier en plein texte.

En utilisant un keytab, l'utilisateur exécutant le Job Talend ne doit pas faire de 'kinit'. De plus, selon le contenu du keytab, l'utilisateur exécutant le Job Talend peut utiliser un utilisateur différent. Pour cette raison, le keytab doit être uniquement transféré de manière sécurisée dans le système de fichiers et l'accès doit être limité aux processus nécessitant cet accès.

Voici un exemple de configuration pour générer un keytab et l'utiliser dans un Job Talend pour charger des données.

Configuration d'une connexion

Procédure

  1. Créez un keytab pour l'utilisateur "kuser1". Vous pouvez utiliser la commande kadmin.local pour ajouter des Principaux et créer des fichiers keytab, comme ci-dessous.
  2. Récupérez le fichier keytab sur la machine client. Utilisez le composant Talend tSCPGet ou récupérez-le manuellement à l'aide de la commande UNIX cp.

    Dans cet exemple, la commande cp est utilisée pour déplacer le fichier keytab du répertoire "home" UNIX de l'utilisateur "kuser1" où l'accès en lecture au fichier keytab est fourni.

    [root@quickstart cloudera]# cp /tmp/kuser1.keytab /home/kuser1
  3. Dans la perspective Integration du Studio Talend, créez un Job vide.
  4. Déposez un tHDFSConnection dans l'espace de modélisation graphique, qui sera utilisé pour connecter le Studio au cluster Hadoop.
  5. Double-cliquez sur le tHDFSConnection pour ouvrir sa vue Component.
  6. Dans la zone Version, sélectionnez la distribution à laquelle se connecter.

    Dans ce scénario, sélectionnez Cloudera dans la liste Distribution et Cloudera CDH5.4 dans la liste Hadoop version.

  7. Dans le champ NameNode URI, saisissez l'emplacement du NameNode. Si vous utilisez WebHDFS, l'emplacement doit être webhdfs://masternode:portnumber. Si ce WebHDFS est sécurisé via SSL, le schéma d'URI doit être swebhdfs et vous devez utiliser un tLibraryLoad dans le Job pour charger la bibliothèque requise par votre WebHDFS sécurisé.

    Dans cet exemple, saisissez hdfs://quickstart.cloudera:8020.

  8. Cochez la case Use Kerberos authentication et saisissez nn/_HOST@EXAMPLE.COM dans le champ NameNode principal.
    Conseil : Vous pouvez trouver la valeur du Principal du NameNode dans le fichier hdfs-site.xml du cluster que vous utilisez.
  9. Cochez la case Use a keytab to authenticate.
  10. Dans le champ Principal, saisissez le nom du Principal du fichier keytab.
    kuser1 dans cet exemple.
  11. Dans le champ Keytab, saisissez le chemin d'accès ou parcourez votre système jusqu'au fichier keytab récupéré dans la section précédente.

Écriture de données dans un cluster hadoop sécurisé

Pour confirmer que votre connexion est correctement configurée, essayez d'écrire dans le cluster Hadoop.

Dans l'exemple suivant, le tFixedFlowInput est utilisé pour lire des enregistrements et le tHDFSOutput est utilisé pour écrire des enregistrements dans le cluster Hadoop.

Lecture de données d'entrée

Procédure

  1. Dans le Job créé dans la section précédente, déposez un tFixedFlowInput et un tHDFSOutput.
  2. Reliez le tHDFSConnection configuré dans la section précédente au tFixedFlowInput, à l'aide d'un lien Trigger > On Subjob Ok.
  3. Reliez le tFixedFlowInput au tHDFSOutput à l'aide d'un lien Row > Main.
  4. Double-cliquez sur le tFixedFlowInput pour ouvrir sa vue Component.
  5. Sélectionnez Use Inline Content et, dans le champ Field Separator, saisissez un point-virgule (;).
  6. Dans le panneau Content, collez les enregistrements suivants comme données de test.
    1; Texas
    2; California
    3; Illinois
    4; New York
    5; Florida
  7. Cliquez sur Edit schema pour définir le schéma des données d'entrée.
  8. Cliquez deux fois sur le bouton [+] pour ajouter deux lignes à l'éditeur de schéma. Renommez ces lignes id et name, respectivement.
  9. Cliquez sur OK pour valider ces modifications et acceptez la propagation proposée par la boîte de dialogue qui s'ouvre.

Configuration de Cloudera

Cette configuration permet de créer un répertoire home pour un utilisateur kuser1 dans Hadoop HDFS. Cela est possible via l'utilisation des outils d'administration basés Web de Cloudera.

Pour plus d'informations concernant la configuration de Cloudera, consultez Mapping Kerberos Principals to Short Names (en anglais) dans la documentation de Cloudera.

Pour plus d'informations concernant le mapping de Principaux vers des utilisateurs HDFS, consultez Configuring the Mapping from Kerberos Principals to Short Names (en anglais) dans la documentation de Cloudera.

Procédure

  1. Connectez-vous à Hue et créez un nouvel utilisateur nommé kuser1, puis ajoutez default comme groupe.
  2. En parcourant vos fichiers, créez un répertoire home pour l'utilisateur kuser1 dans le répertoire /user.

    Dans cet exemple, le répertoire /user/kuser1/ est utilisé comme répertoire cible.

  3. Connectez-vous à Cloudera Manager, cliquez sur hdfs service > Configuration et saisissez Kerberos Realms dans le champ de recherche pour ouvrir deux propriétés de la catégorie Service-Wide/Security.
  4. Pour Additional Rules to Map Kerberos Principals to Short Names saisissez la règle suivante :
    RULE:[1:$1@$0](kuser1@CLOUDERA.COM)s/.*/kuser1/
  5. Cliquez sur Save Changes.

Écriture de données dans Hadoop

Procédure

  1. Double-cliquez sur le tHDFSOutput pour ouvrir sa vue Component.
  2. Cochez la case Use an existing connection pour réutiliser la connexion à Hadoop définie dans la section précédente.
  3. Dans le champ File Name, saisissez le chemin "/user/kuser1/states". Ce répertoire est créé s'il n'existe pas dans HDFS.

    Dans cette étape, si vous pouvez naviguer dans le système HDFS, cela signifie que la connexion sécurisée définie dans la section précédente est bien établie.