자습서: 구성 공급자를 사용하여 민감한 정보 외부화 - Amazon Managed Streaming for Apache Kafka

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

자습서: 구성 공급자를 사용하여 민감한 정보 외부화

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

고려 사항

Amazon MSK Connect와 함께 MSK 구성 공급자를 사용할 때는 다음 사항을 고려하세요.

  • 구성 공급자를 사용할 때 IAM 서비스 실행 역할에 적절한 권한을 할당합니다.

  • 작업자 구성에서 구성 공급자를 정의하고 커넥터 구성에서 해당 구현을 정의합니다.

  • 플러그인이 해당 값을 암호로 정의하지 않은 경우 커넥터 로그에 민감한 구성 값이 표시될 수 있습니다. Kafka Connect는 정의되지 않은 구성 값을 기타 일반 텍스트 값과 동일하게 취급합니다. 자세한 내용은 커넥터 로그에 비밀이 표시되지 않도록 하기을 참조하십시오.

  • 기본적으로 MSK Connect는 커넥터가 구성 공급자를 사용할 때 커넥터를 자주 다시 시작합니다. 이러한 다시 시작 동작을 해제하려면 커넥터 구성에서 config.action.reload 값을 none으로 설정하면 됩니다.

사용자 지정 플러그인을 생성하고 S3에 업로드

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

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

를 AWS CLI 사용하여 AWS S3 버킷에 액세스할 수 있는 보안 인증 정보를 사용하여 슈퍼 사용자로 명령을 실행합니다. 설치 및 설정에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서의 시작하기 AWS CLI를 AWS CLI참조하세요. Amazon S3에서 를 AWS CLI 사용하는 방법에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서에서 Amazon S3를 사용하여 AWS CLI 사용을 참조하세요.

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

    mkdir custom-plugin && cd custom-plugin
  2. 다음 명령을 사용하여 Debezium 사이트에서 MySQL Connector 플러그인의 안정적인 최신 릴리스를 다운로드합니다.

    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
  3. 다음 명령을 사용하여 MSK 구성 공급자 zip 파일을 다운로드합니다.

    wget https://github.com/aws-samples/msk-config-providers/releases/download/r0.1.0/msk-config-providers-0.1.0-with-dependencies.zip

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

    unzip msk-config-providers-0.1.0-with-dependencies.zip
  4. 위 단계에서 MSK 구성 공급자의 콘텐츠를 압축하고 사용자 지정 커넥터를 라는 단일 파일로 압축합니다custom-plugin.zip.

    zip -r ../custom-plugin.zip *
  5. 나중에 참조할 수 있도록 S3에 파일을 업로드합니다.

    aws s3 cp ../custom-plugin.zip s3:<S3_URI_BUCKET_LOCATION>
  6. Amazon MSK 콘솔의 MSK 연결 섹션에서 사용자 지정 플러그인을 선택한 다음 사용자 지정 플러그인 생성을 선택하고 s3:<를 찾습니다.S3_URI_BUCKET_LOCATION> 방금 업로드한 사용자 지정 플러그인 ZIP 파일을 선택하는 S3 버킷입니다.

    Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.
  7. 플러그인 이름으로 debezium-custom-plugin을 입력합니다. 설명을 입력하고 사용자 지정 플러그인 생성을 선택합니다(선택 사항).

    Amazon S3 bucket interface showing a single custom-plugin.zip file in the debezium folder.

다른 공급자에 대한 파라미터 및 권한 구성

다음 3가지 서비스에서 파라미터 값을 구성할 수 있습니다.

  • Secrets Manager

  • Systems Manager Parameter Store

  • S3 - Simple Storage Service

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

Configure in Secrets Manager
Secrets Manager에서 파라미터 값을 구성하려면 다음을 수행합니다.
  1. Secrets Manager 콘솔을 엽니다.

  2. 보안 인증 정보 또는 비밀을 저장할 새 비밀을 생성합니다. 지침은 AWS Secrets Manager 사용 설명서의 AWS Secrets Manager 보안 암호 생성을 참조하세요.

  3. 보안 암호의 를 복사합니다ARN.

  4. 다음 예제 정책의 Secrets Manager 권한을 서비스 실행 역할에 추가합니다. Replace <arn:aws:secretsmanager:us-east-1:123456789000:secret:MySecret-1234> 보안 암호ARN의 를 사용합니다.

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "<arn:aws:secretsmanager:us-east-1:123456789000:secret:MySecret-1234>" ] } ] }
  6. 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
  7. Secrets Manager 구성 공급자 4단계의 커넥터 구성에 다음 코드 줄을 복사합니다.

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

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

Configure in Systems Manager Parameter Store
Systems Manager Parameter Store에서 파라미터 값을 구성하려면 다음을 수행합니다.
  1. Systems Manager 콘솔을 엽니다.

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

  3. Systems Manager에 저장할 새 파라미터를 생성합니다. 지침은 AWS Systems Manager 사용 설명서의 Systems Manager 파라미터 생성(콘솔)을 참조하세요.

  4. 파라미터의 를 복사합니다ARN.

  5. 다음 예제 정책의 Systems Manager 권한을 서비스 실행 역할에 추가합니다. Replace <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" } ] }
  6. 파라미터 저장소 구성 공급자를 사용하려면 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
  7. 파라미터 저장소 구성 공급자의 경우 5단계의 커넥터 구성에서 다음 코드 줄을 복사합니다.

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

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

Configure in Amazon S3
Amazon S3에서 객체/파일을 구성하려면 다음을 수행합니다.
  1. Amazon S3 콘솔을 엽니다.

  2. S3의 버킷에 객체를 업로드합니다. 지침은 객체 업로드를 참조하세요.

  3. 객체의 를 복사합니다ARN.

  4. 다음 예제 정책의 Amazon S3 객체 읽기 권한을 서비스 실행 역할에 추가합니다. 바꾸기 <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>" } ] }
  5. 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
  6. 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}

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

구성 제공자에 대한 정보를 사용하여 사용자 지정 작업자 구성 생성

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

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

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

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

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

    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
  6. 작업자 구성 생성을 클릭합니다.

커넥터 생성

  1. 새 커넥터 생성의 지침에 따라 새 커넥터를 생성합니다.

  2. 사용자 지정 플러그인을 생성하고 S3에 업로드에서 S3 버킷에 업로드한 custom-plugin.zip 파일을 사용자 지정 플러그인의 소스로 선택합니다.

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

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

    #Example implementation for parameter store variable schema.history.internal.kafka.bootstrap.servers=${ssm::MSKBootstrapServerAddress} #Example implementation for secrets manager variable database.hostname=${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}
  5. 사용자 지정 구성 사용을 선택하고 작업자 구성 드롭다운SourceDebeziumCustomConfig에서 를 선택합니다.

  6. 커넥터 생성에 나와 있는 지침의 나머지 단계를 수행합니다.