ユーザー偽装 - Amazon EMR

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

ユーザー偽装

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

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

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

ステップ 1: Livy を設定

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

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

ステップ 2: ユーザーの追加

PAM または LDAP JupyterHub を使用してユーザーを追加します。詳細については、PAM 認証の使用 および LDAP 認証の使用 を参照してください。

ステップ 3: ユーザー用の HDFS ホームディレクトリの作成

ユーザーを作成するため、マスターノードに接続しました。マスターノードに接続中に、次のコンテンツをコピーして、スクリプトファイルに保存します。このスクリプトは、 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