

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# PAM 인증 사용
<a name="emr-jupyterhub-pam-users"></a>

Amazon EMR에 설치된 JupyterHub에 PAM 사용자를 생성하는 방법은 두 단계의 프로세스로 이루어집니다. 첫 번째 단계는 마스터 노드의 `jupyterhub` 컨테이너에서 실행 중인 운영 체제에 사용자를 추가하는 것과 해당 사용자를 각 사용자의 홈 디렉터리에 추가하는 것입니다. 두 번째 단계는 이러한 운영 체제 사용자를 JupyterHub 사용자로 추가하는 것입니다. JupyterHub에서는 이 프로세스를 화이트리스팅이라고 합니다. 추가된 JupyterHub 사용자는 JupyterHub URL에 연결한 다음, 액세스를 위하 자신의 운영 체제 자격 증명을 제공하면 됩니다.

사용자가 로그인하면 JupyterHub는 해당 사용자용 노트북 서버 인스턴스를 엽니다. 이 인스턴스는 마스터 노드에 있는 사용자의 홈 디렉터리에 저장됩니다(`/var/lib/jupyter/home/username`). 노트북 서버 인스턴스가 없는 경우, JupyterHub에서 사용자의 홈 디렉터리에 노트북 인스턴스를 만듭니다. 다음 섹션에서는 여러 사용자를 추가하는 기초적인 bash 스크립트를 따라 운영 체제 및 JupyterHub에 사용자를 개별적으로 추가하는 방법을 보여줍니다.

## 컨테이너에 운영 체제 사용자 추가
<a name="emr-jupyterhub-system-user"></a>

다음 예제에서는 먼저 컨테이너 내에서 [useradd](https://linux.die.net/man/8/useradd) 명령을 사용하여 단일 사용자인 diego를 추가한 다음 해당 사용자용 홈 디렉터리를 만듭니다. 두 번째 명령에서는 [chpasswd](https://linux.die.net/man/8/chpasswd)를 사용하여 이 사용자를 위한 diego 암호를 설정합니다. 명령은 SSH를 사용하여 연결되어 있는 동안 마스터 노드 명령줄에서 실행됩니다. [단계를 제출하여 관리](emr-jupyterhub-administer.md#emr-jupyterhub-administer-steps)의 앞부분에 설명되어 있는 대로 단계를 사용하여 이 명령을 실행할 수도 있습니다.

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

## JupyterHub 사용자 추가
<a name="emr-jupyterhub-jupyterhub-user"></a>

JupyterHub의 **Admin** 패널이나 REST API를 사용하면 사용자 및 관리자를 추가하거나 사용자만 추가할 수 있습니다.

**JupyterHub의 Admin 패널을 사용하면 사용자 및 관리자를 추가하는 방법**

1. SSH를 사용하여 마스터 노드에 연결하고 관리자 권한이 있는 ID를 사용하여 https://*MasterNodeDNS*:9443에 로그인합니다.

1. **제어판**, **Admin**을 선택합니다.

1. **사용자**, **사용자 추가**를 선택하거나 **Admin**, **Add Admins(Admin 추가)**를 선택합니다.

**REST API를 사용하여 사용자를 추가하려면**

1. SSH를 사용하여 마스터 노드에 연결하고 마스터 노드에서 다음 명령을 사용하거나 하나의 단계로 명령을 실행합니다.

1. API 요청을 만들 관리자 토큰을 획득하고 다음 단계의 *AdminToken*을 해당 토큰으로 바꿉니다.

1. 다음 명령을 사용하되, *UserName*을 컨테이너 내에서 생성된 운영 체제 사용자로 바꿉니다.

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

**참고**  
JupyterHub 웹 인터페이스에 처음 로그인하면 자동으로 관리자가 아닌 JupyterHub 사용자로 추가됩니다.

## 예제: 여러 사용자를 추가하는 Bash 스크립트
<a name="emr-jupyterhub-script-multuser"></a>

다음 샘플 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)
<a name="emr-jupyterhub-multuser-createcluster"></a>

**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. 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"]
```

### 기존 클러스터에서 스크립트 실행(AWS CLI)
<a name="emr-jupyterhub-multuser-runningcluster"></a>

**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. 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"]
```