

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ユーザー偽装
<a name="emr-jupyterhub-user-impersonation"></a>

Jupyter Notebook 内で実行されている Spark ジョブは、Amazon EMR での実行中に、複数のアプリケーションを走査します。たとえば、Jupyter 内でユーザーが実行する PySpark3 コードが、HTTP POST リクエストを使用してそのコードを Livy に送信する Sparkmagic によって受信されます。それにより、YARN を使用してクラスターで実行する Spark ジョブが作成されます。

デフォルトでは、このように送信された YARN ジョブは、ジョブを開始したユーザーとは関係なく、ユーザー `livy` として実行されます。*ユーザー偽装*を設定することで、ノートブックユーザーのユーザー ID を、YARN ジョブに関連付けられているユーザーとすることができます。各ユーザーによって開始されるジョブは、ユーザー `shirley` と関連付けられた `diego` と `livy` の両方によって開始するのではなく、それぞれ `shirley` および `diego` に関連付けられます。これにより、Jupyter の使用を監査し、組織内でアプリケーションを管理できます。

この設定がサポートされるのは、Sparkmagic から Livy への呼び出しが認証されていない場合のみです。Hadoop アプリケーションと Livy (Apache Knox Gateway など) 間で認証またはプロキシレイヤーを提供するアプリケーションはサポートされません。このセクションでユーザー偽装を設定するステップでは、JupyterHub と Livy が同じマスターノードで実行されていることを前提としています。アプリケーションに別々のクラスターがある場合、[ステップ 3: ユーザーの HDFS ホームディレクトリを作成する](#Step3-UserImpersonation) を変更し、HDFS ディレクトリが Livy マスターノードで作成されるようにする必要があります。

**Topics**
+ [ステップ 1: Livy を設定する](#Step1-UserImpersonation)
+ [ステップ 2: ユーザーを追加する](#Step2-UserImpersonation)
+ [ステップ 3: ユーザーの HDFS ホームディレクトリを作成する](#Step3-UserImpersonation)

## ステップ 1: Livy を設定する
<a name="Step1-UserImpersonation"></a>

次の例に示すように、クラスターを作成して Livy のユーザー偽装を有効にする場合は、`livy-conf` および `core-site` 設定分類を使用します。設定分類を JSON として保存し、クラスターの作成時にその分類を参照するか、インラインで指定します。詳細については、「[アプリケーションの設定](emr-configure-apps.md)」を参照してください。

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

## ステップ 2: ユーザーを追加する
<a name="Step2-UserImpersonation"></a>

PAM または LDAP を使用して JupyterHub ユーザーを追加します。詳細については、「[PAM 認証の使用](emr-jupyterhub-pam-users.md)」および「[LDAP 認証の使用](emr-jupyterhub-ldap-users.md)」を参照してください。

## ステップ 3: ユーザーの HDFS ホームディレクトリを作成する
<a name="Step3-UserImpersonation"></a>

ユーザーを作成するため、マスターノードに接続しました。マスターノードに接続中に、次のコンテンツをコピーして、スクリプトファイルに保存します。スクリプトにより、マスターノードの各 JupyterHub ユーザーごとに、HDFS ホームディレクトリが作成されます。このスクリプトでは、デフォルトの管理者ユーザー ID *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
```