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

使用 PAM 身份验证

在 JupyterHub on Amazon EMR 中创建 PAM 用户是一个两步过程。第一步是,将用户添加到在主节点上的 jupyterhub 容器中运行的操作系统,以及为每个用户添加一个相应的用户主目录。第二步是,将这些操作系统用户作为 JupyterHub 用户添加到 JupyterHub 中,这一流程称为加入白名单。添加 JupyterHub 用户之后,这些用户可连接到 JupyterHub URL 并提供其操作系统凭证以便访问。

用户登录后,JupyterHub 将为用户打开保存在主节点上用户主目录 /var/lib/jupyter/home/username 中的笔记本服务器实例。如果笔记本服务器实例不存在,则 JupyterHub 将在用户的主目录中生成一个笔记本实例。以下部分演示如何将用户分别添加到操作系统和 JupyterHub,后接用于添加多个用户的基本清除脚本。

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

以下示例先在容器内使用 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 中的 Admin (管理员) 面板或 REST API 添加用户和管理员,或仅添加用户。

使用 JupyterHub 中的“Admin (管理员)”面板添加用户和管理员
  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
注意

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

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

以下示例清除脚本将与此部分中的前述步骤配合使用,以创建多个 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.1 \ --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"]