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

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

使用 PAM 身份验证

在 Amazon EMR JupyterHub 上创建 PAM 用户是一个分为两个步骤的过程。第一步是,将用户添加到在主节点上的 jupyterhub 容器中运行的操作系统,以及为每个用户添加一个相应的用户主目录。第二步是将这些操作系统用户添加为 JupyterHub用户,此过程称为名单。 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 或 REST API 来添加用户和管理员,或者只添加用户。

使用中的管理面板添加用户和管理员 JupyterHub
  1. 使用 SSH 连接到主节点,然后使用具有管理员权限的身份登录 https MasterNode://DNS: 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
注意

首次登录 JupyterHub Web 界面时,系统会自动将您添加为 JupyterHub 非管理员用户。

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

以下示例 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://mybucket/createjupyterusers.sh)。然后,可以使用 script-runner.jar 将此脚本作为步骤运行。

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

注意

为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

aws emr create-cluster --name="MyJupyterHubCluster" --release-label emr-5.36.2 \ --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"]

在现有集群上运行脚本(Amazon 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"]