

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

# Amazon MSK 클러스터를 위해 SASL/SCRAM 인증 설정
<a name="msk-password-tutorial"></a>

 AWS Secrets Manager에서 보안 암호를 설정하려면 [AWS Secrets Manager 사용 설명서](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)의 [보안 암호 생성 및 검색](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html) 자습서를 따르세요.

Amazon MSK 클러스터에 대한 보안 암호를 생성하는 경우에는 다음 요구 사항에 유의하세요.
+ 암호 유형으로 **다른 유형의 보안 암호(예: API 키)**를 선택합니다.
+ 보안 암호 이름은 접두사 **AmazonMSK\$1**로 시작해야 합니다.
+ 기존 사용자 지정 AWS KMS 키를 사용하거나 보안 암호에 대한 새 사용자 지정 AWS KMS 키를 생성해야 합니다. Secrets Manager는 기본적으로 보안 암호에 기본 AWS KMS 키를 사용합니다.
**중요**  
기본 AWS KMS 키로 생성된 보안 암호는 Amazon MSK 클러스터에서 사용할 수 없습니다.
+ **일반 텍스트** 옵션을 사용하여 키-값 페어를 입력하려면 로그인 보안 인증 정보 데이터가 다음 형식이어야 합니다.

  ```
  {
    "username": "alice",
    "password": "alice-secret"
  }
  ```
+ 보안 암호에 대한 Amazon 리소스 이름(ARN) 값 
+ 
**중요**  
[클러스터 크기를 적절하게 조정: Standard 브로커당 파티션 수](bestpractices.md#partitions-per-broker)에 설명된 제한을 초과하는 클러스터에는 Secrets Manager 보안 암호를 연결할 수 없습니다.
+  AWS CLI 를 사용하여 보안 암호를 생성하는 경우 `kms-key-id` 파라미터의 키 ID 또는 ARN을 지정합니다. 별칭을 지정하지 마세요.
+ 보안 암호를 클러스터에 연결하려면 Amazon MSK 콘솔 또는 [BatchAssociateScramSecret](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-scram-secrets.html#BatchAssociateScramSecret) 작업을 사용합니다.
**중요**  
암호를 클러스터와 연결하면 Amazon MSK는 클러스터가 정의한 보안 암호 값에 액세스하고 읽을 수 있도록 허용하는 리소스 정책을 암호에 연결합니다. 이 리소스 정책을 수정해서는 안 됩니다. 이렇게 하면 클러스터가 보안 암호에 액세스하는 것을 방지할 수 있습니다. 보안 암호 리소스 정책 및/또는 보안 암호 암호화에 사용되는 KMS 키를 변경하는 경우 보안 암호를 MSK 클러스터에 다시 연결해야 합니다. 이를 통해 클러스터가 보안 암호에 계속 액세스할 수 있습니다.

  다음 `BatchAssociateScramSecret` 작업의 예제 JSON 입력은 보안 암호를 클러스터와 연결합니다.

  ```
  {
    "clusterArn" : "arn:aws:kafka:us-west-2:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4",          
    "secretArnList": [
      "arn:aws:secretsmanager:us-west-2:0123456789019:secret:AmazonMSK_MyClusterSecret"
    ]
  }
  ```

# 로그인 보안 인증 정보를 사용하여 클러스터에 연결
<a name="msk-password-tutorial-connect"></a>

보안 암호를 생성하고 클러스터에 연결하면 클라이언트를 클러스터에 연결할 수 있습니다. 다음 절차에서는 SASL/SCRAM 인증을 사용하는 클러스터에 클라이언트를 연결하는 방법을 보여줍니다. 또한 예제 주제에서 이를 생성하고 소비하는 방법을 보여줍니다.

**Topics**
+ [SASL/SCRAM 인증을 사용하여 클러스터에 클라이언트 연결](#w2aab9c13c29c17c13c11b9b7)
+ [연결 문제 해결](#msk-password-tutorial-connect-troubleshooting)

## SASL/SCRAM 인증을 사용하여 클러스터에 클라이언트 연결
<a name="w2aab9c13c29c17c13c11b9b7"></a>

1. 가 AWS CLI 설치된 시스템에서 다음 명령을 실행합니다. *clusterARN*을 클러스터의 ARN으로 바꿉니다.

   ```
   aws kafka get-bootstrap-brokers --cluster-arn clusterARN
   ```

   이 명령의 JSON 결과에서 `BootstrapBrokerStringSaslScram`이라는 문자열과 연관된 값을 저장합니다. 이후 단계에서 이 값을 사용합니다.

1. 클라이언트 머신에서 암호에 저장된 사용자 보안 인증 정보가 포함된 JAAS 구성 파일을 생성합니다. 예를 들어 사용자 **alice**에 대해 다음과 같은 내용으로 `users_jaas.conf`라는 파일을 생성합니다.

   ```
   KafkaClient {
      org.apache.kafka.common.security.scram.ScramLoginModule required
      username="alice"
      password="alice-secret";
   };
   ```

1. 다음 명령을 사용하여 JAAS 구성 파일을 `KAFKA_OPTS` 환경 파라미터로 내보냅니다.

   ```
   export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
   ```

1. `/tmp` 디렉터리에 `kafka.client.truststore.jks`라는 파일을 생성합니다.

1. (선택 사항) 다음 명령을 사용하여 JVM `cacerts` 폴더에 이전 단계에서 생성한 `kafka.client.truststore.jks` 파일로 JDK 키 저장소 파일을 복사합니다. *JDKFolder*를 인스턴스의 JDK 폴더 이름으로 변경합니다. 예를 들어 JDK 폴더의 이름은 `java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64`일 수 있습니다.

   ```
   cp /usr/lib/jvm/JDKFolder/lib/security/cacerts /tmp/kafka.client.truststore.jks
   ```

1. Apache Kafka 설치의 `bin` 디렉터리에 다음 내용으로 `client_sasl.properties`라는 클라이언트 속성 파일을 생성합니다. 이 파일은 SASL 메커니즘과 프로토콜을 정의합니다.

   ```
   security.protocol=SASL_SSL
   sasl.mechanism=SCRAM-SHA-512
   ```

1. 예제 주제를 생성하려면 다음 명령을 실행합니다. *BootstrapBrokerStringSaslScram*을 이 주제의 1단계에서 얻은 부트스트랩 브로커 문자열로 바꿉니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapBrokerStringSaslScram --command-config <path-to-client-properties>/client_sasl.properties --replication-factor 3 --partitions 1 --topic ExampleTopicName
   ```

1. 생성한 예제 주제로 생성하려면 클라이언트 머신에서 다음 명령을 실행합니다. *BootstrapBrokerStringSaslScram*을 이 주제의 1단계에서 검색한 부트스트랩 브로커 문자열로 바꿉니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
   ```

1. 생성한 주제에서 사용하려면 클라이언트 머신에서 다음 명령을 실행합니다. *BootstrapBrokerStringSaslScram*을 이 주제의 1단계에서 얻은 부트스트랩 브로커 문자열로 바꿉니다.

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties
   ```

## 연결 문제 해결
<a name="msk-password-tutorial-connect-troubleshooting"></a>

Kafka 클라이언트 명령을 실행하는 경우, 특히 대규모 주제 또는 데이터세트로 작업할 때 Java 힙 메모리 오류가 발생할 수 있습니다. 이러한 오류는 Kafka 도구가 워크로드에 충분하지 않을 수 있는 기본 메모리 설정이 있는 Java 애플리케이션으로 실행되기 때문에 발생합니다.

`Out of Memory Java Heap` 오류를 해결하려면 메모리 설정을 포함하도록 `KAFKA_OPTS` 환경 변수를 수정하여 Java 힙 크기를 늘릴 수 있습니다.

다음 예제에서는 최대 힙 크기를 1GB(`-Xmx1G`)로 설정합니다. 사용 가능한 시스템 메모리 및 요구 사항에 따라 이 값을 조정할 수 있습니다.

```
export KAFKA_OPTS="-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf -Xmx1G"
```

대규모 주제를 사용하는 경우 메모리 사용량을 제한하는 `--from-beginning` 대신 시간 기반 또는 오프셋 기반 파라미터를 사용하는 것이 좋습니다.

```
<path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --max-messages 1000 --consumer.config client_sasl.properties
```