

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

# 튜토리얼: 구성 공급자를 사용하여 민감한 정보 외부화
<a name="msk-connect-config-provider"></a>

이 예제는 오픈 소스 구성 공급자를 사용하여 Amazon MSK Connect의 민감한 정보를 외부화하는 방법을 보여줍니다. 구성 공급자를 사용하면 커넥터 또는 작업자 구성에서 일반 텍스트 대신 변수를 지정할 수 있으며 커넥터에서 실행 중인 작업자는 런타임 시 이러한 변수를 확인합니다. 이렇게 하면 보안 인증 정보 및 기타 비밀이 일반 텍스트로 저장되는 것을 방지할 수 있습니다. 예제의 구성 공급자는 AWS Secrets Manager, Amazon S3 및 Systems Manager(SSM)에서 구성 파라미터 검색을 지원합니다. [2단계](#msk-connect-config-providers)에서는 구성하려는 서비스에 대한 민감한 정보의 저장 및 검색을 설정하는 방법을 확인할 수 있습니다.

## 고려 사항
<a name="msk-connect-config-providers-considerations"></a>

Amazon MSK Connect에서 MSK 구성 공급자를 사용하는 경우 다음을 고려하세요.
+ 구성 공급자를 IAM 서비스 실행 역할에 사용하는 경우 적절한 권한을 할당합니다.
+ 작업자 구성에서 구성 공급자를 정의하고 커넥터 구성에서 해당 구현을 정의합니다.
+ 플러그인이 해당 값을 암호로 정의하지 않은 경우 커넥터 로그에 민감한 구성 값이 표시될 수 있습니다. Kafka Connect는 정의되지 않은 구성 값을 기타 일반 텍스트 값과 동일하게 취급합니다. 자세한 내용은 [커넥터 로그에 비밀이 표시되지 않도록 하기](msk-connect-logging.md#msk-connect-logging-secrets)를 참조하세요.
+ 기본적으로 MSK Connect는 커넥터가 구성 공급자를 사용하는 경우 커넥터를 자주 다시 시작합니다. 이러한 다시 시작 동작을 해제하려면 커넥터 구성에서 `config.action.reload` 값을 `none`으로 설정하면 됩니다.

## 사용자 지정 플러그인을 생성하고 S3에 업로드
<a name="msk-connect-config-providers-create-custom-plugin"></a>

 사용자 지정 플러그인을 생성하려면 로컬 컴퓨터에서 다음 명령을 실행하여 커넥터와 msk-config-provider가 포함된 zip 파일을 생성합니다.

**터미널 창과 Debezium을 커넥터로 사용하여 사용자 지정 플러그인을 만들려면 다음을 수행합니다.**

 AWS CLI를 사용하여 AWS S3 버킷에 액세스할 수 있는 자격 증명을 사용하여 슈퍼 사용자로 명령을 실행합니다. AWS CLI 설치 및 설정에 대한 자세한 내용은 *AWS Command Line Interface 사용 설명서*[의 AWS CLI 시작하기](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)를 참조하세요. Amazon S3에서 AWS CLI를 사용하는 방법에 대한 자세한 내용은 *AWS Command Line Interface 사용 설명서*[의 AWS CLI에서 Amazon S3 사용을](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3.html) 참조하세요.

1. 터미널 창에서 다음 명령을 사용하여 Workspace에 `custom-plugin`이라는 이름의 폴더를 생성합니다.

   ```
   mkdir custom-plugin && cd custom-plugin
   ```

1. 다음 명령을 사용하여 [Debezium 사이트](https://debezium.io/releases/)에서 **MySQL 커넥터 플러그인**의 안정적인 최신 릴리스를 다운로드하세요.

   ```
   wget https://repo1.maven.org/maven2/io/debezium/debezium-connectormysql/
   2.2.0.Final/debezium-connector-mysql-2.2.0.Final-plugin.tar.gz
   ```

   다음 명령을 사용하여 `custom-plugin` 폴더에서 다운로드한 gzip 파일의 압축을 풉니다.

   ```
   tar xzf debezium-connector-mysql-2.2.0.Final-plugin.tar.gz
   ```

1. 다음 명령을 사용하여 [MSK 구성 공급자 zip 파일](https://github.com/aws-samples/msk-config-providers/releases/download/r0.4.0/msk-config-providers-0.4.0-with-dependencies.zip)을 다운로드합니다.

   ```
   wget https://github.com/aws-samples/msk-config-providers/releases/download/r0.4.0/msk-config-providers-0.4.0-with-dependencies.zip
   ```

   다음 명령을 사용하여 `custom-plugin` 폴더에서 다운로드한 zip 파일의 압축을 풉니다.

   ```
   unzip msk-config-providers-0.4.0-with-dependencies.zip
   ```

1. 위 단계의 MSK 구성 공급자 콘텐츠와 사용자 지정 커넥터를 `custom-plugin.zip`이라는 단일 파일로 압축합니다.

   ```
   zip -r ../custom-plugin.zip * 
   ```

1. 나중에 참조할 수 있도록 S3에 파일을 업로드합니다.

   ```
   aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION>
   ```

1. Amazon MSK 콘솔의 **MSK Connect** 섹션에서 **사용자 지정 플러그인**을 선택한 후 **사용자 지정 플러그인 생성**을 선택하고, **s3:<*S3\$1URI\$1BUCKET\$1LOCATION*>** S3 버킷을 탐색하여 방금 업로드한 사용자 지정 플러그인 ZIP 파일을 선택합니다.  
![\[Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.\]](http://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/images/s3-object-browser.png)

1. 플러그인 이름으로 **debezium-custom-plugin**을 입력합니다. 설명을 입력하고 **사용자 지정 플러그인 생성**을 선택합니다(선택 사항).  
![\[Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.\]](http://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/images/create-custom-plugin.png)

## 다양한 공급자에 대한 파라미터 및 권한 구성
<a name="msk-connect-config-providers"></a>

다음 3가지 서비스에서 파라미터 값을 구성할 수 있습니다.
+ Secrets Manager 
+ Systems Manager Parameter Store
+ S3 - Simple Storage Service

아래 탭 중 하나를 선택하면 해당 서비스에 대한 파라미터 및 관련 권한 설정에 대한 지침을 확인할 수 있습니다.

------
#### [ Configure in Secrets Manager ]

**Secrets Manager에서 파라미터 값을 구성하려면 다음을 수행합니다.**

1. [Secrets Manager 콘솔](https://console.aws.amazon.com/secretsmanager/)을 엽니다.

1. 보안 인증 정보 또는 비밀을 저장할 새 비밀을 생성합니다. 지침은 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager 보안 암호 생성을](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) 참조하세요.

1. 보안 암호의 ARN을 복사합니다.

1. 다음 예제 정책의 Secrets Manager 권한을 [서비스 실행 역할](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html)에 추가합니다. 예제 ARN `arn:aws:secretsmanager:us-east-1:123456789012:secret:MySecret-1234`를 보안 암호의 ARN으로 바꿉니다.

1. 작업자 구성과 커넥터 지침을 추가합니다.  
****  

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Effect": "Allow",
                   "Action": [
                       "secretsmanager:GetResourcePolicy",
                       "secretsmanager:GetSecretValue",
                       "secretsmanager:DescribeSecret",
                       "secretsmanager:ListSecretVersionIds"
                   ],
                   "Resource": [
                   "arn:aws:secretsmanager:us-east-1:123456789012:secret:MySecret-1234"
                   ]
               }
           ]
       }
   ```

1. Secrets Manager 구성 공급자를 사용하려면 3단계의 작업자 구성 텍스트 상자에 다음 코드 줄을 복사합니다.

   ```
   # define name of config provider:
   
   config.providers = secretsmanager
   
   # provide implementation classes for secrets manager:
   
   config.providers.secretsmanager.class = com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider
   
   # configure a config provider (if it needs additional initialization), for example you can provide a region where the secrets or parameters are located:
   
   config.providers.secretsmanager.param.region = us-east-1
   ```

1. Secrets Manager 구성 공급자 4단계의 커넥터 구성에 다음 코드 줄을 복사합니다.

   ```
   #Example implementation for secrets manager variable
   database.user=${secretsmanager:MSKAuroraDBCredentials:username}
   database.password=${secretsmanager:MSKAuroraDBCredentials:password}
   ```

위의 단계를 더 많은 구성 공급자와 함께 사용할 수도 있습니다.

------
#### [ Configure in Systems Manager Parameter Store ]

**Systems Manager Parameter Store에서 파라미터 값을 구성하려면 다음을 수행합니다.**

1. [Systems Manager](https://console.aws.amazon.com/systems-manager/) 콘솔을 엽니다.

1. 탐색 창에서 **파라미터 스토어**를 선택합니다.

1. Systems Manager에 저장할 새 파라미터를 생성합니다. 지침은 AWS Systems Manager 사용 설명서의 [Systems Manager 파라미터 생성(콘솔)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html)을 참조하세요.

1. 파라미터의 ARN을 복사합니다.

1. 다음 예제 정책의 Systems Manager 권한을 [서비스 실행 역할](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html)에 추가합니다. *<arn:aws:ssm:us-east-1:123456789000:parameter/MyParameterName>*을 파라미터의 ARN으로 변경합니다.  
****  

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Sid": "VisualEditor0",
                   "Effect": "Allow",
                   "Action": [
                       "ssm:GetParameterHistory",
                       "ssm:GetParametersByPath",
                       "ssm:GetParameters",
                       "ssm:GetParameter"
                   ],
                   "Resource": "arn:aws:ssm:us-east-1:123456789000:parameter/MyParameterName"
               }
           ]
       }
   ```

1. 파라미터 저장소 구성 공급자를 사용하려면 3단계의 작업자 구성 텍스트 상자에 다음 코드 줄을 복사합니다.

   ```
   # define name of config provider:
   
   config.providers = ssm
   
   # provide implementation classes for parameter store:
   
   config.providers.ssm.class = com.amazonaws.kafka.config.providers.SsmParamStoreConfigProvider
   
   # configure a config provider (if it needs additional initialization), for example you can provide a region where the secrets or parameters are located:
   
   config.providers.ssm.param.region = us-east-1
   ```

1. 파라미터 저장소 구성 공급자의 경우 5단계의 커넥터 구성에서 다음 코드 줄을 복사합니다.

   ```
   #Example implementation for parameter store variable
   schema.history.internal.kafka.bootstrap.servers=${ssm::MSKBootstrapServerAddress}
   ```

   위의 두 단계를 더 많은 구성 공급자와 함께 번들로 제공할 수도 있습니다.

------
#### [ Configure in Amazon S3 ]

**Amazon S3에서 객체/파일을 구성하려면 다음을 수행합니다.**

1. [Amazon S3 콘솔](https://console.aws.amazon.com/s3/)을 엽니다.

1. S3의 버킷에 객체를 업로드합니다. 지침은 [객체 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)를 참조하세요.

1. 객체의 ARN을 복사합니다.

1. 다음 예제 정책의 Amazon S3 객체 읽기 권한을 [서비스 실행 역할](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-service-execution-role.html)에 추가합니다. 예제 ARN `arn:aws:s3:::<MY_S3_BUCKET/path/to/custom-plugin.zip>`을 객체의 ARN으로 바꿉니다.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
               {
                   "Sid": "VisualEditor0",
                   "Effect": "Allow",
                   "Action": "s3:GetObject",
                   "Resource": "arn:aws:s3:::<MY_S3_BUCKET/path/to/custom-plugin.zip>"
               }
           ]
       }
   ```

1. Amazon S3 구성 공급자를 사용하려면 3단계의 작업자 구성 텍스트 상자에 다음 코드 줄을 복사합니다.

   ```
   # define name of config provider:
   
   config.providers = s3import
   # provide implementation classes for S3:
   
   config.providers.s3import.class = com.amazonaws.kafka.config.providers.S3ImportConfigProvider
   ```

1. Amazon S3 구성 공급자의 경우 4단계의 커넥터 구성에 다음 코드 줄을 복사합니다.

   ```
   #Example implementation for S3 object
   
   database.ssl.truststore.location = ${s3import:us-west-2:my_cert_bucket/path/to/trustore_unique_filename.jks}
   ```

   위의 두 단계를 더 많은 구성 공급자와 함께 번들로 제공할 수도 있습니다.

------

## 구성 제공자에 대한 정보를 사용하여 사용자 지정 작업자 구성 생성
<a name="msk-connect-config-providers-create-custom-config"></a>

1. **Amazon MSK Connect** 섹션에서 **작업자 구성**을 선택합니다.

1. **작업자 구성 생성**을 선택합니다.

1. 작업자 구성 이름 텍스트 상자에 `SourceDebeziumCustomConfig`를 입력합니다. 설명은 선택 사항입니다.

1. 원하는 공급자에 따라 관련 구성 코드를 복사하여 **작업자 구성** 텍스트 상자에 붙여넣습니다.

1. 다음은 세 가지 제공자 모두에 대한 작업자 구성의 예입니다.

   ```
   key.converter=org.apache.kafka.connect.storage.StringConverter
   key.converter.schemas.enable=false
   value.converter=org.apache.kafka.connect.json.JsonConverter
   value.converter.schemas.enable=false
   offset.storage.topic=offsets_my_debezium_source_connector
   
   # define names of config providers:
   
   config.providers=secretsmanager,ssm,s3import
   
   # provide implementation classes for each provider:
   
   config.providers.secretsmanager.class    = com.amazonaws.kafka.config.providers.SecretsManagerConfigProvider
   config.providers.ssm.class               = com.amazonaws.kafka.config.providers.SsmParamStoreConfigProvider
   config.providers.s3import.class          = com.amazonaws.kafka.config.providers.S3ImportConfigProvider
   
   # configure a config provider (if it needs additional initialization), for example you can provide a region where the secrets or parameters are located:
   
   
   config.providers.secretsmanager.param.region = us-east-1
   config.providers.ssm.param.region = us-east-1
   ```

1. 작업자 구성 생성을 클릭합니다.

## 커넥터 생성
<a name="msk-connect-config-providers-create-connector"></a>

1. [새 커넥터 생성](https://docs.aws.amazon.com/msk/latest/developerguide/mkc-create-connector.html)의 지침에 따라 새 커넥터를 생성합니다.

1. [사용자 지정 플러그인을 생성하고 S3에 업로드](#msk-connect-config-providers-create-custom-plugin)에서 S3 버킷에 업로드한 `custom-plugin.zip` 파일을 사용자 지정 플러그인의 소스로 선택합니다.

1. 원하는 공급자에 따라 관련 구성 코드를 복사하여 커넥터 구성 필드에 붙여넣습니다.

1. 다음은 세 가지 제공자 모두에 대한 커넥터 구성의 예입니다.

   ```
   #Example implementation for parameter store variable
   schema.history.internal.kafka.bootstrap.servers=${ssm::MSKBootstrapServerAddress}
   
   #Example implementation for secrets manager variable
   database.user=${secretsmanager:MSKAuroraDBCredentials:username}
   database.password=${secretsmanager:MSKAuroraDBCredentials:password}
   
   #Example implementation for Amazon S3 file/object
   database.ssl.truststore.location = ${s3import:us-west-2:my_cert_bucket/path/to/trustore_unique_filename.jks}
   ```

1. **사용자 지정 구성 사용**을 선택하고 **작업자 구성** 드롭다운에서 **SourceDebeziumCustomConfi**g를 선택합니다.

1. [커넥터 생성](https://docs.aws.amazon.com/msk/latest/developerguide/mkc-create-connector.html)에 나와 있는 지침의 나머지 단계를 수행합니다.