本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 PAM 身分驗證
在 Amazon EMR 的 JupyterHub 中建立 PAM 使用者的程序有兩個步驟。第一個步驟是將使用者新增到在主節點 jupyterhub
容器中執行的作業系統,並為每個使用者新增對應的使用者主目錄。第二個步驟是將這些作業系統使用者新增為 JupyterHub 使用者 – 這項程序在 JupyterHub 中稱為列入允許清單。在新增 JupyterHub 使用者後,他們可以連接到 JupyterHub URL 並提供他們的作業系統登入資料以進行存取。
當使用者登入時,JupyterHub 會為該使用者開啟筆記本伺服器執行個體,此執行個體儲存在該使用者的主節點主目錄,即 /var/lib/jupyter/home/
。如果筆記本伺服器執行個體不存在,JupyterHub 會在使用者的主目錄中產生筆記本執行個體。以下章節將示範如何個別將使用者新增到作業系統和 JupyterHub,接著是新增多個使用者的早期 bash 指令碼。username
將作業系統使用者新增至容器
下列的範例會先在容器中使用 useradd
sudo docker exec jupyterhub useradd -m -s /bin/bash -N diego
sudo docker exec jupyterhub bash -c "echo diego:diego | chpasswd"
新增 JupyterHub 使用者
您可以使用 JupyterHub 中的 Admin (管理員) 面板或 REST API,來新增使用者和管理員,或是只新增使用者。
若要使用 JupyterHub 中的管理面板來新增使用者和管理員
使用 SSH 連線到主節點,並以具有管理者許可的身分登入 https://
MasterNodeDNS
:9443。選擇 Control Panel (控制面板)、Admin (管理員)。
選擇 User (使用者)、Add Users (新增使用者),或選擇 Admin (管理員)、Add Admins (新增管理員)。
使用 REST API 新增使用者
使用 SSH 連接到主節點並使用下列主節點的命令,或將該命令做為步驟執行。
取得管理字符以發出 API 請求,並將下列步驟中的
AdminToken (AdminToken)
換成該字符。使用下列的指令,將
UserName (使用者名稱)
換成在容器中建立的作業系統使用者。curl -XPOST -H "Authorization: token
AdminToken
" "https://$(hostname):9443/hub/api/users/UserName
注意
在您首次登入 JupyterHub Web 介面時,系統會自動將您新增為 JupyterHub 非管理員使用者。
範例:新增多個使用者的 Bash 指令碼
以下的範例 bash 指令碼,和此章節之前欲建立多個 JupyterHub 使用者的步驟環環相扣。此指令碼可以直接在主節點上執行,也可以上傳至 Amazon S3,然後作為步驟執行。
該指令碼首先會建立一系列的使用者名稱,並使用 jupyterhub token
命令來建立預設管理員 jovyan 的 API 字符。然後,它會為每個使用者在 jupyterhub
容器中建立作業系統使用者,並個別指派等同於他們使用者名稱的初始密碼。最後,它會呼叫 REST API 操作以在 JupyterHub 建立每個使用者。它會傳遞之前在指令碼中產生的字符,並導入 REST 回應至 jq
以更輕鬆地檢視。
# Bulk add users to container and JupyterHub with temp password of username
set -x
USERS=(shirley diego ana richard li john mary anaya)
TOKEN=$(sudo docker exec jupyterhub /opt/conda/bin/jupyterhub token jovyan | tail -1)
for i in "${USERS[@]}";
do
sudo docker exec jupyterhub useradd -m -s /bin/bash -N $i
sudo docker exec jupyterhub bash -c "echo $i:$i | chpasswd"
curl -XPOST --silent -k https://$(hostname):9443/hub/api/users/$i \
-H "Authorization: token $TOKEN" | jq
done
將此指令碼儲存至的 Amazon S3 中的位置,例如 s3://amzn-s3-demo-bucket/createjupyterusers.sh
。然後,您可以使用 script-runner.jar
以將其做為步驟執行。
範例:在建立叢集 (AWS CLI) 時執行此指令碼
注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
aws emr create-cluster --name="
MyJupyterHubCluster
" --release-label emr-5.36.2 \ --applications Name=JupyterHub --log-uris3://amzn-s3-demo-bucket/MyJupyterClusterLogs
\ --use-default-roles --instance-type m5.xlarge --instance-count2
--ec2-attributes KeyName=MyKeyPair
\ --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region
.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://amzn-s3-demo-bucket/createjupyterusers.sh"]
在現有叢集 (AWS CLI) 執行此指令碼
注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
aws emr add-steps --cluster-id
j-XXXXXXXX
--steps Type=CUSTOM_JAR,\ Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region
.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://amzn-s3-demo-bucket/createjupyterusers.sh"]