使用 PAM 身份验证 - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 PAM 身份验证

在中创建PAM用户 JupyterHub 于 Amazon EMR 是一个两步过程。第一步是,将用户添加到在主节点上的 jupyterhub 容器中运行的操作系统,以及为每个用户添加一个相应的用户主目录。第二步是将这些操作系统用户添加为 JupyterHub 用户—一种被称为 whitelisting 英寸 JupyterHub。在 JupyterHub 用户,他们可以连接到 JupyterHub URL并提供其操作系统凭据用于访问。

当用户登录时, JupyterHub 打开该用户的笔记本服务器实例,该实例保存在管理节点上的用户主目录中,即 /var/lib/jupyter/home/username。如果笔记本服务器实例不存在, JupyterHub 在用户的主目录中生成笔记本实例。以下部分展示了如何将用户单独添加到操作系统和 JupyterHub,然后是添加多个用户的基本Bash脚本。

将操作系统用户添加到容器

以下示例先在容器内使用 useradd 命令添加单个用户 diego 并为该用户创建一个主目录。第二个命令使用 chpasswd 为此用户设置密码 diego。在使用 SSH 连接时,命令将在主节点命令行上运行。还可以使用步骤运行这些命令,如之前的通过提交步骤管理中所述。

sudo docker exec jupyterhub useradd -m -s /bin/bash -N diego sudo docker exec jupyterhub bash -c "echo diego:diego | chpasswd"

添加 JupyterHub 用户

您可以使用 管理 面板 JupyterHub 或RESTAPI添加用户和管理员,或仅添加用户。

使用中的“管理”面板添加用户和管理员 JupyterHub

  1. 使用SSH连接到管理节点并登录到https://MasterNodeDNS:9443具有具有管理员权限的标识。

  2. 选择 Control Panel (控制面板)Admin (管理员)

  3. 选择 User (用户)Add Users (添加用户),或选择 Admin (管理员)Add Admins (添加管理员)

使用 REST API 添加用户

  1. 使用 SSH 连接到主节点并在主节点上使用以下命令,或将此命令作为步骤运行。

  2. 获取管理令牌以进行API请求,并替换 AdminToken 在以下步骤中使用该令牌。

  3. 使用以下命令替换 UserName 一个操作系统用户,这个用户已经创建于集装箱。

    curl -XPOST -H "Authorization: token AdminToken" "https:$(hostname):9443/hub/api/users/UserName

示例:用于添加多个用户的Bash脚本

以下示例bash脚本将本节中的前几个步骤联系在一起,以创建多个 JupyterHub 用户。此脚本可以直接在主节点上运行,也可上传到 Amazon S3 并在之后作为步骤运行。

此脚本先建立一组用户名,并使用 jupyterhub token 命令为默认管理员 jovyan 创建一个 API 令牌。然后,它在 jupyterhub 容器中为每个用户创建一个操作系统用户,以为每个用户分配一个与其用户名相同的初始密码。最后,它调用RESTAPI操作以创建每个用户 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://mybucket/createjupyterusers.sh。然后,您可以使用 script-runner.jar 以作为步骤运行。

示例:创建群集时运行脚本(AWS CLI)

注意

包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

aws emr create-cluster --name="MyJupyterHubCluster" --release-label emr-5.31.0 \ --applications Name=JupyterHub --log-uri s3://MyBucket/MyJupyterClusterLogs \ --use-default-roles --instance-type m5.xlarge --instance-count 2 --ec2-attributes KeyName=MyKeyPair \ --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/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://mybucket/createjupyterusers.sh"]