Configuration des correspondances de groupes Hadoop pour LDAP/Active Directory

Pour reconnaître l'utilisateur et le groupe Active Directory afin que l'autorisation de niveau groupe LDAP/Active Directory puisse être appliquée dans Hadoop, configurez le mappage de groupe Hadoop à l'aide de l'une des options suivantes :

Configuration de la correspondance de groupe Hadoop dans le coeur-site.xml

  1. Accédez à Apache Ambari.
  2. Dans la barre d'outils latérale, sous Services, sélectionnez HDFS.
  3. Sélectionnez Configuration > Avancé.
  4. Ajoutez les paires de touches suivantes au site central personnalisé :
    "hadoop.security.group.mapping":"org.apache.hadoop.security.CompositeGroupsMapping",
    "hadoop.security.group.mapping.providers.combined":"true",
    "hadoop.security.group.mapping.providers":"jniUnix,adServer",
    "hadoop.security.group.mapping.provider.jniUnix":"org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback",
    "hadoop.security.group.mapping.provider.adServer":"org.apache.hadoop.security.LdapGroupsMapping",
    "hadoop.security.group.mapping.provider.adServer.ldap.url":"ldap://{AD_FQDN}:389",
    "hadoop.security.group.mapping.provider.adServer.ldap.base":"{AD_SEARCH_BASE}",
    "hadoop.security.group.mapping.provider.adServer.ldap.bind.user":"{AD_BIND_USER_DN}",
    "hadoop.security.group.mapping.provider.adServer.ldap.bind.password":"{AD_BIND_USER_PWD}",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.filter.group":"(&(objectclass=group)(cn=*))",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.filter.user":"(&(objectclass=user)(sAMAccountName={0}))",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.attr.memberof":"memberOf",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.attr.group.name":"cn",
    "hadoop.security.group.mapping.ldap.ssl":"false",
    "hadoop.security.group.mapping.provider.adServer.ldap.ssl.truststore":"",
    "hadoop.security.group.mapping.provider.adServer.ldap.ssl.truststore.password.file":"",
    

Pour configurer les mappings en une seule fois, exécutez la commande suivante sur un0 :

  1. Sur un0, exécutez la commande suivante :
    export AMBARI_CONF_SCRIPT=/var/lib/ambari-server/resources/scripts/configs.py
  2. Collectez les éléments <ambari_password>, <un0_node_IP> et <cluster_name> (vérifiez le nom de cluster à partir de l'interface utilisateur Ambari), puis exécutez la commande suivante pour obtenir la configuration core-site en cours.
    python ${AMBARI_CONF_SCRIPT} \
    --user=admin \
    --password='<ambari_password>' \
    --protocol=https --unsafe \
    --host=<un0_node_IP> \
    --port=7183 \
    --cluster=<cluster_name> \
    --config-type=core-site \
    --action=get \
    --file=/tmp/current_core-site.json
  3. Collez les paires clé-valeur avec les valeurs appropriées dans la série clé-valeur d'objet de propriétés du fichier JSON de configuration current_core-site.json, puis ajoutez la paire clé-valeur suivante à l'objet de mot de passe de l'objet properties_attributes.
    "password": {
       "hadoop.security.group.mapping.provider.ad4usersX.ldap.bind.password": "true" //the key-value pair to mask out your password in Ambari.
     },
  4. Exécutez la commande suivante pour mettre à jour la configuration :
    python ${AMBARI_CONF_SCRIPT} \
    --user=admin \
    --password='<ambari_password>' \
    --protocol=https --unsafe \
    --host=<un0_node_IP> \
    --port=7183 \
    --cluster=<cluster_name> \
    --config-type=core-site \
    --action=set \
    --file=/tmp/current_core-site.json
  5. Par défaut, Hadoop actualise le cache de mappage des groupes d'utilisateurs toutes les 300 secondes. Pour avoir un intervalle d'actualisation plus court, ajoutez la paire clé-valeur suivante :
    "hadoop.security.groups.cache.secs":"<number of seconds you need>"
  6. Sélectionnez l'icône Services '...', puis sélectionnez Redémarrer tous les services requis.

Configuration du mappage de groupe Hadoop à l'aide de SSSD (recommandé)

  1. Activez l'installation des packages yum.
    sudo sed -i "s/enabled=0/enabled=1/g" /etc/yum.repos.d/oracle-linux-ol7.repo
  2. Diffusez cette modification sur tous les noeuds.
    sudo dcli -f /etc/yum.repos.d/oracle-linux-ol7.repo -d /etc/yum.repos.d/oracle-linux-ol7.repo
  3. Installer le package requis
    sudo dcli -C "yum -y install sssd realmd oddjob oddjob-mkhomedir adcli krb5-workstation samba-common-tools openldap-clients"
  4. Exécutez la commande realm avec le paramètre de repérage pour renvoyer des informations sur le domaine que vous avez rejoint et vérifier que la jointure a eu lieu.
    sudo realm join -v -U Administrator@<AD_REALM_NAME> <AD_REALM_NAME> --membership-software=adcli
    Remarque

    La jointure de domaine utilise samba/adcli pour effectuer une opération de jointure de domaine. Pour appliquer l'un d'entre eux, ajoutez --membership-software=<samba/adcli> pour indiquer le logiciel d'appartenance à utiliser.

    Pour inscrire un autre nom d'ordinateur sur le serveur AD, ajoutez --computer-name=<computer-name>.

    Pour effectuer une jointure de domaine sur tous les noeuds du cluster, exécutez la commande suivante :

    cat /etc/hosts | grep -v 'local' | awk '{print $NF}' | while read line; do echo $line; ssh -n $line "sudo echo '<BIND_USER_PASSWORD>' | sudo realm join -v -U Administrator@<AD_REALM_NAME> <AD_REALM_NAME> --membership-software=adcli"; sleep 1; done

  5. Mettez à jour /etc/sssd/sssd.conf. Dans la section [domain/<AD_REALM_NAME>], effectuez les mises à jour suivantes.
    1. Remplacez fully_qualified_names par False.

      sudo sed -i 's/use_fully_qualified_names = True/use_fully_qualified_names = False/g' /etc/sssd/sssd.conf

    2. (Facultatif) Ajoutez ce qui suit.
      ldap_user_search_base = cn=Users,dc=ad,dc=domain,dc=com
      ldap_group_search_base = cn=
      Users,dc=ad,dc=domain,dc=com
      Remarque

      Pour chaque segment du nom de domaine AD, vous devez disposer d'une entrée de contrôleur de données distincte. Par exemple, si le nom de domaine AD est A.B.C.D.COM, vous devez inclure cette liste d'entrées dc : dc=a,dc=b,dc=c,dc=d,dc=com,
  6. Diffusez le fichier sssd.conf sur tous les noeuds.
    sudo dcli -f /etc/sssd/sssd.conf -d /etc/sssd/sssd.conf
  7. Redémarrez le service SSSD.
    sudo dcli -C "/bin/systemctl restart sssd.service"
  8. Vérifiez que SSSD obtient les informations sur l'utilisateur et le groupe.
    sudo dcli -C "id Administrator"
    Remarque

    Si vous obtenez une réponse id: Administrator: No such user, le SSSD ne fonctionne pas correctement.