

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Emprunt d'identité de l'utilisateur
<a name="emr-jupyterhub-user-impersonation"></a>

Une tâche Spark exécutée dans un bloc-note Jupyter traverse plusieurs applications au cours de son exécution sur Amazon EMR. Par exemple, PySpark 3 codes exécutés par un utilisateur dans Jupyter sont reçus par Sparkmagic, qui utilise une requête HTTP POST pour le soumettre à Livy, qui crée ensuite une tâche Spark à exécuter sur le cluster à l'aide de YARN.

Par défaut, les tâches YARN soumises de cette manière s'exécutent sous l'utilisateur `livy`, quel que soit l'utilisateur ayant lancé la tâche. En configurant l'*emprunt d'identité de l'utilisateur*, l'ID utilisateur de l'utilisateur du bloc-notes peut également être l'utilisateur associé à la tâche YARN. Plutôt que les tâches soient lancées par les deux utilisateurs `shirley` et `diego` associés à l'utilisateur `livy`, les tâches initiées par chaque utilisateur sont associées respectivement à `shirley` et à `diego`. Cela vous permet de vérifier l'utilisation de Jupyter et de gérer les applications au sein de votre organisation.

Cette configuration est prise en charge uniquement lorsque des appels de Sparkmagic vers Livy ne sont pas authentifiés. Les applications qui fournissent une couche d'authentification ou de redirection entre les applications Hadoop et Livy (par exemple, Apache Knox Gateway) ne sont pas prises en charge. Les étapes de configuration de l'emprunt d'identité utilisateur décrites dans cette section supposent que Livy JupyterHub et Livy s'exécutent sur le même nœud principal. Si votre application a des clusters séparés, [Étape 3 : Créer des répertoires de base HDFS pour les utilisateurs](#Step3-UserImpersonation) doit être modifiée afin que les annuaires HDFS soient créés sur le nœud maître Livy.

**Topics**
+ [Étape 1 : Configurer Livy](#Step1-UserImpersonation)
+ [Étape 2 : Ajouter des utilisateurs](#Step2-UserImpersonation)
+ [Étape 3 : Créer des répertoires de base HDFS pour les utilisateurs](#Step3-UserImpersonation)

## Étape 1 : Configurer Livy
<a name="Step1-UserImpersonation"></a>

Vous utilisez les classifications de configuration `livy-conf` et `core-site` lorsque vous créez un cluster pour activer l'emprunt d'identité de l'utilisateur Livy, comme illustré dans l'exemple suivant. Enregistrez la classification de configuration sous la forme d'un fichier JSON, puis faites-y référence lorsque vous créez le cluster ou que vous spécifiez la classification de configuration en ligne. Pour de plus amples informations, veuillez consulter [Configuration des applications](emr-configure-apps.md).

```
[
  {
    "Classification": "livy-conf",
    "Properties": {
      "livy.impersonation.enabled": "true"
    }
  },
  {
    "Classification": "core-site",
    "Properties": {
      "hadoop.proxyuser.livy.groups": "*",
      "hadoop.proxyuser.livy.hosts": "*"
    }
  }
]
```

## Étape 2 : Ajouter des utilisateurs
<a name="Step2-UserImpersonation"></a>

Ajoutez des JupyterHub utilisateurs à l'aide de PAM ou LDAP. Pour plus d’informations, consultez [Utilisation de l'authentification PAM](emr-jupyterhub-pam-users.md) et [Utilisation de l'authentification LDAP](emr-jupyterhub-ldap-users.md).

## Étape 3 : Créer des répertoires de base HDFS pour les utilisateurs
<a name="Step3-UserImpersonation"></a>

Vous vous êtes connecté au nœud maître pour créer des utilisateurs. Toujours connecté au nœud maître, copiez le contenu ci-dessous et enregistrez-le dans un fichier script. Le script crée des répertoires de base HDFS pour chaque JupyterHub utilisateur du nœud principal. Le script suppose que vous utilisez l'ID utilisateur administrateur par défaut,*jovyan*.

```
#!/bin/bash

CURL="curl --silent -k"
HOST=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname)

admin_token() {
    local user=jovyan
    local pwd=jupyter
    local token=$($CURL https://$HOST:9443/hub/api/authorizations/token \
        -d "{\"username\":\"$user\", \"password\":\"$pwd\"}" | jq ".token")
    if [[ $token != null ]]; then
        token=$(echo $token | sed 's/"//g')
    else
        echo "Unable to get Jupyter API Token."
        exit 1
    fi
    echo $token
}

# Get Jupyter Admin token
token=$(admin_token)

# Get list of Jupyter users
users=$(curl -XGET -s -k https://$HOST:9443/hub/api/users \
 -H "Authorization: token $token" | jq '.[].name' | sed 's/"//g')

# Create HDFS home dir 
for user in ${users[@]}; 
do
 echo "Create hdfs home dir for $user"
 hadoop fs -mkdir /user/$user
 hadoop fs -chmod 777 /user/$user
done
```