클라이언트 인증 - Amazon Managed Streaming for Apache Kafka

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

클라이언트 인증

애플리케이션에서 Amazon MSK 브로커로의 연결을 위해 TLS를 사용하여 클라이언트 인증을 활성화할 수 있습니다. 클라이언트 인증을 사용하려면 ACM Private CA가 필요합니다. 프라이빗 CA에 대한 자세한 내용은 프라이빗 CA 생성 및 관리를 참조하십시오.

참고

TLS 인증은 현재 BJS, MXP 또는 ZHY 영역에서 사용할 수 없습니다.

클라이언트 인증을 지원하는 클러스터를 생성하려면

이 절차에서는 ACM에서 호스팅하는 CA를 사용하여 클라이언트 인증을 활성화하도록 설정하는 방법을 보여줍니다.

  1. 다음 콘텐츠를 통해 clientauthinfo.json이라는 파일을 생성합니다. Replace Private-CA-ARN PCA 의 ARN을 사용합니다.

    { "Tls": { "CertificateAuthorityArnList": ["Private-CA-ARN"] } }
  2. AWS CLI을 사용하여 클러스터 생성에 설명된 대로 brokernodegroupinfo.json 파일을 생성합니다.

  3. 클라이언트 인증을 사용하려면 클라이언트와 브로커 간 전송 중 암호화를 활성화해야 합니다. 다음 콘텐츠를 통해 encryptioninfo.json이라는 파일을 생성합니다. Replace KMS-Key-ARN KMS 키 의 ARN을 사용합니다. ClientBrokerTLS 또는 TLS_PLAINTEXT로 설정할 수 있습니다.

    { "EncryptionAtRest": { "DataVolumeKMSKeyId": "KMS-Key-ARN" }, "EncryptionInTransit": { "InCluster": true, "ClientBroker": "TLS" } }

    암호화에 대한 자세한 내용은 Amazon MSK 암호화 단원을 참조하십시오.

  4. AWS CLI가 설치된 머신에서 다음 명령을 실행하여 인증 및 전송 중 암호화가 활성화된 클러스터를 만듭니다. 응답에 제공된 클러스터 ARN을 저장합니다.

    aws kafka create-cluster --cluster-name "AuthenticationTest" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file://encryptioninfo.json --client-authentication file://clientauthinfo.json --kafka-version "2.2.1" --number-of-broker-nodes 3

인증을 사용하도록 클라이언트를 설정하려면

  1. 클라이언트 머신으로 사용할 Amazon EC2 인스턴스를 만듭니다. 간단히 하기 위해 클러스터에 사용한 것과 동일한 VPC에 이 인스턴스를 생성합니다. 이러한 클라이언트 머신을 생성하는 방법에 대한 예제는 단계 4. 클라이언트 시스템 생성 단원을 참조하십시오.

  2. 주제 생성 예를 들어, 단계 5. 주제 생성 단원의 지침을 참조하십시오.

  3. AWS CLI가 설치된 머신에서 다음 명령을 실행하여 클러스터의 부트스트랩 브로커를 가져옵니다. Replace Cluster-ARN ARN을 사용할 수 있습니다.

    aws kafka get-bootstrap-brokers --cluster-arn Cluster-ARN

    응답에서 BootstrapBrokerStringTls에 연결된 문자열을 저장합니다.

  4. 클라이언트 머신에서 다음 명령을 실행하여 JVM 트러스트 스토어를 사용하여 클라이언트 트러스트 스토어를 만듭니다. JVM 경로가 다른 경우 그에 따라 명령을 조정하십시오.

    cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts kafka.client.truststore.jks
  5. 클라이언트 머신에서 다음 명령을 실행하여 클라이언트에 대한 프라이빗 키를 만듭니다. Replace Distinguished-Name, Example-Alias, Your-Store-Pass, 및 .Your-Key-Pass 선택한 문자열로 을(를) 선택합니다.

    keytool -genkey -keystore kafka.client.keystore.jks -validity 300 -storepass Your-Store-Pass -keypass Your-Key-Pass -dname "CN=Distinguished-Name" -alias Example-Alias -storetype pkcs12
  6. 클라이언트 머신에서 다음 명령을 실행하여 이전 단계에서 만든 프라이빗 키로 인증서 요청을 만듭니다.

    keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
  7. 다음을 엽니다. client-cert-sign-request 파일과 이 파일이 -----BEGIN CERTIFICATE REQUEST----- 끝남 -----END CERTIFICATE REQUEST-----. 다음에서 시작하는 경우 -----BEGIN NEW CERTIFICATE REQUEST-----, 단어 삭제 NEW 파일 시작과 끝부터 시작합니다.

  8. AWS CLI가 설치된 머신에서 다음 명령을 실행하여 인증서 요청에 서명합니다. Replace Private-CA-ARN PCA 의 ARN을 사용합니다. 원하는 경우 유효성 값을 변경할 수 있습니다. 여기에서는 300을 사용합니다.

    aws acm-pca issue-certificate --certificate-authority-arn Private-CA-ARN --csr file://client-cert-sign-request --signing-algorithm "SHA256WITHRSA" --validity Value=300,Type="DAYS"

    응답에 제공된 인증서 ARN을 저장합니다.

  9. 다음 명령을 실행하여 ACM이 자동 서명한 인증서를 가져옵니다. Replace Certificate-ARN 이전 명령에 대한 응답에서 얻은 ARN을 사용하여

    aws acm-pca get-certificate --certificate-authority-arn Private-CA-ARN --certificate-arn Certificate-ARN
  10. 이전 명령을 실행한 JSON 결과에서 와 연결된 문자열을 복사합니다. CertificateCertificateChain. 이 두 문자열을 새 파일인 서명된-인증서-from-acm에 붙여넣습니다. 와 연결된 문자열 붙여넣기 Certificate 먼저, 다음으로 CertificateChain. 교체 \n 새 줄이 있는 문자. 다음은 인증서 및 인증서 체인을 붙여 넣은 이후의 파일 구조입니다.

    -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
  11. 클라이언트 머신에서 다음 명령을 실행하여 MSK 브로커와 통신할 때 제공할 수 있도록 키 스토어에 이 인증서를 추가합니다.

    keytool -keystore kafka.client.keystore.jks -import -file signed-certificate-from-acm -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
  12. 다음 콘텐츠를 통해 client.properties이라는 파일을 생성합니다. 트러스트 스토어 및 키 스토어 위치를 kafka.client.truststore.jks를 저장한 경로로 조정합니다.

    security.protocol=SSL ssl.truststore.location=/tmp/kafka_2.12-2.2.1/kafka.client.truststore.jks ssl.keystore.location=/tmp/kafka_2.12-2.2.1/kafka.client.keystore.jks ssl.keystore.password=Your-Store-Pass ssl.key.password=Your-Key-Pass

인증을 사용하여 메시지를 생성하고 사용하려면

  1. 다음 명령을 실행해 주제를 생성합니다.

    bin/kafka-topics.sh --create --zookeeper ZooKeeper-Connection-String --replication-factor 3 --partitions 1 --topic ExampleTopic
  2. 콘솔 생산자를 시작하려면 다음 명령을 실행합니다. client.properties라는 파일은 이전 절차에서 생성한 파일입니다.

    bin/kafka-console-producer.sh --broker-list BootstrapBroker-String --topic ExampleTopic --producer.config client.properties
  3. 클라이언트 머신의 새 명령 창에서 다음 명령을 실행하여 콘솔 소비자를 시작합니다.

    bin/kafka-console-consumer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --consumer.config client.properties
  4. 생산자 창에 메시지를 입력하고 소비자 창에 표시되는지 확인합니다.