상호 TLS 인증 - Amazon Managed Streaming for Apache Kafka

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

상호 TLS 인증

애플리케이션에서 Amazon MSK 브로커 및 노드로의 연결에 대해 TLS를 통한 클라이언트 인증을 활성화할 수 있습니다. ZooKeeper 클라이언트 인증을 사용하려면 AWS Private CA가 필요합니다. 클러스터와 AWS 계정 동일하거나 다른 계정에 있을 AWS Private CA 수 있습니다. AWS Private CA s에 대한 자세한 내용은 a 생성 및 관리를 참조하십시오 AWS Private CA.

참고

현재 베이징 및 닝샤 지역에서는 TLS 인증을 사용할 수 없습니다.

Amazon MSK는 인증서 해지 목록(CRL)을 지원하지 않습니다. 클러스터 주제에 대한 액세스를 제어하거나 손상된 인증서를 차단하려면 Apache Kafka ACL 및 보안 그룹을 사용하십시오. AWS Apache Kafka ACL 사용에 대한 자세한 내용은 Apache Kafka ACL 섹션을 참조하세요.

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

이 절차는 a를 사용하여 클라이언트 인증을 활성화하는 방법을 보여줍니다. AWS Private CA

참고

상호 TLS를 사용하여 액세스를 제어할 때는 각 MSK AWS Private CA 클러스터에 대해 독립적으로 사용하는 것이 좋습니다. 이렇게 하면 PCA가 서명한 TLS 인증서는 단일 MSK 클러스터에서만 인증됩니다.

  1. 다음 콘텐츠를 가진 clientauthinfo.json이라는 파일을 생성합니다: Private-CA-ARN을 PCA의 ARN으로 바꿉니다.

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

  3. 클라이언트 인증을 사용하려면 클라이언트와 브로커 간 전송 중 암호화를 활성화해야 합니다. 다음 콘텐츠를 가진 encryptioninfo.json이라는 파일을 생성합니다: 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 "{YOUR KAFKA VERSION}" --number-of-broker-nodes 3

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

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

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

  3. AWS CLI 설치된 시스템에서 다음 명령을 실행하여 클러스터의 부트스트랩 브로커를 가져옵니다. 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. 클라이언트 머신에서 다음 명령을 실행하여 클라이언트에 대한 프라이빗 키를 만듭니다. 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 설치된 시스템에서 다음 명령을 실행하여 인증서 요청에 서명합니다. Private-CA-ARN을 PCA의 ARN으로 바꿉니다. 원하는 경우 유효성 값을 변경할 수 있습니다. 여기에서는 300을 사용합니다.

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

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

    참고

    클라이언트 인증서를 검색하려면 acm-pca get-certificate 명령을 사용하고 사용자 인증서 ARN을 지정합니다. 자세한 내용은 AWS CLI 명령 참조에서 get-certificate를 참조하세요.

  9. 다음 명령을 실행하여 대신 AWS Private CA 서명한 인증서를 가져오세요. Certificate-ARN을 이전 명령에 대한 응답에서 얻은 ARN으로 바꿉니다.

    aws acm-pca get-certificate --certificate-authority-arn Private-CA-ARN --certificate-arn Certificate-ARN
  10. 이전 명령을 실행한 JSON 결과에서 CertificateCertificateChain에 연결된 문자열을 복사합니다. 이 두 문자열을 이름이 지정된 새 파일에 붙여넣습니다 signed-certificate-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를 저장한 경로로 조정합니다. {YOUR KAFKA VERSION} 자리 표시자를 Kafka 클라이언트 버전으로 대체합니다.

    security.protocol=SSL ssl.truststore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.truststore.jks ssl.keystore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.keystore.jks ssl.keystore.password=Your-Store-Pass ssl.key.password=Your-Key-Pass

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

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

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

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

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