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

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

使用PAM身份验证

在 Amazon JupyterHub 上创建PAM用户EMR是一个分为两个步骤的过程。第一步是,将用户添加到在主节点上的 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 或中的管理面板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
注意

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

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

以下示例 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://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/createjupyterusers.sh"]