

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

# Amazon EMR 기반 Presto에 대한 LDAP 인증 사용
<a name="emr-presto-ldap"></a>

이번 섹션의 단계를 따르면 LDAP를 구성할 수 있습니다. 예제의 단계 및 추가 정보 링크를 참조하세요.

**Topics**
+ [1단계: LDAP 서버에 대한 정보를 수집하고 서버 인증서를 Amazon S3로 복사](#emr-presto-ldap-server-prereq)
+ [2단계: 보안 구성 설정](#emr-presto-ldap-seccfg)
+ [3단계: LDAP에 대한 Presto 속성을 통한 구성 JSON 생성](#emr-presto-ldap-prestoconfig)
+ [4단계: 스크립트를 생성하여 LDAP 인증서를 복사하여 Amazon S3로 업로드](#emr-presto-ldap-servercert)
+ [5단계: 클러스터 생성](#emr-presto-ldap-createcluster)

## 1단계: LDAP 서버에 대한 정보를 수집하고 서버 인증서를 Amazon S3로 복사
<a name="emr-presto-ldap-server-prereq"></a>

LDAP 서버로부터 다음 섹션의 정보 및 항목을 수집하여 LDAP 인증을 구성해야 합니다.

### LDAP 서버의 IP 주소 또는 호스트 이름
<a name="w2aac60c39c13b7b5"></a>

Amazon EMR 프라이머리 노드의 Presto 코디네이터가 지정된 IP 주소 또는 호스트 이름의 LDAP 서버에 도달할 수 있어야 합니다. 기본적으로 Presto는 LDAPS를 사용하여 포트 636을 통해 LDAP 서버와 통신합니다. LDAP 실행에 사용자 지정 포트가 필요한 경우 Amazon EMR 5.16.0 이상의 `ldap.url` 속성을 사용하거나 이전 버전의 `authentication.ldap.url`을 사용하여 포트를 지정할 수 있습니다. [3단계: LDAP에 대한 Presto 속성을 통한 구성 JSON 생성](#emr-presto-ldap-prestoconfig)의 `presto-config` 구성 분류 예제에 표시된 대로 `636` 사용자 지정 포트를 대체합니다. 모든 방화벽 및 보안 그룹에서 포트 636 (또는 사용자 지정 포트)의 인바운드 및 아웃바운드 트래픽을 허용하고 또한 내부 클러스터 통신에 사용되는 포트 8446 (또는 사용자 지정 포트)에 대해서도 허용하는지 확인합니다.

### LDAP 서버 인증서
<a name="w2aac60c39c13b7b7"></a>

인증서 파일을 Amazon S3의 안전한 위치에 업로드해야 합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [S3 버킷에 파일 및 폴더를 업로드하려면 어떻게 해야 하나요?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) 섹션을 참조하세요. 클러스터를 시작할 때 이 인증서를 Amazon S3에서 클러스터의 각 노드로 복사하는 부트스트랩 작업을 생성합니다. In [4단계: 스크립트를 생성하여 LDAP 인증서를 복사하여 Amazon S3로 업로드](#emr-presto-ldap-servercert). 예제 인증서는 *s3://amzn-s3-demo-bucket/ldap\$1server.crt*입니다.

### 익명 바인딩을 위한 LDAP 서버 설정
<a name="w2aac60c39c13b7b9"></a>

익명 바인딩을 PrestoDB에서 비활성화한 경우 LDAP 서버와의 바인딩이 허가된 계정의 사용자 ID(UID) 및 암호가 있어야 PrestoDB 서버가 연결을 설정할 수 있습니다. `internal-communication.authentication.ldap.user` 구성 분류에서 `internal-communication.authentication.ldap.password` 및 `presto-config` 속성을 사용하여 UID 및 암호를 지정해야 합니다. Amazon EMR 5.10.0은 이러한 설정을 지원하지 않으므로, 이 릴리스 버전을 사용하는 경우 LDAP 서버에서 익명 바인딩이 지원되어야 합니다.

참고로 Trino에는 익명 바인딩 구성이 필요하지 않습니다.

**LDAP 서버에서 익명 바인딩의 상태를 가져오려면**
+ 다음 예와 같이 Linux 클라이언트에서 [ldapwhoami](https://linux.die.net/man/1/ldapwhoami) 명령을 사용합니다.

  ```
  ldapwhoami -x -H ldaps://LDAPServerHostNameOrIPAddress
  ```

  익명 바인딩이 허용되지 않는 경우 명령이 다음을 반환합니다.

  ```
  ldap_bind: Inappropriate authentication (48)
  additional info: anonymous bind disallowed
  ```

**특정 계정에 단순 인증을 사용하는 LDAP 서버에 대한 액세스 권한이 있는지 확인하려면**
+ 다음 예와 같이 Linux 클라이언트에서 [ldapwhoami](https://linux.die.net/man/1/ldapwhoami) 명령을 사용합니다. 이 예제에서는 가상의 호스트 이름 *ip-xxx-xxx-xxx-xxx.ec2.internal*의 EC2 인스턴스에서 실행 중인 Open LDAP 서버에 저장된 가상의 사용자, *presto*를 사용합니다. 사용자는 조직 단위(OU) *admins* 및 암호 *123456*와 연결되어 있습니다.

  ```
  ldapwhoami -x -w "123456" -D uid=presto,ou=admins,dc=ec2,dc=internal -H ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal 
  ```

  유효한 계정이며 적절한 권한이 부여되어 있다면 명령이 다음을 반환합니다.

  ```
  dn:uid=presto,ou=admins,dc=ec2,dc=internal
  ```

[3단계: LDAP에 대한 Presto 속성을 통한 구성 JSON 생성](#emr-presto-ldap-prestoconfig)의 구성 예에는 명확한 이해를 위해 이 계정이 포함되나, 이 계정을 지원하지 않는 5.10.0 예는 예외입니다. LDAP 서버가 익명 바인딩을 사용하는 경우 `internal-communication.authentication.ldap.user`와 `internal-communication.authentication.ldap.password` 이름/값 페어를 제거합니다.

### Presto 사용자용 LDAP 고유 이름(DN)
<a name="w2aac60c39c13b7c11"></a>

Presto에 대해 LDAP 구성을 지정하면 `${USER}`로 이루어진 바인드 패턴이 조직 단위(OU) 및 추가적인 도메인 구성 요소(DC)와 함께 지정됩니다. Presto는 암호 인증 과정에서 `${USER}`를 실제 사용자 ID(UID)로 대체하여 이 바인드 패턴을 통해 지정한 고유 이름(DN)과 대조합니다. 적격 사용자가 소속된 OU(조직 단위) 및 DC(도메인 구성 요소)가 필요합니다. 예를 들어, `admins` 도메인의 `corp.example.com` OU에 소속된 사용자에게 권한을 부여하여 Presto에 인증하려면 `${USER},ou=admins,dc=corp,dc=example,dc=com`를 사용자 바인드 패턴으로 지정해야 합니다.

**참고**  
를 사용할 때를 실제 사용자 ID(UID)`${USER}`로 바꾸려면 Fn::Sub 함수를 사용해야 AWS CloudFormation합니다. 자세한 내용은 *AWS CloudFormation 사용 설명서*에서 [Fn::Sub](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html) 주제를 참조하세요.

Amazon EMR 5.10.0을 사용하는 경우 해당 패턴을 1개만 지정할 수 있습니다. Amazon EMR 5.11.0 이상을 사용하는 경우 여러 개의 패턴을 콜론(:)으로 구분하여 지정할 수 있습니다. Presto에 인정받으려는 사용자를 첫 번째 패턴과 대조한 다음 두 번째 패턴과 대조한 후에 또 그와 같은 과정을 반복하는 식으로 진행합니다. 예제는 [3단계: LDAP에 대한 Presto 속성을 통한 구성 JSON 생성](#emr-presto-ldap-prestoconfig) 섹션을 참조하세요.

## 2단계: 보안 구성 설정
<a name="emr-presto-ldap-seccfg"></a>

전송 중 데이터 암호화가 활성화된 보안 구성을 생성합니다. 자세한 내용은 *Amazon EMR 관리 안내서*에서 [보안 구성 생성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-create-security-configuration.html)을 참조하세요. 전송 중 데이터 암호화를 설정할 때 제공하는 암호화 아티팩트는 Presto 노드 간의 내부 통신을 암호화하는 데 사용합니다. 자세한 내용은 [전송 중 데이터 암호화에 대한 인증서 제공](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-encryption-certificates)을 참조하세요. LDAP 서버 인증서는 Presto 클라우드에 대한 클라이언트 연결을 인증하는 데 사용합니다.

## 3단계: LDAP에 대한 Presto 속성을 통한 구성 JSON 생성
<a name="emr-presto-ldap-prestoconfig"></a>

`presto-config` 구성 분류를 사용하여 LDAP에 대한 Presto 속성을 설정합니다. `presto-config`의 형식과 콘텐츠는 Amazon EMR 릴리스 버전과 Presto 설치(PrestoDB 또는 Trino)에 따라 조금씩 다릅니다. 이 섹션의 뒷부분에서 구성 차이의 예를 제공합니다. 자세한 내용은 [애플리케이션 구성](emr-configure-apps.md) 단원을 참조하십시오.

다음 단계에서는 사용자가 JSON 데이터를 *MyPrestoConfig.json* 파일에 저장했다고 가정합니다. 콘솔을 사용하는 경우 클러스터를 생성할 때 파일을 참조할 수 있도록 파일을 Amazon S3의 안전한 위치에 업로드해야 합니다. 를 사용하는 경우 파일을 로컬에서 참조 AWS CLI할 수 있습니다.

**Example PrestoSQL(Trino)을 지원하는 Amazon EMR 6.1.0 이상**  
다음 예제에서는 [1단계: LDAP 서버에 대한 정보를 수집하고 서버 인증서를 Amazon S3로 복사](#emr-presto-ldap-server-prereq)의 LDAP 호스트 이름을 사용하여 바인딩을 위해 LDAP 서버에 인증합니다. 2가지 사용자 바인드 패턴을 지정하여 LDAP 서버의 `admins` OU 및 `datascientists` OU 내에 있는 사용자가 사용자로서 Trino 서버에 인증할 수 있는 자격이 있음을 보여줍니다. 바인드 패턴은 콜론으로 구분됩니다(`:`).  
Amazon EMR 버전 6.4.0 이상에서는 PrestoSQL 대신 Trino라는 새 이름을 사용합니다. Trino를 사용하는 경우 다음 구성 분류에서 *`prestosql-config`*를 `trino-config`로, `prestosql-password-authenticator`를 `trino-password-authenticator`로 바꿉니다.  

```
[
   {
      "Classification":"prestosql-config",
      "Properties":{
         "http-server.authentication.type":"PASSWORD"
      }
   },
   {
      "Classification":"prestosql-password-authenticator",
      "Properties":{
         "password-authenticator.name":"ldap",
         "ldap.url":"ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636",
         "ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal"
      }
   }
]
```

**Example Amazon EMR 5.16.0 이상**  
다음 예에서는 LDAP 사용자 ID 및 암호와 [1단계: LDAP 서버에 대한 정보를 수집하고 서버 인증서를 Amazon S3로 복사](#emr-presto-ldap-server-prereq)의 LDAP 호스트 이름을 사용하여 LDAP 서버에 바인딩을 인증합니다. 2가지 사용자 바인드 패턴을 지정하여 LDAP 서버의 `admins` OU 및 `datascientists` OU 내에 있는 사용자가 사용자로서 Presto 서버에 인증할 수 있는 자격이 있음을 보여줍니다. 바인드 패턴은 콜론으로 구분됩니다(`:`).  

```
[{
        "Classification": "presto-config",
                "Properties": {
                        "http-server.authentication.type": "PASSWORD"
                }
        },
        {
                "Classification": "presto-password-authenticator",
                "Properties": {
                        "password-authenticator.name": "ldap",
                        "ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636",
                        "ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal",
                        "internal-communication.authentication.ldap.user": "presto",
                        "internal-communication.authentication.ldap.password": "123456"
                }
        }]
```

**Example Amazon EMR 5.11.0부터 5.15.0까지**  
이러한 릴리스 버전에서는 `presto-config `구성 분류의 형식이 조금씩 다릅니다. 다음 예는 이전의 예와 동일한 파라미터를 지정합니다.  

```
[{
        "Classification": "presto-config",
                "Properties": {
                        "http-server.authentication.type": "LDAP",
                        "authentication.ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636",
                        "authentication.ldap.user-bind-pattern": "uid=${USER},ou=admins,dc=ec2,dc=internal:uid=${USER},ou=datascientists,dc=ec2,dc=internal",
                        "internal-communication.authentication.ldap.user": "presto",
                        "internal-communication.authentication.ldap.password": "123456"
                }
        }]
```

**Example Amazon EMR 5.10.0**  
Amazon EMR 5.10.0은 익명 바인딩만을 지원하므로 그러한 항목은 생략됩니다. 또한 단일 바인드 패턴만 지정할 수 있습니다.  

```
[{
        "Classification": "presto-config",
                "Properties": {
                        "http-server.authentication.type": "LDAP",
                        "authentication.ldap.url": "ldaps://ip-xxx-xxx-xxx-xxx.ec2.internal:636",
                        "ldap.user-bind-pattern": "uid=${USER},ou=prestousers,dc=ec2,dc=internal"
                }
        }]
```

## 4단계: 스크립트를 생성하여 LDAP 인증서를 복사하여 Amazon S3로 업로드
<a name="emr-presto-ldap-servercert"></a>

인증서 파일을 클러스터의 각 노드에 복사하고 키 스토어에 추가하는 스크립트를 생성합니다. 텍스트 편집기를 사용하여 스크립트를 생성하고 저장한 다음 Amazon S3에 업로드합니다. [5단계: 클러스터 생성](#emr-presto-ldap-createcluster)에서 스크립트 파일은 *s3://amzn-s3-demo-bucket/LoadLDAPCert.sh*로 참조됩니다.

다음 예제 스크립트는 기본 키 스토어 암호로 *changeit*을 사용합니다. 클러스터를 생성한 후에 마스터 노드에 연결하고 keytool 명령을 사용하여 키 스토어 암호를 변경하는 것이 좋습니다.

```
#!/bin/bash
aws s3 cp s3://amzn-s3-demo-bucket/ldap_server.crt .
sudo keytool -import -keystore /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/lib/security/cacerts -trustcacerts -alias ldap_server -file ./ldap_server.crt -storepass changeit -noprompt
```



## 5단계: 클러스터 생성
<a name="emr-presto-ldap-createcluster"></a>

클러스터를 생성할 때 Amazon EMR을 설치할 Presto와 기타 애플리케이션을 지정합니다. 또한 다음 예에서는 JSON 내의 구성 분류 속성을 참조하지만, 구성 분류 인라인을 지정할 수도 있습니다.

**Amazon EMR 관리 콘솔을 사용하여 LDAP 인증을 통해 Presto 클러스터를 생성하는 방법**

1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 **이전 콘솔로 전환**을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 [이전 콘솔 사용](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)을 참조하세요.

1. **클러스터 생성** 및 **고급 옵션으로 이동**을 선택합니다.

1. 설치할 Amazon EMR용 다른 애플리케이션과 함께 **Presto**를 선택하고 **소프트웨어 구성**에서 사용할 Amazon EMR **릴리스**를 선택합니다. LDAP 인증은 Amazon EMR 5.10.0 이상에서만 지원됩니다.

1. **소프트웨어 설정 편집**에서 **S3로부터 JSON 로드**를 선택하고 [3단계: LDAP에 대한 Presto 속성을 통한 구성 JSON 생성](#emr-presto-ldap-prestoconfig)에서 생성한 JSON 구성 파일의 Amazon S3 위치를 입력한 후 **다음**을 선택합니다.

1. 클러스터 하드웨어 및 네트워킹을 구성한 다음 **다음**을 선택합니다.

1. **부트스트랩 작업**을 선택합니다. **부트스트랩 작업 추가**에서 **사용자 지정 작업**을 선택한 다음 **구성 및 추가**를 선택합니다.

1. 부트스트랩 작업의 **이름**을 입력하고 [4단계: 스크립트를 생성하여 LDAP 인증서를 복사하여 Amazon S3로 업로드](#emr-presto-ldap-servercert)에서 생성한 **스크립트 위치**(예: **s3://amzn-s3-demo-bucket/LoadLDAPCert.sh**)를 입력한 다음, **추가**를 선택합니다.

1. **일반 옵션**의 **태그** 및 **추가 옵션**에서 애플리케이션에 적합한 설정을 선택한 후 **다음**을 선택합니다.

1. **인증 및 암호화**를 선택하고 [2단계: 보안 구성 설정](#emr-presto-ldap-seccfg)에서 생성한 **보안 구성**을 선택합니다.

1. 애플리케이션에 적합한 다른 보안 옵션을 선택한 다음 **클러스터 생성**을 선택합니다.

**를 사용하여 LDAP 인증으로 Presto 클러스터를 생성하려면 AWS CLI**
+ `aws emr create-cluster` 명령을 사용합니다. 최소한 Presto 애플리케이션과 Presto 구성 분류, 부트스트랩 스크립트 및 이전 단계에서 생성한 보안 구성을 지정해야 합니다. 다음 예에서는 명령 실행에 사용된 것과 동일한 디렉터리에 저장된 JSON 파일인 구성 파일을 참조합니다. 한편 부트스트랩 스크립트는 Amazon S3에 저장되어야 합니다. 다음 예에는 `s3://amzn-s3-demo-bucket/LoadLDAPCert.sh`가 사용됩니다.
**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

  ```
  aws emr create-cluster  --applications Name=presto --release-label emr-5.16.0 \
  --use-default-roles --ec2-attributes KeyName=MyKeyPair,SubnetId=subnet-1234ab5 \ --instance-count 3 --instance-type m5.xlarge --region us-west-2 --name "MyPrestoWithLDAPAuth" \
  --bootstrap-actions Name="Distribute LDAP server cert",Path="s3://amzn-s3-demo-bucket/LoadLDAPCert.sh" \
  --security-configuration MyPrestoLDAPSecCfg --configurations file://MyPrestoConfig.json
  ```